Name: series-workflowpq926 Phase: Succeeded StartedAt: 2026-08-01 07:21:16 +0000 UTC FinishedAt: 2026-08-01 11:39:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[0] Phase: Succeeded StartedAt: 2026-08-01 07:21:16 +0000 UTC FinishedAt: 2026-08-01 07:46:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 07:21:16 +0000 UTC FinishedAt: 2026-08-01 07:46:07 +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": "8b5ffb43ae9d27eed9165e1962963d685d879219", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BPF", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8b5ffb43ae9d27eed9165e1962963d685d879219", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BPF", "NET" ], "series_id": "428e71bb-fb16-4da6-879b-814083a1644c" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_uring_cancel_generic", "io_uring_free_tctx", "__io_uring_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0JQRiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb191cmluZ19jYW5jZWxfZ2VuZXJpYyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19mcmVlX3RjdHgmIzM0OywKICAgICYjMzQ7X19pb191cmluZ19mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgKGNhbGxlZCBkdXJpbmcgYGV4ZWN2ZWApIHdvdWxkIGluY29ycmVjdGx5IGZyZWUgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAuIEJ5IHNwbGl0dGluZyBgX19pb191cmluZ19mcmVlYCBpbnRvIGBpb191cmluZ19mcmVlX3RjdHhgIGFuZCBgX19pb191cmluZ19mcmVlYCwgaXQgZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgcHJlc2VydmVkIGFjcm9zcyBgZXhlY3ZlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YjYxMDhhNGM1N2QxMDQyYzYxY2IxZDFiNGI3YmM0MWRjYWYwOTY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzo0MzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9jYW5jZWwuYyBiL2lvX3VyaW5nL2NhbmNlbC5jXG5pbmRleCA4YzZmYTZmMzY3ZTRmLi43ZDc4MjBlYWI4NzhiIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvY2FuY2VsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2NhbmNlbC5jXG5AQCAtNjYwLDYgJiM0Mzs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpXG4gXHRcdCAqL1xuIFx0XHRhdG9taWNfZGVjKFx1MDAyNnRjdHgtXHUwMDNlaW5fY2FuY2VsKTtcbiBcdFx0LyogZm9yIGV4ZWMgYWxsIGN1cnJlbnQmIzM5O3MgcmVxdWVzdHMgc2hvdWxkIGJlIGdvbmUsIGtpbGwgdGN0eCAqL1xuLVx0XHRfX2lvX3VyaW5nX2ZyZWUoY3VycmVudCk7XG4mIzQzO1x0XHRpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3RjdHguYyBiL2lvX3VyaW5nL3RjdHguY1xuaW5kZXggY2MzYmYyYjNiZGJjOS4uNDY2YjczMDBlMjA4ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3RjdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdGN0eC5jXG5AQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuLXZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuJiM0Mzt2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiB7XG4gXHRzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCA9IHRzay1cdTAwM2Vpb191cmluZztcbiBcdHN0cnVjdCBpb190Y3R4X25vZGUgKm5vZGU7XG5AQCAtNjcsNiAmIzQzOzY3LDExIEBAIHZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0XHRrZnJlZSh0Y3R4KTtcbiBcdFx0dHNrLVx1MDAzZWlvX3VyaW5nID0gTlVMTDtcbiBcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4mIzQzO3tcbiYjNDM7XHRpb191cmluZ19mcmVlX3RjdHgodHNrKTtcbiBcdGlmICh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpIHtcbiBcdFx0aW9fcHV0X2JwZl9maWx0ZXJzKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XG4gXHRcdGtmcmVlKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdGN0eC5oIGIvaW9fdXJpbmcvdGN0eC5oXG5pbmRleCAyMzEwZDJhMGM0NmQ5Li43NmFkMWFkNDU5NGVmIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvdGN0eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90Y3R4LmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQCB2b2lkIGlvX3VyaW5nX2RlbF90Y3R4X25vZGUodW5zaWduZWQgbG9uZyBpbmRleCk7XG4gaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4gaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZV9mcm9tX3N1Ym1pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4gdm9pZCBpb191cmluZ19jbGVhbl90Y3R4KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4KTtcbiYjNDM7dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuIFxuIHZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuIGludCBpb19yaW5nZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICpfX2FyZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3VyaW5nX2NhbmNlbF9nZW5lcmljJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2ZyZWVfdGN0eCYjMzQ7LAogICAgJiMzNDtfX2lvX3VyaW5nX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAoY2FsbGVkIGR1cmluZyBgZXhlY3ZlYCkgd291bGQgaW5jb3JyZWN0bHkgZnJlZSBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gQnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBlbnN1cmVzIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGBleGVjdmVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhiNjEwOGE0YzU3ZDEwNDJjNjFjYjFkMWI0YjdiYzQxZGNhZjA5NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjQzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvY2FuY2VsLmMgYi9pb191cmluZy9jYW5jZWwuYwppbmRleCA4YzZmYTZmMzY3ZTRmLi43ZDc4MjBlYWI4NzhiIDEwMDY0NAotLS0gYS9pb191cmluZy9jYW5jZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9jYW5jZWwuYwpAQCAtNjYwLDYgJiM0Mzs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpCiAJCSAqLwogCQlhdG9taWNfZGVjKCZhbXA7dGN0eC0mZ3Q7aW5fY2FuY2VsKTsKIAkJLyogZm9yIGV4ZWMgYWxsIGN1cnJlbnQmIzM5O3MgcmVxdWVzdHMgc2hvdWxkIGJlIGdvbmUsIGtpbGwgdGN0eCAqLwotCQlfX2lvX3VyaW5nX2ZyZWUoY3VycmVudCk7CiYjNDM7CQlpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdGN0eC5jIGIvaW9fdXJpbmcvdGN0eC5jCmluZGV4IGNjM2JmMmIzYmRiYzkuLjQ2NmI3MzAwZTIwOGUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3RjdHguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90Y3R4LmMKQEAgLTQzLDcgJiM0Mzs0Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAlyZXR1cm4gaW9fd3FfY3JlYXRlKGNvbmN1cnJlbmN5LCAmYW1wO2RhdGEpOwogfQogCi12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKJiM0Mzt2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCA9IHRzay0mZ3Q7aW9fdXJpbmc7CiAJc3RydWN0IGlvX3RjdHhfbm9kZSAqbm9kZTsKQEAgLTY3LDYgJiM0Mzs2NywxMSBAQCB2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIAkJa2ZyZWUodGN0eCk7CiAJCXRzay0mZ3Q7aW9fdXJpbmcgPSBOVUxMOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7ewomIzQzOwlpb191cmluZ19mcmVlX3RjdHgodHNrKTsKIAlpZiAodHNrLSZndDtpb191cmluZ19yZXN0cmljdCkgewogCQlpb19wdXRfYnBmX2ZpbHRlcnModHNrLSZndDtpb191cmluZ19yZXN0cmljdCk7CiAJCWtmcmVlKHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3QpOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdGN0eC5oIGIvaW9fdXJpbmcvdGN0eC5oCmluZGV4IDIzMTBkMmEwYzQ2ZDkuLjc2YWQxYWQ0NTk0ZWYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3RjdHguaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90Y3R4LmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBAIHZvaWQgaW9fdXJpbmdfZGVsX3RjdHhfbm9kZSh1bnNpZ25lZCBsb25nIGluZGV4KTsKIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpOwogaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZV9mcm9tX3N1Ym1pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7CiB2b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpOwomIzQzO3ZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogdm9pZCBpb191cmluZ191bnJlZ19yaW5nZmQodm9pZCk7CiBpbnQgaW9fcmluZ2ZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqX19hcmcsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGlvX3VyaW5nL2NhbmNlbC5jYCwgYGlvX3VyaW5nL3RjdHguY2AsIGFuZCBgaW9fdXJpbmcvdGN0eC5oYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYSByZXRhaW5lZCBgX19pb191cmluZ19mcmVlYC4gVGhlIGNydWNpYWwgY2hhbmdlIGlzIHRoYXQgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBub3cgY2FsbHMgYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYF9faW9fdXJpbmdfZnJlZShjdXJyZW50KWAuIFNvLCB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCB3b24mIzM5O3QgYmUgZnJlZWQgaW4gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBhbnltb3JlLgoKTm93LCBsZXQgbWUgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBGaXJzdCwgbGV0JiMzOTtzIHJlZnJlc2ggb24gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpbiBgaW9fdXJpbmcvY2FuY2VsLmNgLiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB0YXNrIGV4aXQgb3IgZXhlYy4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJZiBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGBleGVjYCwgc2hvdWxkIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCAqcmVhbGx5KiBiZSBmcmVlZD8gSXMgdGhhdCBhIHZhbGlkIHBvaW50IG9mIGZvY3VzPyBJdCBzb3VuZHMgbGlrZSB0aGVyZSYjMzk7cyBhIHBvc3NpYmlsaXR5IHRoYXQgaXQgc2hvdWxkbiYjMzk7dC4KCkFscmlnaHQsIGxldCBtZSBzdGVwIGJhY2sgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBncmFwaCB0byBldmFsdWF0ZSB0aGlzIGNoYW5nZS4gV2FpdCwgd2hlcmUgaXMgYF9faW9fdXJpbmdfZnJlZWAgY2FsbGVkICpmcm9tKiwgYmVzaWRlcyBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBBbmQgY29udmVyc2VseSwgd2hlcmUgaXMgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCBjYWxsZWQgKmZyb20qLCBjb21wYXJlZCB0byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBUaGlzIG1pZ2h0IGJlIHRoZSBjcml0aWNhbCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZS4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYF9faW9fdXJpbmdfZnJlZWAgYW5kIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb191cmluZ19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MTE6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTEyLXZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjktXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nIHx8IHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozMDpcdFx0X19pb191cmluZ19mcmVlKHRzayk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzEtfVxuLS1cbmlvX3VyaW5nL3RjdHguYz00Nj12b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy90Y3R4LmMtNzEtXG5pb191cmluZy90Y3R4LmM6NzI6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy90Y3R4LmMtNzMte1xuLS1cbmlvX3VyaW5nL3R3LmM9NDY9c3RhdGljIHZvaWQgaW9fZmFsbGJhY2tfdHcoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpXG4tLVxuaW9fdXJpbmcvdHcuYy00OC1cdC8qXG5pb191cmluZy90dy5jOjQ5Olx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVx1MDAzZXRhc2sgdmFsaWQgYW5kLCBhcyBfX2lvX3VyaW5nX2ZyZWUoKSBpc1xuaW9fdXJpbmcvdHcuYy01MC1cdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGNhbmNlbC5jYCBmaWxlLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZnVuY3Rpb24uIEdvdHRhIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGNhbmNlbGxhdGlvbnMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyBzdGF0ZSwgc3luY2hyb25pemF0aW9uLCBhbmQgdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgaW52YWxpZGF0aW5nIHN1Ym1pdHRlZCBJL08gcmVxdWVzdHMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgdGhlIHBvaW50IHdoZXJlIHdlIGNhbiBlbnN1cmUgYSBwcm9wZXIgYW5kIGVmZmljaWVudCBncmFjZWZ1bCBzaHV0ZG93biBvciBpbnRlcnJ1cHQuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYyBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBhIHRydWx5IHJvYnVzdCBhbmQgcGVyZm9ybWFudCBhcHBsaWNhdGlvbiBsZXZlcmFnaW5nIGBpb191cmluZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvY2FuY2VsLmM9NDM3PXZvaWQgX19pb191cmluZ19jYW5jZWwoYm9vbCBjYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTQzOS1cdGlvX3VyaW5nX3VucmVnX3JpbmdmZCgpO1xuaW9fdXJpbmcvY2FuY2VsLmM6NDQwOlx0aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoY2FuY2VsX2FsbCwgTlVMTCk7XG5pb191cmluZy9jYW5jZWwuYy00NDEtfVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTU3MT1zdGF0aWMgczY0IHRjdHhfaW5mbGlnaHQoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIGJvb2wgdHJhY2tlZClcbi0tXG5pb191cmluZy9jYW5jZWwuYy01ODEtICovXG5pb191cmluZy9jYW5jZWwuYzo1ODI6X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKVxuaW9fdXJpbmcvY2FuY2VsLmMtNTgzLXtcbi0tXG5pb191cmluZy9jYW5jZWwuaD0zMz1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5oLTM1LVx0XHRcdFx0XHQgYm9vbCBjYW5jZWxfYWxsLCBib29sIGlzX3NxcG9sbF90aHJlYWQpO1xuaW9fdXJpbmcvY2FuY2VsLmg6MzY6X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKTtcbmlvX3VyaW5nL2NhbmNlbC5oLTM3LV9fY29sZCBib29sIGlvX2NhbmNlbF9jdHhfY2Ioc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHZvaWQgKmRhdGEpO1xuLS1cbmlvX3VyaW5nL3NxcG9sbC5jPTI4ND1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL3NxcG9sbC5jLTQwNi1cbmlvX3VyaW5nL3NxcG9sbC5jOjQwNzpcdGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKHRydWUsIHNxZCk7XG5pb191cmluZy9zcXBvbGwuYy00MDgtXHRyY3VfYXNzaWduX3BvaW50ZXIoc3FkLVx1MDAzZXRocmVhZCwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENhbmNlbGxhdGlvbiBQYXRoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCB3aXRoIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuIEluc3RlYWQgb2YgdGhlIG9sZCBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYCwgaXQmIzM5O3Mgbm93IGNhbGxpbmcgYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYmVjYXVzZSB0aGUgb2xkIG1ldGhvZCwgYF9faW9fdXJpbmdfZnJlZWAsIHVzZWQgdG8gaGFuZGxlIGZyZWVpbmcgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLiBTbywgZWZmZWN0aXZlbHksIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2Agd29uJiMzOTt0IGJlIG1hbmFnaW5nIHRoYXQgbWVtb3J5IGFueW1vcmUuCgpIbW0sIHRoaXMgdHJpZ2dlcnMgYSBtZW50YWwgY2hhaW4gcmVhY3Rpb24uIExldCBtZSB0cmFjZSB0aGUgY2FsbHMuIFdoZXJlIGlzIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgdXNlZD8gSSBiZWxpZXZlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX2lvX3VyaW5nX2NhbmNlbGAuIEFuZCBgX19pb191cmluZ19jYW5jZWxgIGl0c2VsZiwgcmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGVpdGhlciBgaW9fdXJpbmdfdGFza19jYW5jZWxgIG9yLCBwb3RlbnRpYWxseSwgZnJvbSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGl0c2VsZj8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4gUmlnaHQsIGJlc3QgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmhgIHRvIHNlZSBob3cgYF9faW9fdXJpbmdfY2FuY2VsYCBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9fdXJpbmdfY2FuY2VsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW9fdXJpbmcuaC05LSNpZiBkZWZpbmVkKENPTkZJR19JT19VUklORylcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoxMDp2b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMTEtdm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xNz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZmlsZXNfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTE5LVx0aWYgKGN1cnJlbnQtXHUwMDNlaW9fdXJpbmcpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjA6XHRcdF9faW9fdXJpbmdfY2FuY2VsKGZhbHNlKTtcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yMS19XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX3Rhc2tfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI0LVx0aWYgKGN1cnJlbnQtXHUwMDNlaW9fdXJpbmcpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjU6XHRcdF9faW9fdXJpbmdfY2FuY2VsKHRydWUpO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI2LX1cbi0tXG5pb191cmluZy9jYW5jZWwuYz00MTQ9Ym9vbCBpb19tYXRjaF90YXNrX3NhZmUoc3RydWN0IGlvX2tpb2NiICpoZWFkLCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy00MzYtXG5pb191cmluZy9jYW5jZWwuYzo0Mzc6dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpXG5pb191cmluZy9jYW5jZWwuYy00Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBDYW5jZWxsYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIGNhbmNlbGxhdGlvbiBjb2RlLiBJIHNlZSB0aGF0IGBfX2lvX3VyaW5nX2NhbmNlbGAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBpb191cmluZ19maWxlc19jYW5jZWxgIGFuZCBgaW9fdXJpbmdfdGFza19jYW5jZWxgLiBNYWtlcyBzZW5zZSwgY292ZXJpbmcgYm90aCBmaWxlLXNwZWNpZmljIGFuZCB0YXNrLXJlbGF0ZWQgY2FuY2VsbGF0aW9ucy4gTm93LCBgaW9fdXJpbmdfdGFza19jYW5jZWxgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGdldHMgY2FsbGVkIGZyb20gYGRvX2V4aXRgIGFuZCBgYmVnaW5fbmV3X2V4ZWNgLiBUaGF0IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlLCBpdCBjb3VsZCBiZSBjYWxsZWQgZHVyaW5nIHByb2Nlc3MgdGVybWluYXRpb24uCgpIZXJlJiMzOTtzIHRoZSBiaXQgdGhhdCYjMzk7cyBidWdnaW5nIG1lLiBJZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgICp3ZXJlKiB0byBjYWxsIGBfX2lvX3VyaW5nX2ZyZWUoY3VycmVudClgLCBpdCB3b3VsZCBlbmQgdXAgZnJlZWluZyBgdHNrLSZndDtpb191cmluZ19yZXN0cmljdGAsIHdoaWNoIGlzIHRoZSByZXN0cmljdGlvbiBzZXQgZm9yIHRoaXMgdGFzay4gQnV0IGhhbmcgb24uLi4gdGhhdCBgdHNrLSZndDtpb191cmluZ19yZXN0cmljdGAgbWVtYmVyICpzaG91bGQqIG9ubHkgYmUgZnJlZWQgd2hlbiB0aGUgdGFzayBpdHNlbGYgaXMgZnJlZWQuIFRoYXQgaGFwcGVucyBsYXRlciwgcmlnaHQ/IElzbiYjMzk7dCBpdCBgaW9fdXJpbmdfZnJlZWAmIzM5O3Mgam9iLCB3aGljaCB0aGVuIGNhbGxzIGBfX2lvX3VyaW5nX2ZyZWVgPyBXZSBkb24mIzM5O3Qgd2FudCB0byBwcmVtYXR1cmVseSBmcmVlIHRoZSByZXN0cmljdGlvbi4KCkFscmlnaHQsIHNvIHRoZSBrZXkgaXM6IHdoZXJlICppcyogYGlvX3VyaW5nX2ZyZWVgIGNhbGxlZD8gSXMgaXQgd2l0aGluIGBmcmVlX3Rhc2tgIG9yIGEgc2ltaWxhciBsaWZlY3ljbGUgbWFuYWdlbWVudCBmdW5jdGlvbj8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGJhY2sgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgbGlmZXNwYW4gb2YgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGRhdGEuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY2FsbCBzaXRlcyBvZiBgaW9fdXJpbmdfZnJlZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfZnJlZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MTA9dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjExOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0xMi12b2lkIGlvX3VyaW5nX3VucmVnX3JpbmdmZCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX3Rhc2tfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI2LX1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoyNzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yOC17XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjktXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nIHx8IHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozMDpcdFx0X19pb191cmluZ19mcmVlKHRzayk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzEtfVxuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZmlsZXNfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTQ1LX1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDo0NjpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC00Ny17XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NTgyPV9fY29sZCB2b2lkIGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKGJvb2wgY2FuY2VsX2FsbCwgc3RydWN0IGlvX3NxX2RhdGEgKnNxZClcbi0tXG5pb191cmluZy9jYW5jZWwuYy02NjItXHRcdC8qIGZvciBleGVjIGFsbCBjdXJyZW50JiMzOTtzIHJlcXVlc3RzIHNob3VsZCBiZSBnb25lLCBraWxsIHRjdHggKi9cbmlvX3VyaW5nL2NhbmNlbC5jOjY2MzpcdFx0aW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpO1xuaW9fdXJpbmcvY2FuY2VsLmMtNjY0LVx0fVxuLS1cbmlvX3VyaW5nL3RjdHguYz0xNj1zdGF0aWMgc3RydWN0IGlvX3dxICppb19pbml0X3dxX29mZmxvYWQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvdGN0eC5jLTQ1LVxuaW9fdXJpbmcvdGN0eC5jOjQ2OnZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuaW9fdXJpbmcvdGN0eC5jLTQ3LXtcbi0tXG5pb191cmluZy90Y3R4LmMtNzEtXG5pb191cmluZy90Y3R4LmM6NzI6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy90Y3R4LmMtNzMte1xuaW9fdXJpbmcvdGN0eC5jOjc0Olx0aW9fdXJpbmdfZnJlZV90Y3R4KHRzayk7XG5pb191cmluZy90Y3R4LmMtNzUtXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XG4tLVxuaW9fdXJpbmcvdGN0eC5oPTE0PXZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG5pb191cmluZy90Y3R4Lmg6MTU6dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW9fdXJpbmcvdGN0eC5oLTE2LVxuLS1cbmlvX3VyaW5nL3R3LmM9NDY9c3RhdGljIHZvaWQgaW9fZmFsbGJhY2tfdHcoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpXG4tLVxuaW9fdXJpbmcvdHcuYy00OC1cdC8qXG5pb191cmluZy90dy5jOjQ5Olx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVx1MDAzZXRhc2sgdmFsaWQgYW5kLCBhcyBfX2lvX3VyaW5nX2ZyZWUoKSBpc1xuaW9fdXJpbmcvdHcuYy01MC1cdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcbi0tXG5rZXJuZWwvZm9yay5jPTc4MT12b2lkIF9fcHV0X3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNzg3LVx0dW53aW5kX3Rhc2tfZnJlZSh0c2spO1xua2VybmVsL2ZvcmsuYzo3ODg6XHRpb191cmluZ19mcmVlKHRzayk7XG5rZXJuZWwvZm9yay5jLTc4OS1cdGNncm91cF90YXNrX2ZyZWUodHNrKTtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI2MTItYmFkX2ZvcmtfY2xlYW51cF9kZWxheWFjY3Q6XG5rZXJuZWwvZm9yay5jOjI2MTM6XHRpb191cmluZ19mcmVlKHApO1xua2VybmVsL2ZvcmsuYy0yNjE0LVx0ZGVsYXlhY2N0X3Rza19mcmVlKHApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYz0xNjQ9c3RhdGljIHZvaWQgZnJlZV9iYXRjaF9mZXRjaF9idWYoc3RydWN0IHVibGtfdGhyZWFkICp0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYy0xNjgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZW5yX2ZldGNoX2J1ZnM7IGkmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2JhdGNoLmM6MTY5Olx0XHRpb191cmluZ19mcmVlX2J1Zl9yaW5nKFx1MDAyNnQtXHUwMDNlcmluZywgdC1cdTAwM2VmZXRjaFtpXS5iciwgMSwgaSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2JhdGNoLmMtMTcwLVx0XHRtdW5sb2NrKHQtXHUwMDNlZmV0Y2hbaV0uZmV0Y2hfYnVmLCB0LVx1MDAzZWZldGNoW2ldLmZldGNoX2J1Zl9zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFJlc291cmNlIE1hbmFnZW1lbnQgaW4gVGFzayBMaWZlY3ljbGUqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBsaWZlY3ljbGUgb2YgYGlvX3VyaW5nYCByZXNvdXJjZXMgdGllZCB0byBhIHRhc2ssIGFuZCBzb21lIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpb3MgYXJlIHN0YXJ0aW5nIHRvIGp1bXAgb3V0IGF0IG1lLiBMZXQgbWUgc2VlLi4uIGBpb191cmluZ19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgX19wdXRfdGFza19zdHJ1Y3RgLCBhbmQgYWxzbyBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBTbywgaXQmIzM5O3MgdGllZCB0byB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlIHRhc2sgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBnZXRzIGludm9rZWQgZnJvbSBgZG9fZXhpdGAgYW5kIGBiZWdpbl9uZXdfZXhlY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSWYgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAqYWxzbyogY2FsbHMgYF9faW9fdXJpbmdfZnJlZWAsIGl0IHBvdGVudGlhbGx5IGZyZWVzIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCB3aGlsZSB0aGUgdGFzayBzdHJ1Y3R1cmUgaXRzZWxmIGlzIHN0aWxsIGFyb3VuZC4KCk5vdywgaWYgdGhhdCBoYXBwZW5zLCBhbmQgdGhlIHRhc2sgaXMgc3RpbGwgYWxpdmUsIHdoYXQgcHJldmVudHMgYGlvX3VyaW5nX2ZyZWVgIGZyb20gYmVpbmcgY2FsbGVkICphZ2FpbiogbGF0ZXIgZHVyaW5nIHRoZSBub3JtYWwgYF9fcHV0X3Rhc2tfc3RydWN0YCBwcm9jZXNzLCBjaGVja2luZyBhIHBvdGVudGlhbGx5IGZyZWVkIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YD8gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZSBmcmVlIG9uIG91ciBoYW5kcywgdGhhdCBkb2VzbiYjMzk7dCBzb3VuZCByaWdodC4KCkhhbmcgb24uLi4gTGV0IG1lIHRoaW5rLiBEb2VzbiYjMzk7dCBgX19pb191cmluZ19mcmVlYCBzZXQgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMYCAqYWZ0ZXIqIGZyZWVpbmcgdGhlIG1lbW9yeT8gQWhhISBUaGF0IHNob3VsZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgYWdhaW4gd2hlbiBgX19wdXRfdGFza19zdHJ1Y3RgIGlzIGNhbGxlZC4gT2theSwgSSBiZXR0ZXIgY2hlY2sgdGhlIGNvZGUgZm9yIGBfX2lvX3VyaW5nX2ZyZWVgIGluIGBpb191cmluZy90Y3R4LmNgIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLCBiZWNhdXNlIHRoaXMgaXMgbG9va2luZyBsaWtlIGEgcG90ZW50aWFsbHkgZGVsaWNhdGUgcmFjZSBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgX19pb191cmluZ19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MTE6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTEyLXZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuLS1cbmlvX3VyaW5nL3RjdHguYz00Nj12b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy90Y3R4LmMtNzEtXG5pb191cmluZy90Y3R4LmM6NzI6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy90Y3R4LmMtNzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmcvdGN0eC5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBpb191cmluZy90Y3R4LmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNzIuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbWlnaHQgaG9sZCBzb21lIGNydWNpYWwgZGV0YWlscyBJJiMzOTttIGFmdGVyLCByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBmaWVsZCYjMzk7cyByZWxldmFudCBjb25jZXB0LCBlLmcuLCB0aHJlYWQgY29udGV4dCBtYW5hZ2VtZW50LCBjb21wbGV0aW9uIHF1ZXVlIGhhbmRsaW5nLCBzdWJtaXNzaW9uIHJpbmcgaW50ZXJhY3Rpb24sIGV0Yy5dLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggW21lbnRpb24geW91ciByZWxldmFudCBleHBlcmllbmNlXSwgdGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIFttZW50aW9uIHRoZSBwcm9ibGVtL3RvcGljIHlvdSBhcmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmRdLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgW21lbnRpb24gc3BlY2lmaWMgc2lnbmFscyB5b3UgYXJlIGxvb2tpbmcgZm9yLCBlLmcuLCBob3cgdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQsIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBsb2NrcyBiZWluZyBhY3F1aXJlZCwgZXRjLl0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvdGN0eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiAgNjE6XHRcdFx0XHRicmVhaztcbiAgNjI6XHRcdFx0fVxuICA2MzpcdFx0XHRXQVJOX09OX09OQ0UodGN0eC1cdTAwM2Vpb193cSk7XG4gIDY0Olx0XHRcdFdBUk5fT05fT05DRSh0Y3R4LVx1MDAzZWNhY2hlZF9yZWZzKTtcbiAgNjU6XHRcbiAgNjY6XHRcdFx0cGVyY3B1X2NvdW50ZXJfZGVzdHJveShcdTAwMjZ0Y3R4LVx1MDAzZWluZmxpZ2h0KTtcbiAgNjc6XHRcdFx0a2ZyZWUodGN0eCk7XG4gIDY4Olx0XHRcdHRzay1cdTAwM2Vpb191cmluZyA9IE5VTEw7XG4gIDY5Olx0XHR9XG4gIDcwOlx0fVxuICA3MTpcdFxuICA3MjpcdHZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuICA3MzpcdHtcbiAgNzQ6XHRcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xuICA3NTpcdFx0aWYgKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xuICA3NjpcdFx0XHRpb19wdXRfYnBmX2ZpbHRlcnModHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbiAgNzc6XHRcdFx0a2ZyZWUodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbiAgNzg6XHRcdFx0dHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0ID0gTlVMTDtcbiAgNzk6XHRcdH1cbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0X19jb2xkIHN0cnVjdCBpb191cmluZ190YXNrICppb191cmluZ19hbGxvY190YXNrX2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuICA4MzpcdFx0XHRcdFx0XHRcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gIDg0Olx0e1xuICA4NTpcdFx0c3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHg7XG4gIDg2Olx0XHRpbnQgcmV0O1xuICA4NzpcdFxuICA4ODpcdFx0dGN0eCA9IGt6YWxsb2Nfb2JqKCp0Y3R4KTtcbiAgODk6XHRcdGlmICh1bmxpa2VseSghdGN0eCkpXG4gIDkwOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA5MTpcdFxuICA5MjpcdFx0cmV0ID0gcGVyY3B1X2NvdW50ZXJfaW5pdChcdTAwMjZ0Y3R4LVx1MDAzZWluZmxpZ2h0LCAwLCBHRlBfS0VSTkVMKTtcbiAgOTM6XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4gIDk0Olx0XHRcdGtmcmVlKHRjdHgpO1xuICA5NTpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuICA5NjpcdFx0fVxuICA5NzpcdFxuICA5ODpcdFx0dGN0eC1cdTAwM2Vpb193cSA9IGlvX2luaXRfd3Ffb2ZmbG9hZChjdHgsIHRhc2spO1xuICA5OTpcdFx0aWYgKElTX0VSUih0Y3R4LVx1MDAzZWlvX3dxKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIGBfX2lvX3VyaW5nX2ZyZWVgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCBhbmQgemVyb2luZyBvdXQgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLiBUaGF0IG1ha2VzIHNlbnNlLiBCZWZvcmUgdGhpcyBwYXRjaCwgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3YXMgY2FsbGluZyBgX19pb191cmluZ19mcmVlYCBvbiB0aGUgKmN1cnJlbnQqIHRhc2suIFNvLCB0aGF0IGNhbGwgdG8gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3b3VsZCBiZSBmcmVlaW5nIGFuZCBudWxsaW5nIG91dCBgdHNrLSZndDtpb191cmluZ19yZXN0cmljdGAgd2hpY2ggc2VlbXMgYSBiaXQgb2ZmLCBkb2VzbiYjMzk7dCBpdD8KClRoZSBraWNrZXIgaGVyZSBpcyB0aGF0IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZ2V0cyBjYWxsZWQsIGFzIGZhciBhcyBJIGNhbiBzZWUgZnJvbSBjb250ZXh0LCB3aXRoaW4gYW4gYGV4ZWN2ZWAgY2FsbC4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXM7IGEgcHJvY2VzcyBzaG91bGQgKm5vdCogYmUgbG9zaW5nIGl0cyBgaW9fdXJpbmdfcmVzdHJpY3RgIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGFuIGBleGVjdmVgIOKAkyB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGJhZCBuZXdzISBXaGF0ICppcyogYGlvX3VyaW5nX3Jlc3RyaWN0YD8gQmFzZWQgb24gdGhlIG5hbWluZywgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gQlBGIGZpbHRlcmluZyBmb3IgaW9fdXJpbmfigKYgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGZvciBgaW9fdXJpbmdfcmVzdHJpY3RgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb191cmluZ19yZXN0cmljdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjgte1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjI5Olx0aWYgKHRzay1cdTAwM2Vpb191cmluZyB8fCB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzAtXHRcdF9faW9fdXJpbmdfZnJlZSh0c2spO1xuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0zMj1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTMzLXtcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozNDpcdGlmICh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzUtXHRcdHJldHVybiBfX2lvX3VyaW5nX2ZvcmsodHNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEyMDAtXHRzdHJ1Y3QgaW9fdXJpbmdfdGFza1x0XHQqaW9fdXJpbmc7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTIwMTpcdHN0cnVjdCBpb19yZXN0cmljdGlvblx0XHQqaW9fdXJpbmdfcmVzdHJpY3Q7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTIwMi0jZW5kaWZcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD04MTI9c3RydWN0IGlvX3VyaW5nX3Byb2JlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MTktXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo4MjA6c3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uIHtcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTgyMS1cdF9fdTE2IG9wY29kZTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD04MzE9c3RydWN0IGlvX3VyaW5nX3Rhc2tfcmVzdHJpY3Rpb24ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTgzNC1cdF9fdTMyIHJlc3ZbM107XG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo4MzU6XHRfX0RFQ0xBUkVfRkxFWF9BUlJBWShzdHJ1Y3QgaW9fdXJpbmdfcmVzdHJpY3Rpb24sIHJlc3RyaWN0aW9ucyk7XG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MzYtfTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD05MzY9c3RydWN0IGlvX3VyaW5nX25hcGkge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1NS0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg6OTU2OiAqIGlvX3VyaW5nX3Jlc3RyaWN0aW9uLVx1MDAzZW9wY29kZSB2YWx1ZXNcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1Ny0gKi9cbi0tXG5pb191cmluZy9pb191cmluZy5jPTI5NzM9c3RhdGljIF9fY29sZCBpbnQgaW9fdXJpbmdfY3JlYXRlKHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zMDM3LVx0ICovXG5pb191cmluZy9pb191cmluZy5jOjMwMzg6XHRpZiAoY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MzAzOTpcdFx0aW9fY3R4X3Jlc3RyaWN0aW9uX2Nsb25lKGN0eCwgY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XG5pb191cmluZy9pb191cmluZy5jLTMwNDAtXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMTE9c3RhdGljIF9fY29sZCBpbnQgaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTEzLXtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTE0Olx0c3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uICpyZXM7XG5pb191cmluZy9yZWdpc3Rlci5jLTExNS1cdHNpemVfdCBzaXplO1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MjAxPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDgtXHQvKiBEaXNhbGxvdyBpZiB0YXNrIGFscmVhZHkgaGFzIHJlZ2lzdGVyZWQgcmVzdHJpY3Rpb25zICovXG5pb191cmluZy9yZWdpc3Rlci5jOjIwOTpcdGlmIChjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMTAtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMzctXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjIzODpcdGN1cnJlbnQtXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSByZXM7XG5pb191cmluZy9yZWdpc3Rlci5jLTIzOS1cdHJldHVybiAwO1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MjQyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjU4LVx0LyogSWYgbm8gdGFzayByZXN0cmljdGlvbnMgZXhpc3QsIHNldHVwIGEgbmV3IHNldCAqL1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNTk6XHRyZXMgPSBjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0O1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNjAtXHRpZiAoIXJlcykge1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjY3LVx0aWYgKHJldCkge1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNjg6XHRcdGlmIChyZXMgIT0gY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjY5LVx0XHRcdGtmcmVlKHJlcyk7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzEtXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjI3MjpcdGlmICghY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjczOlx0XHRjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0ID0gcmVzO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzQtXHRyZXR1cm4gMDtcbi0tXG5pb191cmluZy90Y3R4LmM9NzI9dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW9fdXJpbmcvdGN0eC5jLTc0LVx0aW9fdXJpbmdfZnJlZV90Y3R4KHRzayk7XG5pb191cmluZy90Y3R4LmM6NzU6XHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XG5pb191cmluZy90Y3R4LmM6NzY6XHRcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuaW9fdXJpbmcvdGN0eC5jOjc3Olx0XHRrZnJlZSh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuaW9fdXJpbmcvdGN0eC5jOjc4Olx0XHR0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMO1xuaW9fdXJpbmcvdGN0eC5jLTc5LVx0fVxuLS1cbmlvX3VyaW5nL3RjdHguYz00MTA9aW50IF9faW9fdXJpbmdfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmlvX3VyaW5nL3RjdHguYy00MTEte1xuaW9fdXJpbmcvdGN0eC5jOjQxMjpcdHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzLCAqc3JjID0gdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0O1xuaW9fdXJpbmcvdGN0eC5jLTQxMy1cbmlvX3VyaW5nL3RjdHguYy00MTQtXHQvKiBEb24mIzM5O3QgbGVhdmUgaXQgZGFuZ2xpbmcgb24gZXJyb3IgKi9cbmlvX3VyaW5nL3RjdHguYzo0MTU6XHR0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMO1xuaW9fdXJpbmcvdGN0eC5jLTQxNi1cbi0tXG5pb191cmluZy90Y3R4LmMtNDIwLVxuaW9fdXJpbmcvdGN0eC5jOjQyMTpcdHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCA9IHJlcztcbmlvX3VyaW5nL3RjdHguYy00MjItXHRpb19yZXN0cmljdGlvbl9jbG9uZShyZXMsIHNyYyk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9NjIyPXN0cnVjdCBpb191cmluZ19wcm9iZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNjI5LVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg6NjMwOnN0cnVjdCBpb191cmluZ19yZXN0cmljdGlvbiB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02MzEtXHRfX3UxNiBvcGNvZGU7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9Njc5PXN0cnVjdCBpb191cmluZ19idWZfcmVnIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02ODctLypcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjY4ODogKiBpb191cmluZ19yZXN0cmljdGlvbi1cdTAwM2VvcGNvZGUgdmFsdWVzXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02ODktICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBpb191cmluZyBSZXN0cmljdGlvbiBGaXgqKgoKT2theSwgc28gYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBhIHRhc2stbGV2ZWwgc2V0dGluZyBmb3IgaW9fdXJpbmcsIGFuZCBpdCYjMzk7cyBjbG9uZWQgd2hlbiBhIHByb2Nlc3MgZm9ya3MuIFRoZSBrZXkgaXNzdWUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGBleGVjdmVgLiBJIHNlZSB0aGF0IHdoZW4gYSB0YXNrIGNhbGxzIGBleGVjdmVgLCB0aGUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBmdW5jdGlvbiBpcyBjYWxsZWQuIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxpbmcgYF9faW9fdXJpbmdfZnJlZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllczogYF9faW9fdXJpbmdfZnJlZWAgd2FzIGZyZWVpbmcgdGhlIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCBhbmQgc2V0dGluZyBpdCB0byBOVUxMLgoKTm93LCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgcmVkIGZsYWcgaW4gbXkgbWluZC4gSWYgYGV4ZWN2ZWAgY2xlYXJzIHRoZSByZXN0cmljdGlvbnMsIHRoZW4gYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHByb2dyYW0sIHRoZSB0YXNrIHdvdWxkIGJlIHJ1bm5pbmcgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb25zLiBCdXQgdGhlIHdob2xlICpwb2ludCogb2YgcmVzdHJpY3Rpb25zIGlzIHRvIGRlZmluZSwgYW5kICplbmZvcmNlKiwgbGltaXRhdGlvbnMgdGhhdCBwZXJzaXN0IGFjcm9zcyBgZXhlY3ZlYCwgcmlnaHQ/IE9yIHBlcmhhcHMgdGhleSBzaG91bGRuJiMzOTt0IGJlIGNsZWFyZWQgYmVjYXVzZSBgZXhlY3ZlYCBzaG91bGRuJiMzOTt0IGJ5cGFzcyByZXN0cmljdGlvbnMhCgpUaGF0JiMzOTtzIGl0ISBJZiBhIHRhc2sgc2V0cyB1cCByZXN0cmljdGlvbnMgYW5kIHRoZW4gY2FsbHMgYGV4ZWN2ZWAsIGJ1dCB0aG9zZSByZXN0cmljdGlvbnMgYXJlIGNsZWFyZWQgYnkgdGhlIGBleGVjdmVgIGNhbGwsIHRoZW4gdGhlIG5ldyBwcm9ncmFtIHdvdWxkIGJlIHJ1bm5pbmcgKndpdGhvdXQqIHRob3NlIHJlc3RyaWN0aW9ucy4gVGhhdCYjMzk7cyBhIGNsZWFyIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyB0aGlzIGV4YWN0IGJ1Zzogd2hlcmUgYGV4ZWN2ZWAgdW5pbnRlbnRpb25hbGx5IGNsZWFycyBgaW9fdXJpbmdfcmVzdHJpY3RgLiBUaGUgc29sdXRpb24/IEluc3RlYWQgb2YgdGhlIG9sZCwgaW5jb3JyZWN0IGNhbGwgdG8gYF9faW9fdXJpbmdfZnJlZShjdXJyZW50KWAgaW5zaWRlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIHRoZSBwYXRjaCByZXBsYWNlcyBpdCB3aXRoIGBpb191cmluZ19mcmVlX3RjdHgoY3VycmVudClgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBzZXR0aW5nIGlzIHByZXNlcnZlZCBhY3Jvc3MgdGhlIGBleGVjdmVgIGNhbGwuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBmdXp6aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBpb191cmluZyBsb2dpYyBmaXguIFdlIGNhbiBkZWZpbml0ZWx5IGZ1enogaXQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBhbmQgYGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza2Agc2luY2UgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzZXQgYGlvX3VyaW5nX3Jlc3RyaWN0YC4gQW5kLCBvZiBjb3Vyc2UsIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2Agd2hpY2ggaXMgdGhlIGZvY3VzIG9mIHRoZSBwYXRjaCBiZWNhdXNlIGl0IGdldHMgY2FsbGVkIGR1cmluZyBgZXhlY3ZlYC4gV2FpdCwgYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBpcyBjYWxsZWQgYnkgYGlvX3VyaW5nX3JlZ2lzdGVyYC4gT2theSwgZ290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTE2Nz1zdGF0aWMgX19jb2xkIGludCBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDAtXG5pb191cmluZy9yZWdpc3Rlci5jOjIwMTpzdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDIte1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MTAwMT1zdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDA5LVx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUkVTVFJJQ1RJT05TOlxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDEwOlx0XHRyZXR1cm4gaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2soYXJnLCBucl9hcmdzKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAxMS1cdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgaW9fdXJpbmcgUmVnaXN0cmF0aW9uIE1lY2hhbmljcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBpb191cmluZ19yZWdpc3RlcmAgZm9yIGEgbW9tZW50LiBSaWdodCwgbGV0IG1lIHNlZSwgSSBrbm93IHRoYXQgYElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlNgIGFuZCBgSU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJgIGFyZSB0aGUgb3Bjb2RlcyB1c2VkIHdpdGhpbiB0aGF0IGNhbGwsIHRoYXQgbWFrZXMgc2Vuc2UuIEhtbSwgSSBoYXZlIGEgZmVlbGluZyB0aGVyZSYjMzk7cyBhIHNwZWNpYWwgY2FzZSwgYSBudWFuY2UgaGVyZSDigJMgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYD8gTm93IHdoZXJlIGRvZXMgdGhhdCBjb21lIGludG8gcGxheS4uLiBBaCwgSSBzZWVtIHRvIHJlbWVtYmVyIGl0JiMzOTtzIHVzZWQgd2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yLCBgZmRgLCBpcyBzZXQgdG8gYC0xYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXNuJiMzOTt0IGl0PyBCZXR0ZXIgY2hlY2sgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcGFydGljdWxhcnMuIEkgd2FudCB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcmVnaXN0ZXIuYz05ODA9c3RhdGljIGludCBpb191cmluZ19yZWdpc3Rlcl9zZW5kX21zZ19yaW5nKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwMC0gKi9cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAwMTpzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMDItXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTEwMTc9U1lTQ0FMTF9ERUZJTkU0KGlvX3VyaW5nX3JlZ2lzdGVyLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9wY29kZSxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMzEtXHRpZiAoZmQgPT0gLTEpXG5pb191cmluZy9yZWdpc3Rlci5jOjEwMzI6XHRcdHJldHVybiBpb191cmluZ19yZWdpc3Rlcl9ibGluZChvcGNvZGUsIGFyZywgbnJfYXJncyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTEwMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzY4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGlvX3VyaW5nIFJlc3RyaWN0aW9ucyBhbmQgQlBGIEZpbHRlciBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGUgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXN0ZW0gY2FsbCwgd2hlbiB1c2VkIHdpdGggYGZkID09IC0xYCwgY2FsbHMgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCwgd2hpY2ggdWx0aW1hdGVseSBsZWFkcyB0byBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgIGJlaW5nIGludm9rZWQuIFRoaXMgbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggYWltcyB0byBwcmV2ZW50IGBpb191cmluZ19yZXN0cmljdGAgZnJvbSBiZWluZyBmcmVlZCBkdXJpbmcgYW4gYGV4ZWN2ZWAgY2FsbC4gTXkgZnV6emluZyBzdHJhdGVneSB0aGVuIG5lZWRzIHRvIGJlIHByZXR0eSBzcGVjaWZpYyB0byB0ZXN0IHRoaXM6CgoxLiAgRmlyc3QsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBpb191cmluZ19yZWdpc3RlcmAgd2l0aCBgZmQgPSAtMWAgYW5kIGVpdGhlciB0aGUgYElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlNgIG9yIGBJT1JJTkdfUkVHSVNURVJfQlBGX0ZJTFRFUmAgb3Bjb2RlIHRvIHNldCBgY3VycmVudC0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLgoyLiAgTmV4dCwgSSBuZWVkIHRvIHRyaWdnZXIgYW4gYGV4ZWN2ZWAuCjMuICBBZnRlciB0aGUgYGV4ZWN2ZWAsIHRoZSAqbmV3KiBwcm9ncmFtIHdpbGwgaG9wZWZ1bGx5IHN0aWxsIGhhdmUgYWNjZXNzIHRvIHRoYXQgYGN1cnJlbnQtJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCBjb250ZXh0Lgo0LiAgRmluYWxseSwgSSBjYW4gZWl0aGVyIHRyeSB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiB0aGF0ICpzaG91bGQqIGJlIHJlc3RyaWN0ZWQsIG9yIEkgY2FuIGp1c3QgZXhpdCB0aGUgcHJvZ3JhbSBhbmQgbGV0IGBfX2lvX3VyaW5nX2ZyZWVgIGNsZWFuIHRoaW5ncyB1cC4KClRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCB0YXJnZXQgYXJlOiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgLCBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCwgYGlvX3VyaW5nX2ZyZWVfdGN0eGAsIGFuZCBgX19pb191cmluZ19mcmVlYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgIGFuZCBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBhcmUgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBCdXQgd2FpdCwgdGhlIGd1aWRlbGluZXMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gRG9lcyB0aGF0IG1lYW4gSSBzaG91bGQgYmUgdXNpbmcgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCBvciBgc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYD8gQWN0dWFsbHksIGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAgaXMgYWxzbyBzdGF0aWMhIE9rYXksIGxldCBtZSBjaGVjayB0aGUgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXNjYWxsIGRpcmVjdGx5LiBBaCwgdGhhdCYjMzk7cyBlaXRoZXIgYF9feDY0X3N5c19pb191cmluZ19yZWdpc3RlcmAgb3Igc2ltcGx5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIHRoYXQmIzM5O3MgYmV0dGVyLgoKQSBxdWljayBjaGVjayBvbiB0aGUgb3RoZXIgb25lczogYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpcyBub24tc3RhdGljLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCBpcyBub24tc3RhdGljLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAgaXMgbm9uLXN0YXRpYyB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcmVmZXIgdG8gYGlvX3VyaW5nL3RjdHguY2AgbGF0ZXIgdG8gY2hlY2sgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy90Y3R4LmM9MTY9c3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3RjdHguYy00NS1cbmlvX3VyaW5nL3RjdHguYzo0Njp2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmlvX3VyaW5nL3RjdHguYy00Ny17XG4tLVxuaW9fdXJpbmcvdGN0eC5oPTE0PXZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG5pb191cmluZy90Y3R4Lmg6MTU6dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW9fdXJpbmcvdGN0eC5oLTE2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBpb191cmluZyBTeW1ib2wgUmVzb2x1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3ltYm9scyByZWxhdGVkIHRvIGBpb191cmluZ2AgYW5kIHRyeWluZyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgb25lcy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBuZWl0aGVyIGlzIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuIFRoYXQgbWVhbnMgdGhlc2UgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgbXkgZm9jdXMuCgpJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYF9feDY0X3N5c19pb191cmluZ19yZWdpc3RlcmAgb3IgcG90ZW50aWFsbHkganVzdCBgc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBhcyBhIGZvY3VzIHN5bWJvbCwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYHN5c19pb191cmluZ19yZWdpc3RlcmAgaXMgdXN1YWxseSBkZWZpbmVkIHVzaW5nIGBTWVNDQUxMX0RFRklORTQoLi4uKWAuIEluY2x1ZGluZyBpdCBhZGRzIHNvbWUgY29tcGxleGl0eSB0aGF0IEkgY2FuIGF2b2lkLgoKVGhlcmVmb3JlLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCBwYXRoIGlzIHRvIGNvbmNlbnRyYXRlIG9uIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSwgbm9uLXN0YXRpYyBzeW1ib2xzIHRoYXQmIzM5O2xsIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4KCk5leHQsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBkZXBlbmRlbmN5IG9uIHNwZWNpZmljIGNvbmZpZ3MsIGxpa2UgYENPTkZJR19JT19VUklOR2AuIFRpbWUgdG8gZGl2ZSBpbnRvIGBpbml0L0tjb25maWdgIG9yIHBvc3NpYmx5IGBpb191cmluZy9LY29uZmlnYCB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTctXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDc1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gaW9fdXJpbmcmIzM5O3MgQlBGIFJlc3RyaWN0aW9ucyoqCgpPa2F5LCBzbyBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUga2V5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaW9fdXJpbmcsIG9idmlvdXNseS4gQnV0IEkganVzdCBoYWQgYSBmbGFzaCBvZiBpbnNpZ2h0IOKAkyB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCByZXN0cmljdGluZyBpdHMgY2FwYWJpbGl0aWVzIHdpdGggQlBGIGZpbHRlcnM/IFllcywgdGhhdCYjMzk7cyBpdCEgYGlvX3VyaW5nX3Jlc3RyaWN0YCByaW5ncyBhIGJlbGwsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuCgpSaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBob3cgQlBGIGZpbHRlcnMgYXJlIGluY29ycG9yYXRlZCBkdXJpbmcgcmVnaXN0cmF0aW9uLCBzbyBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBzb3VuZHMgbGlrZSB0aGUgZnVuY3Rpb24gdG8gZXhhbWluZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbXBsZW1lbnQgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTIwMT1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjQxLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNDI6c3RhdGljIGludCBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG5pb191cmluZy9yZWdpc3Rlci5jLTI0My17XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDAxPXN0YXRpYyBpbnQgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQodW5zaWduZWQgaW50IG9wY29kZSwgdm9pZCBfX3VzZXIgKmFyZyxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMTEtXHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDEyOlx0XHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTEwMTMtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTM2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCB0aGVzZSB3ZXJlIG15IG93biB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBhbmQgdGhlIGBDT05GSUdfSU9fVVJJTkdfQlBGYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgZGVwZW5kZW5jeSB0aGVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBpcyBjcml0aWNhbCBmb3IgW2luc2VydCByZWFzb24gcmVsZXZhbnQgdG8geW91ciBmaWVsZCwgZS5nLiwgY29kZSBtYWludGFpbmFiaWxpdHksIGZlYXR1cmUgZW5hYmxlbWVudCwgcGxhdGZvcm0gY29tcGF0aWJpbGl0eV0uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGNvbmZpZyBvcHRpb24gYWN0cyBhcyBhIGdhdGluZyBtZWNoYW5pc20gZm9yIHRoZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgdGFzay4gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFtlLmcuLCBidWlsZCBjb25maWd1cmF0aW9ucywgZmVhdHVyZSBmbGFncywgb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHldLiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcmV2aWV3IGFueSByZWxldmFudCBLY29uZmlnIGVudHJpZXMsIGFuZCBiZSBzdXJlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSU9fVVJJTkdfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICYjNDM7PSBtb2NrX2ZpbGUub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICYjNDM7PSBicGYtb3BzLm9cbi0tXG5pb191cmluZy9icGYtb3BzLmg9MTM9c3RydWN0IGlvX3VyaW5nX2JwZl9vcHMge1xuLS1cbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cbmlvX3VyaW5nL2JwZi1vcHMuaDoyMDojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL2JwZi1vcHMuaC0yMS12b2lkIGlvX3VucmVnaXN0ZXJfYnBmX29wcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXG5pb191cmluZy9icGZfZmlsdGVyLmg6NzojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRlxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTgtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19icGZfZmlsdGVyX2Nsb25lKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqZHN0LFxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XG5pb191cmluZy9icGZfZmlsdGVyLmg6NDY6I2VuZGlmIC8qIENPTkZJR19JT19VUklOR19CUEYgKi9cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGVCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYGlvX3VyaW5nYCBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCBlQlBGLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSBmb3IgYElPX1VSSU5HX0JQRmAgdGhlcmUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBkb2VzIGFuZCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRoYXQgd2lsbCBkaWN0YXRlIGhvdyBJIHB1cnN1ZSB0aGlzIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklOR19CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvS2NvbmZpZz02PWNvbmZpZyBJT19VUklOR19aQ1JYXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBkZWZfYm9vbCB5YCBjb25kaXRpb25hbCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgSU9fVVJJTkdgIGFuZCBgQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIGZvciBgaW9fdXJpbmdgIHRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3kgbG9naWMuIFRoaXMgc2V0dXAgc2NyZWFtcyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIEkvTyBhbmQgQmVya2VsZXkgUGFja2V0IEZpbHRlciBzeXNjYWxsIGZlYXR1cmVzLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlLCBvciB0aGF0IHNvbWUgc3BlY2lmaWMgQlBGIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgbGV2ZXJhZ2VkIG9yIGludGVncmF0ZWQgaW50byB0aGUgYGlvX3VyaW5nYCBkZXNpZ24gaW4gYSBjb25kaXRpb25hbCBtYW5uZXIuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHMsIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IHRoZXNlIHR3byBmZWF0dXJlcyBpbnRlcmFjdCB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW50byB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUgYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzISBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSB0aGVyZSwgb3IgcGVyaGFwcyBhIG1vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgaW52b2x2aW5nIGZlYXR1cmUgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgaW9fdXJpbmcgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSU9fVVJJTkdfWkNSWFxuICAgNzpcdFx0ZGVmX2Jvb2wgeVxuICAgODpcdFx0ZGVwZW5kcyBvbiBJT19VUklOR1xuICAgOTpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgMTA6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAxMTpcdFx0ZGVwZW5kcyBvbiBORVRfUlhfQlVTWV9QT0xMXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIElPX1VSSU5HX0JQRlxuICAxNDpcdFx0ZGVmX2Jvb2wgeVxuICAxNTpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgMTY6XHRcdGRlcGVuZHMgb24gTkVUXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbiAgMTk6XHRcdGRlZl9ib29sIHlcbiAgMjA6XHRcdGRlcGVuZHMgb24gSU9fVVJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgSU9fVVJJTkdfQlBGYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYm90aCBgQlBGYCBhbmQgYE5FVGAsIHNvIHRob3NlIGFyZSBtdXN0LWhhdmVzLiBOYXR1cmFsbHksIEkgc2hvdWxkIGFsc28gZW5zdXJlIHRoYXQgSSBoYXZlIGBJT19VUklOR2AsIGFuZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQgYXMgd2VsbC4gV2FpdCBhIHNlY29uZCwgSSByZWNhbGwgc2VlaW5nIGBJT19VUklOR2AgZGVmaW5lZCBzb21ld2hlcmUgaW4gYGluaXQvS2NvbmZpZ2Agd2hlbiBJIHdhcyBsb29raW5nIGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgaW4gYGluaXQvS2NvbmZpZ2AgZm9yIHRoZSBgSU9fVVJJTkdgIG9wdGlvbnMgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTU6XHRcdCAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nXG4xOTE2Olx0XHQgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLlxuMTkxNzpcdFxuMTkxODpcdGNvbmZpZyBJT19VUklOR1xuMTkxOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbjE5MjA6XHRcdHNlbGVjdCBJT19XUVxuMTkyMTpcdFx0ZGVmYXVsdCB5XG4xOTIyOlx0XHRoZWxwXG4xOTIzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcbjE5MjQ6XHRcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENhbmNlbCBMb2dpYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGJ1ZyB3aXRoaW4gYGlvX3VyaW5nYCByZWxhdGVkIHRvIGhvdyBjYW5jZWxsYXRpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBleGVjdmVgLiBJIHNlZSB0aGF0IGBJT19VUklOR2AgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwYXRjaCB0b3VjaGVzIGBpb191cmluZy9jYW5jZWwuY2AgYW5kIGBpb191cmluZy90Y3R4LmNgLCBpbW1lZGlhdGVseSByYWlzaW5nIG15IGFudGVubmEgcmVnYXJkaW5nIHRhc2sgY29udGV4dCBhbmQgY2FuY2VsbGF0aW9uIG9wZXJhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgZml4IGxpZXMgaW4gY2hhbmdpbmcgaG93IGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCBpcyBoYW5kbGVkIHdoZW4gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpcyBjYWxsZWQuIEl0IHNlZW1zIHRoYXQgcHJldmlvdXNseSwgZHVyaW5nIGBleGVjdmVgLCB0aGUgZ2VuZXJpYyBjYW5jZWwgZnVuY3Rpb24gd291bGQgZXJyb25lb3VzbHkgZnJlZSB0aGlzIHJlc3RyaWN0aW9uIHVzaW5nIGBfX2lvX3VyaW5nX2ZyZWUoY3VycmVudClgLiBUaGlzIGhhcyBub3cgYmVlbiByZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBgaW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpYCwgd2hpY2ggaW50ZW50aW9uYWxseSAqZG9lc24mIzM5O3QqIGZyZWUgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLCBidXQgaW5zdGVhZCBmcmVlcyB0aGUgb3RoZXIgY29udGV4dCB2YXJpYWJsZXMuIFRoaXMgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBiZWhhdmlvciwgcHJldmVudGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBtZW1vcnkgY29ycnVwdGlvbi4KCk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCwgYGlvX3VyaW5nX2ZyZWVfdGN0eGAsIGFuZCBgX19pb191cmluZ19mcmVlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGFyZSBiZWhhdmluZyBhcyBleHBlY3RlZCBpbiB0aGlzIG5ldyBmbG93LgoKRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBUaGUgY2FsbHN0YWNrIGZyb20gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBsb29rcyBzb2xpZC4gSXQmIzM5O3MgcmVhY2hlZCB0aHJvdWdoIGBfX2lvX3VyaW5nX2NhbmNlbGAsIHRoZW4gYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCwgYW5kIGZpbmFsbHkgZnJvbSBgYmVnaW5fbmV3X2V4ZWNgIGFuZCBgZG9fZXhpdGAuIFllcCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdGhvc2Uga2V5IHByb2Nlc3MgbGlmZWN5Y2xlIHBvaW50cy4KClRoZW4sIHRoZXJlIGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMuIGBpb191cmluZ19mcmVlX3RjdHhgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIG9yIHJhdGhlciwgdGhlIG9sZCBmdW5jdGlvbiB3aXRoIGEgbmV3IG5hbWUsIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgdGhlIG9yaWdpbmFsIGBfX2lvX3VyaW5nX2ZyZWVgIGhhcyBiZWNvbWUgYSB3cmFwcGVyIG5vdywgY2FsbGluZyBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgdGhlbiBoYW5kbGluZyB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBjbGVhbnVwIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiByZXNwb25zaWJpbGl0eS4gQm90aCBhcmUgbm9uLXN0YXRpYzsgdGhleSBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIHRob3JvdWdobHkgYW5kIEkgc2hvdWxkIGJlIHRlc3RpbmcgYm90aC4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2Agbm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJdCYjMzk7cyBkZWNsYXJlZCBgX19jb2xkYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgY2FuY2VsbGF0aW9uIGlzbiYjMzk7dCBhIGhvdCBwYXRoLiBJdCYjMzk7cyBhbHNvIG5vdCBzdGF0aWMuIEdvb2QuCgpJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpcyBjYWxsZWQgYW55d2hlcmUgZWxzZS4gQWgsIHllcywgaXQgaXMgYWxzbyBjYWxsZWQgYnkgYGlvX3NxX3RocmVhZGAgaW4gYGlvX3VyaW5nL3NxcG9sbC5jYC4gSSB3aWxsIGtlZXAgdGhhdCBpbiBtaW5kLgoKU28sIHRoZSBmb2N1cyBpcyBkZWZpbml0aXZlbHkgb246IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuCgpJbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYElPX1VSSU5HYCwgYEJQRmAsIGFuZCBgTkVUYCB3aWxsIGJlIG5lY2Vzc2FyeS4gYElPX1VSSU5HX0JQRmAgc2VlbXMgdG8gYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGBCUEZgIGFuZCBgTkVUYCBhcmUgc2V0LCBzbyB0aGF0JiMzOTtzIG5vdCBzb21ldGhpbmcgdG8gc3BlY2lmeSBleHBsaWNpdGx5LiBIb3dldmVyLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBpb191cmluZ19yZXN0cmljdGAgaXMgZGVmaW5lZCByZWdhcmRsZXNzIG9mIHRoZSBCUEYgZmlsdGVyIGF2YWlsYWJpbGl0eS4gSWYgaXQgaXMgb25seSBkZWZpbmVkIGJlaGluZCBgQ09ORklHX0lPX1VSSU5HYCwgdGhlbiBJIGNhbiBqdXN0IHZlcmlmeSBgSU9fVVJJTkdgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHdpdGggYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0IHNob3VsZCBjbGVhciB1cCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JlZ2lzdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdFx0XHRjdHgtXHUwMDNlaW50X2ZsYWdzIHw9IElPX1JJTkdfRl9PUF9SRVNUUklDVEVEO1xuIDE5NjpcdFx0aWYgKGN0eC1cdTAwM2VyZXN0cmljdGlvbnMucmVnX3JlZ2lzdGVyZWQpXG4gMTk3Olx0XHRcdGN0eC1cdTAwM2VpbnRfZmxhZ3MgfD0gSU9fUklOR19GX1JFR19SRVNUUklDVEVEO1xuIDE5ODpcdFx0cmV0dXJuIDA7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG4gMjAyOlx0e1xuIDIwMzpcdFx0c3RydWN0IGlvX3VyaW5nX3Rhc2tfcmVzdHJpY3Rpb24gX191c2VyICp1cmVzID0gYXJnO1xuIDIwNDpcdFx0c3RydWN0IGlvX3VyaW5nX3Rhc2tfcmVzdHJpY3Rpb24gdHJlcztcbiAyMDU6XHRcdHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzO1xuIDIwNjpcdFx0aW50IHJldDtcbiAyMDc6XHRcbiAyMDg6XHRcdC8qIERpc2FsbG93IGlmIHRhc2sgYWxyZWFkeSBoYXMgcmVnaXN0ZXJlZCByZXN0cmljdGlvbnMgKi9cbiAyMDk6XHRcdGlmIChjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxuIDIxMDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDIxMTpcdFx0LypcbiAyMTI6XHRcdCAqIFNpbWlsYXIgdG8gc2VjY29tcCwgZGlzYWxsb3cgc2V0dGluZyBhIGZpbHRlciBpZiB0YXNrX25vX25ld19wcml2c1xuIDIxMzpcdFx0ICogaXMgZmFsc2UgYW5kIHdlJiMzOTtyZSBub3QgQ0FQX1NZU19BRE1JTi5cbiAyMTQ6XHRcdCAqL1xuIDIxNTpcdFx0aWYgKCF0YXNrX25vX25ld19wcml2cyhjdXJyZW50KSBcdTAwMjZcdTAwMjZcbiAyMTY6XHRcdCAgICAhbnNfY2FwYWJsZV9ub2F1ZGl0KGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0FETUlOKSlcbiAyMTc6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gMjE4Olx0XHRpZiAobnJfYXJncyAhPSAxKVxuIDIxOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMjA6XHRcbiAyMjE6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0cmVzLCBhcmcsIHNpemVvZih0cmVzKSkpXG4gMjIyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKHRyZXMuZmxhZ3MpXG4gMjI1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIyNjpcdFx0aWYgKCFtZW1faXNfemVybyh0cmVzLnJlc3YsIHNpemVvZih0cmVzLnJlc3YpKSlcbiAyMjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjI4Olx0XG4gMjI5Olx0XHRyZXMgPSBremFsbG9jX29iaigqcmVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIDIzMDpcdFx0aWYgKCFyZXMpXG4gMjMxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIzMjpcdFxuIDIzMzpcdFx0cmV0ID0gaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHVyZXMtXHUwMDNlcmVzdHJpY3Rpb25zLCB0cmVzLm5yX3JlcywgcmVzKTtcbiAyMzQ6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IEkgY2FuIG1ha2Ugb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBgaW9fcHV0X2JwZl9maWx0ZXJzYCBpbiBgaW9fdXJpbmdgKioKCkhtbSwgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoaXMgYmVoYXZpb3IgaXMgdGllZCB0byBgQ09ORklHX0lPX1VSSU5HX0JQRmAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBhcHBlYXJzIHRvIGJlIGluaGVyZW50bHkgcGFydCBvZiB0aGUgYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGNvZGUgYmFzZS4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLgoKTm93LCBhIGJlbGwganVzdCB3ZW50IG9mZi4gV2hlcmUgKmlzKiBgaW9fcHV0X2JwZl9maWx0ZXJzYCBhY3R1YWxseSB1c2VkPyBBaCwgcmlnaHQuIEl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYF9faW9fdXJpbmdfZnJlZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggYW5kIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCBtZSB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoYXQgc3BlY2lmaWMgcm91dGluZSBpcyBjYWxsZWQgd2l0aGluIHRoZSBsYXJnZXIgZnJlZWluZyBwcm9jZXNzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBpbnRlcnByZXRpbmcgdGhlIHNpZ25pZmljYW5jZSBvZiBpdHMgZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19wdXRfYnBmX2ZpbHRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvYnBmX2ZpbHRlci5jPTk3PXN0YXRpYyB2b2lkIGlvX2ZyZWVfYnBmX2ZpbHRlcnMoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xMzgtXG5pb191cmluZy9icGZfZmlsdGVyLmM6MTM5OnN0YXRpYyB2b2lkIF9faW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19icGZfZmlsdGVycyAqZmlsdGVycylcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDAte1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDQtXG5pb191cmluZy9icGZfZmlsdGVyLmM6MTQ1OnZvaWQgaW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTE0Ni17XG5pb191cmluZy9icGZfZmlsdGVyLmMtMTQ3LVx0aWYgKHJlcy1cdTAwM2VicGZfZmlsdGVycylcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzoxNDg6XHRcdF9faW9fcHV0X2JwZl9maWx0ZXJzKHJlcy1cdTAwM2VicGZfZmlsdGVycyk7XG5pb191cmluZy9icGZfZmlsdGVyLmMtMTQ5LX1cbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgaW9fYnBmX2ZpbHRlcnMgKmlvX2JwZl9maWx0ZXJfY293KHN0cnVjdCBpb19yZXN0cmljdGlvbiAqc3JjKVxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMDUtXHRyY3VfcmVhZF91bmxvY2soKTtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMDY6XHRfX2lvX3B1dF9icGZfZmlsdGVycyhmaWx0ZXJzKTtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMDctXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0zNTk9aW50IGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXIoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMsXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQxNi1cdGlmIChvbGRfZmlsdGVycykge1xuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQxNzpcdFx0X19pb19wdXRfYnBmX2ZpbHRlcnMob2xkX2ZpbHRlcnMpO1xuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQxOC1cdFx0cmVzLVx1MDAzZWJwZl9maWx0ZXJzX2NvdyA9IGZhbHNlO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00NTItXHRpZiAoZmlsdGVycyAhPSByZXMtXHUwMDNlYnBmX2ZpbHRlcnMpXG5pb191cmluZy9icGZfZmlsdGVyLmM6NDUzOlx0XHRfX2lvX3B1dF9icGZfZmlsdGVycyhmaWx0ZXJzKTtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00NTQtZXJyX3Byb2c6XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTExPWludCBpb19yZWdpc3Rlcl9icGZfZmlsdGVyKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzLFxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xMy1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDoxNDp2b2lkIGlvX3B1dF9icGZfZmlsdGVycyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcyk7XG5pb191cmluZy9icGZfZmlsdGVyLmgtMTUtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTM0PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX3J1bl9icGZfZmlsdGVycyhzdHJ1Y3QgaW9fYnBmX2ZpbHRlciBfX3JjdSAqKmZpbHRlcnMsXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTM4LX1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDozOTpzdGF0aWMgaW5saW5lIHZvaWQgaW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQwLXtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIxNjM9c3RhdGljIF9fY29sZCB2b2lkIGlvX3JpbmdfY3R4X2ZyZWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjAzLVx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMjA0Olx0aW9fcHV0X2JwZl9maWx0ZXJzKFx1MDAyNmN0eC1cdTAwM2VyZXN0cmljdGlvbnMpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjA1LVxuLS1cbmlvX3VyaW5nL3RjdHguYz03Mj12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy90Y3R4LmMtNzUtXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XG5pb191cmluZy90Y3R4LmM6NzY6XHRcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuaW9fdXJpbmcvdGN0eC5jLTc3LVx0XHRrZnJlZSh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI2MwoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA2NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIGlvX3VyaW5nIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSB0aGlua2luZy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCBkdXJpbmcgYGV4ZWN2ZWAuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIHdhcyBpbmNvcnJlY3RseSBmcmVlaW5nIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YC4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBpbnRlZ3JpdHkgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBkdXJpbmcgcHJvY2VzcyB0cmFuc2l0aW9ucy4KCkluaXRpYWxseSwgSSBsb29rZWQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgaW9fcHV0X2JwZl9maWx0ZXJzYC4gSSByZWFsaXplZCB0aGF0IHRoZSBgaW9fcHV0X2JwZl9maWx0ZXJzYCBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgaW9fdXJpbmcvYnBmX2ZpbHRlci5jYCwgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lPX1VSSU5HX0JQRmAgaXMgc2V0LiBJZiBub3QsIGl0JiMzOTtzIGp1c3QgYW4gaW5saW5lIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIGBDT05GSUdfSU9fVVJJTkdgIGlzIHRoZSBiYXNlbGluZSBuZWVkZWQuIEhvd2V2ZXIsIHRvIGZ1bGx5IGV4ZXJjaXNlIGFuZCB0ZXN0IHRoZSBCUEYgZmlsdGVyIGNvbXBvbmVudHMsIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBCUEZgIGFuZCBgTkVUYCwgaW4gYWRkaXRpb24gdG8gYElPX1VSSU5HYCwgdG8gZW5zdXJlIGBJT19VUklOR19CUEZgIGlzIGVuYWJsZWQuCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQga2V5IHN5bWJvbHM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGNvdWxkIHJldmVhbCBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCwgYGlvX3VyaW5nX2ZyZWVfdGN0eGAsIGBfX2lvX3VyaW5nX2ZyZWVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGJ1Z2ZpeCBhbmQgYXJlIGNyaXRpY2FsIGZvciB0ZXN0aW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYElPX1VSSU5HYCwgYEJQRmAsIGBORVRgIC0gVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGVzc2VudGlhbCB0byBlbmFibGUgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIGluY2x1ZGluZyB0aGUgQlBGIGZpbHRlcmluZywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgYnVnIHNjZW5hcmlvIGFuZCB0ZXN0IGl0cyBmaXguCiogICAqKlJlYXNvbmluZzoqKiBUaGUgYnVnIGZpeCBpbnZvbHZlcyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBpb191cmluZ19yZXN0cmljdGAgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uIHRyYW5zaXRpb25zLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgY29ycmVjdGx5IHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAgY2FsbHMgYnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBtb2RpZnlpbmcgdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMuCgpJIGNvbnNpZGVyZWQgd2hldGhlciBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgIGFuZCBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCB3b3VsZCBiZSBzdWl0YWJsZSBhcyBmb2N1cyBzeW1ib2xzLCBzaW5jZSB0aGV5IHNldCBgaW9fdXJpbmdfcmVzdHJpY3RgLiBIb3dldmVyLCB0aGV5IGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGhhcmRlciB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZWlyIGNhbGxpbmcgc3ltYm9sLCBgaW9fdXJpbmdfcmVnaXN0ZXJgIGlzIGRlZmluZWQgdmlhIGBTWVNDQUxMX0RFRklORTRgLCBzbyB0aGUgYWN0dWFsIHN5bWJvbCBuYW1lIHdvdWxkIGJlIHBsYXRmb3JtIHNwZWNpZmljIChgX194NjRfc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBvciBgX19hcm02NF9zeXNfaW9fdXJpbmdfcmVnaXN0ZXJgKS4gSXQmIzM5O3MgY2xlYW5lciBhbmQgbW9yZSBkaXJlY3QgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2g6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuCgpUbyBjb25maXJtIG15IGNob2ljZSwgSSBjaGVja2VkIHRoZSBkZWZpbml0aW9ucyBvZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGluIGBpb191cmluZy9jYW5jZWwuaGAsIGBpb191cmluZ19mcmVlX3RjdHhgIGluIGBpb191cmluZy90Y3R4LmhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAgaW4gYGluY2x1ZGUvbGludXgvaW9fdXJpbmcuaGAsIGFuZCB2ZXJpZmllZCB0aGF0IGFsbCB0aHJlZSBhcmUgbm9uLXN0YXRpYyBhbmQgZGlyZWN0bHkgZXhwb3NlZC4gVGhpcyBzb2xpZGlmaWVzIHRoZWlyIHN1aXRhYmlsaXR5IGFzIGZvY3VzIHN5bWJvbHMuCgpJJiMzOTttIG5vdyBzYXRpc2ZpZWQgd2l0aCBteSBhbmFseXNpcyBhbmQgd2lsbCBwcm9jZWVkIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtCUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfZnJlZV90Y3R4JiMzNDssCiAgICAmIzM0O19faW9fdXJpbmdfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBCeSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYF9faW9fdXJpbmdfZnJlZWAsIGl0IGVuc3VyZXMgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtCUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfZnJlZV90Y3R4JiMzNDssCiAgICAmIzM0O19faW9fdXJpbmdfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBCeSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYF9faW9fdXJpbmdfZnJlZWAsIGl0IGVuc3VyZXMgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDM6MjEuNzkyMTg0NDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjY2MjU4MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCUEZcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3VyaW5nX2NhbmNlbF9nZW5lcmljXCIsXG4gICAgXCJpb191cmluZ19mcmVlX3RjdHhcIixcbiAgICBcIl9faW9fdXJpbmdfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgKGNhbGxlZCBkdXJpbmcgYGV4ZWN2ZWApIHdvdWxkIGluY29ycmVjdGx5IGZyZWUgYHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBCeSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYF9faW9fdXJpbmdfZnJlZWAsIGl0IGVuc3VyZXMgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzoyMS43OTIxOTE2NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg5NDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhiNjEwOGE0YzU3ZDEwNDJjNjFjYjFkMWI0YjdiYzQxZGNhZjA5NjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzo0MzoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9jYW5jZWwuYyBiL2lvX3VyaW5nL2NhbmNlbC5jXFxuaW5kZXggOGM2ZmE2ZjM2N2U0Zi4uN2Q3ODIwZWFiODc4YiAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9jYW5jZWwuY1xcbisrKyBiL2lvX3VyaW5nL2NhbmNlbC5jXFxuQEAgLTY2MCw2ICs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZ0Y3R4LVxcdTAwM2Vpbl9jYW5jZWwpO1xcbiBcXHRcXHQvKiBmb3IgZXhlYyBhbGwgY3VycmVudCdzIHJlcXVlc3RzIHNob3VsZCBiZSBnb25lLCBraWxsIHRjdHggKi9cXG4tXFx0XFx0X19pb191cmluZ19mcmVlKGN1cnJlbnQpO1xcbitcXHRcXHRpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmMgYi9pb191cmluZy90Y3R4LmNcXG5pbmRleCBjYzNiZjJiM2JkYmM5Li40NjZiNzMwMGUyMDhlIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3RjdHguY1xcbisrKyBiL2lvX3VyaW5nL3RjdHguY1xcbkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXFx1MDAyNmRhdGEpO1xcbiB9XFxuIFxcbi12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4rdm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIHtcXG4gXFx0c3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHggPSB0c2stXFx1MDAzZWlvX3VyaW5nO1xcbiBcXHRzdHJ1Y3QgaW9fdGN0eF9ub2RlICpub2RlO1xcbkBAIC02Nyw2ICs2NywxMSBAQCB2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gXFx0XFx0a2ZyZWUodGN0eCk7XFxuIFxcdFxcdHRzay1cXHUwMDNlaW9fdXJpbmcgPSBOVUxMO1xcbiBcXHR9XFxuK31cXG4rXFxuK3ZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbit7XFxuK1xcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xcbiBcXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xcbiBcXHRcXHRpb19wdXRfYnBmX2ZpbHRlcnModHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuIFxcdFxcdGtmcmVlKHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmggYi9pb191cmluZy90Y3R4LmhcXG5pbmRleCAyMzEwZDJhMGM0NmQ5Li43NmFkMWFkNDU5NGVmIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3RjdHguaFxcbisrKyBiL2lvX3VyaW5nL3RjdHguaFxcbkBAIC0xMiw2ICsxMiw3IEBAIHZvaWQgaW9fdXJpbmdfZGVsX3RjdHhfbm9kZSh1bnNpZ25lZCBsb25nIGluZGV4KTtcXG4gaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XFxuIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGVfZnJvbV9zdWJtaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbiB2b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpO1xcbit2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuIFxcbiB2b2lkIGlvX3VyaW5nX3VucmVnX3JpbmdmZCh2b2lkKTtcXG4gaW50IGlvX3JpbmdmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKl9fYXJnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzoyMi4yNDIwNTY5NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTI4MTYzNzM3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkJQRlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNcIixcbiAgICBcImlvX3VyaW5nX2ZyZWVfdGN0eFwiLFxuICAgIFwiX19pb191cmluZ19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAoY2FsbGVkIGR1cmluZyBgZXhlY3ZlYCkgd291bGQgaW5jb3JyZWN0bHkgZnJlZSBgdHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdGAuIEJ5IHNwbGl0dGluZyBgX19pb191cmluZ19mcmVlYCBpbnRvIGBpb191cmluZ19mcmVlX3RjdHhgIGFuZCBgX19pb191cmluZ19mcmVlYCwgaXQgZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgcHJlc2VydmVkIGFjcm9zcyBgZXhlY3ZlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhiNjEwOGE0YzU3ZDEwNDJjNjFjYjFkMWI0YjdiYzQxZGNhZjA5NjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjQzOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvY2FuY2VsLmMgYi9pb191cmluZy9jYW5jZWwuY1xuaW5kZXggOGM2ZmE2ZjM2N2U0Zi4uN2Q3ODIwZWFiODc4YiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2NhbmNlbC5jXG4rKysgYi9pb191cmluZy9jYW5jZWwuY1xuQEAgLTY2MCw2ICs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpXG4gXHRcdCAqL1xuIFx0XHRhdG9taWNfZGVjKFx1MDAyNnRjdHgtXHUwMDNlaW5fY2FuY2VsKTtcbiBcdFx0LyogZm9yIGV4ZWMgYWxsIGN1cnJlbnQncyByZXF1ZXN0cyBzaG91bGQgYmUgZ29uZSwga2lsbCB0Y3R4ICovXG4tXHRcdF9faW9fdXJpbmdfZnJlZShjdXJyZW50KTtcbitcdFx0aW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmMgYi9pb191cmluZy90Y3R4LmNcbmluZGV4IGNjM2JmMmIzYmRiYzkuLjQ2NmI3MzAwZTIwOGUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy90Y3R4LmNcbisrKyBiL2lvX3VyaW5nL3RjdHguY1xuQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuLXZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK3ZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIHtcbiBcdHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4ID0gdHNrLVx1MDAzZWlvX3VyaW5nO1xuIFx0c3RydWN0IGlvX3RjdHhfbm9kZSAqbm9kZTtcbkBAIC02Nyw2ICs2NywxMSBAQCB2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiBcdFx0a2ZyZWUodGN0eCk7XG4gXHRcdHRzay1cdTAwM2Vpb191cmluZyA9IE5VTEw7XG4gXHR9XG4rfVxuK1xuK3ZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK3tcbitcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xuIFx0aWYgKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xuIFx0XHRpb19wdXRfYnBmX2ZpbHRlcnModHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbiBcdFx0a2ZyZWUodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmggYi9pb191cmluZy90Y3R4LmhcbmluZGV4IDIzMTBkMmEwYzQ2ZDkuLjc2YWQxYWQ0NTk0ZWYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy90Y3R4LmhcbisrKyBiL2lvX3VyaW5nL3RjdHguaFxuQEAgLTEyLDYgKzEyLDcgQEAgdm9pZCBpb191cmluZ19kZWxfdGN0eF9ub2RlKHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xuIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGVfZnJvbV9zdWJtaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuIHZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG4rdm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuIFxuIHZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuIGludCBpb19yaW5nZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICpfX2FyZyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjIyLjI0MjA1OTE2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjA5NDYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgYGlvX3VyaW5nL2NhbmNlbC5jYCwgYGlvX3VyaW5nL3RjdHguY2AsIGFuZCBgaW9fdXJpbmcvdGN0eC5oYC4gU2VlbXMgbGlrZSB0aGV5J3JlIHNwbGl0dGluZyBgX19pb191cmluZ19mcmVlYCBpbnRvIGBpb191cmluZ19mcmVlX3RjdHhgIGFuZCBhIHJldGFpbmVkIGBfX2lvX3VyaW5nX2ZyZWVgLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgdGhhdCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIG5vdyBjYWxscyBgaW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYC4gU28sIHRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAgd29uJ3QgYmUgZnJlZWQgaW4gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBhbnltb3JlLlxuXG5Ob3csIGxldCBtZSBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEZpcnN0LCBsZXQncyByZWZyZXNoIG9uIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgaW4gYGlvX3VyaW5nL2NhbmNlbC5jYC4gUmlnaHQsIGl0J3MgY2FsbGVkIGR1cmluZyB0YXNrIGV4aXQgb3IgZXhlYy4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIElmIGl0J3MgY2FsbGVkIGR1cmluZyBgZXhlY2AsIHNob3VsZCBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCAqcmVhbGx5KiBiZSBmcmVlZD8gSXMgdGhhdCBhIHZhbGlkIHBvaW50IG9mIGZvY3VzPyBJdCBzb3VuZHMgbGlrZSB0aGVyZSdzIGEgcG9zc2liaWxpdHkgdGhhdCBpdCBzaG91bGRuJ3QuXG5cbkFscmlnaHQsIGxldCBtZSBzdGVwIGJhY2sgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBncmFwaCB0byBldmFsdWF0ZSB0aGlzIGNoYW5nZS4gV2FpdCwgd2hlcmUgaXMgYF9faW9fdXJpbmdfZnJlZWAgY2FsbGVkICpmcm9tKiwgYmVzaWRlcyBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBBbmQgY29udmVyc2VseSwgd2hlcmUgaXMgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCBjYWxsZWQgKmZyb20qLCBjb21wYXJlZCB0byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBUaGlzIG1pZ2h0IGJlIHRoZSBjcml0aWNhbCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZS4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuIEknbGwgc2VhcmNoIGZvciBgX19pb191cmluZ19mcmVlYCBhbmQgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjI3LjY2MzAwODIxN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE5NDUyODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9fdXJpbmdfZnJlZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MTA9dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoxMTp2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTEyLXZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI5LVxcdGlmICh0c2stXFx1MDAzZWlvX3VyaW5nIHx8IHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjMwOlxcdFxcdF9faW9fdXJpbmdfZnJlZSh0c2spO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0zMS19XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NDY9dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzEtXFxuaW9fdXJpbmcvdGN0eC5jOjcyOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy03My17XFxuLS1cXG5pb191cmluZy90dy5jPTQ2PXN0YXRpYyB2b2lkIGlvX2ZhbGxiYWNrX3R3KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4KVxcbi0tXFxuaW9fdXJpbmcvdHcuYy00OC1cXHQvKlxcbmlvX3VyaW5nL3R3LmM6NDk6XFx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVxcdTAwM2V0YXNrIHZhbGlkIGFuZCwgYXMgX19pb191cmluZ19mcmVlKCkgaXNcXG5pb191cmluZy90dy5jLTUwLVxcdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDM6MzEuODgyNDY1NzcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MjQyNTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlcjpcblxuKipEaXZpbmcgaW50byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBgaW9fdXJpbmdgIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBjYW5jZWwuY2AgZmlsZS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGZ1bmN0aW9uLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGNhbmNlbGxhdGlvbnMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdpbmcgc3RhdGUsIHN5bmNocm9uaXphdGlvbiwgYW5kIHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIGludmFsaWRhdGluZyBzdWJtaXR0ZWQgSS9PIHJlcXVlc3RzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHRoZSBwb2ludCB3aGVyZSB3ZSBjYW4gZW5zdXJlIGEgcHJvcGVyIGFuZCBlZmZpY2llbnQgZ3JhY2VmdWwgc2h1dGRvd24gb3IgaW50ZXJydXB0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBhIHRydWx5IHJvYnVzdCBhbmQgcGVyZm9ybWFudCBhcHBsaWNhdGlvbiBsZXZlcmFnaW5nIGBpb191cmluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzozNC44NjQ4OTUxMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NTI2NDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19jYW5jZWxfZ2VuZXJpY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9jYW5jZWwuYz00Mzc9dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy00MzktXFx0aW9fdXJpbmdfdW5yZWdfcmluZ2ZkKCk7XFxuaW9fdXJpbmcvY2FuY2VsLmM6NDQwOlxcdGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKGNhbmNlbF9hbGwsIE5VTEwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTQ0MS19XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz01NzE9c3RhdGljIHM2NCB0Y3R4X2luZmxpZ2h0KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBib29sIHRyYWNrZWQpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01ODEtICovXFxuaW9fdXJpbmcvY2FuY2VsLmM6NTgyOl9fY29sZCB2b2lkIGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKGJvb2wgY2FuY2VsX2FsbCwgc3RydWN0IGlvX3NxX2RhdGEgKnNxZClcXG5pb191cmluZy9jYW5jZWwuYy01ODMte1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmg9MzM9X19jb2xkIGJvb2wgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5oLTM1LVxcdFxcdFxcdFxcdFxcdCBib29sIGNhbmNlbF9hbGwsIGJvb2wgaXNfc3Fwb2xsX3RocmVhZCk7XFxuaW9fdXJpbmcvY2FuY2VsLmg6MzY6X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKTtcXG5pb191cmluZy9jYW5jZWwuaC0zNy1fX2NvbGQgYm9vbCBpb19jYW5jZWxfY3R4X2NiKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKTtcXG4tLVxcbmlvX3VyaW5nL3NxcG9sbC5jPTI4ND1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmMtNDA2LVxcbmlvX3VyaW5nL3NxcG9sbC5jOjQwNzpcXHRpb191cmluZ19jYW5jZWxfZ2VuZXJpYyh0cnVlLCBzcWQpO1xcbmlvX3VyaW5nL3NxcG9sbC5jLTQwOC1cXHRyY3VfYXNzaWduX3BvaW50ZXIoc3FkLVxcdTAwM2V0aHJlYWQsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzozOC44NTAxNjUxNTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwMzg1MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyB0aGluZ3MgdXAgd2l0aCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLiBJbnN0ZWFkIG9mIHRoZSBvbGQgYF9faW9fdXJpbmdfZnJlZShjdXJyZW50KWAsIGl0J3Mgbm93IGNhbGxpbmcgYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBiZWNhdXNlIHRoZSBvbGQgbWV0aG9kLCBgX19pb191cmluZ19mcmVlYCwgdXNlZCB0byBoYW5kbGUgZnJlZWluZyBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gU28sIGVmZmVjdGl2ZWx5LCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIHdvbid0IGJlIG1hbmFnaW5nIHRoYXQgbWVtb3J5IGFueW1vcmUuXG5cbkhtbSwgdGhpcyB0cmlnZ2VycyBhIG1lbnRhbCBjaGFpbiByZWFjdGlvbi4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscy4gV2hlcmUgaXMgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB1c2VkPyBJIGJlbGlldmUgaXQncyBjYWxsZWQgZnJvbSBgX19pb191cmluZ19jYW5jZWxgLiBBbmQgYF9faW9fdXJpbmdfY2FuY2VsYCBpdHNlbGYsIHJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGVpdGhlciBgaW9fdXJpbmdfdGFza19jYW5jZWxgIG9yLCBwb3RlbnRpYWxseSwgZnJvbSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGl0c2VsZj8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4gUmlnaHQsIGJlc3QgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmhgIHRvIHNlZSBob3cgYF9faW9fdXJpbmdfY2FuY2VsYCBpcyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzYxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjQyLjk2MDU1MjgzOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3NjUwMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9fdXJpbmdfY2FuY2VsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC05LSNpZiBkZWZpbmVkKENPTkZJR19JT19VUklORylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MTA6dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0xMS12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MTc9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2ZpbGVzX2NhbmNlbCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTE5LVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpb191cmluZylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjA6XFx0XFx0X19pb191cmluZ19jYW5jZWwoZmFsc2UpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yMS19XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oPTIyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ190YXNrX2NhbmNlbCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI0LVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpb191cmluZylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjU6XFx0XFx0X19pb191cmluZ19jYW5jZWwodHJ1ZSk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI2LX1cXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jPTQxND1ib29sIGlvX21hdGNoX3Rhc2tfc2FmZShzdHJ1Y3QgaW9fa2lvY2IgKmhlYWQsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNDM2LVxcbmlvX3VyaW5nL2NhbmNlbC5jOjQzNzp2b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbClcXG5pb191cmluZy9jYW5jZWwuYy00Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0Mzo0Ny40OTgyMDg4NDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ5MjcwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBpb191cmluZ2AgY2FuY2VsbGF0aW9uIGNvZGUuIEkgc2VlIHRoYXQgYF9faW9fdXJpbmdfY2FuY2VsYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgaW9fdXJpbmdfZmlsZXNfY2FuY2VsYCBhbmQgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYC4gTWFrZXMgc2Vuc2UsIGNvdmVyaW5nIGJvdGggZmlsZS1zcGVjaWZpYyBhbmQgdGFzay1yZWxhdGVkIGNhbmNlbGxhdGlvbnMuIE5vdywgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBnZXRzIGNhbGxlZCBmcm9tIGBkb19leGl0YCBhbmQgYGJlZ2luX25ld19leGVjYC4gVGhhdCBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSwgaXQgY291bGQgYmUgY2FsbGVkIGR1cmluZyBwcm9jZXNzIHRlcm1pbmF0aW9uLlxuXG5IZXJlJ3MgdGhlIGJpdCB0aGF0J3MgYnVnZ2luZyBtZS4gSWYgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAqd2VyZSogdG8gY2FsbCBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYCwgaXQgd291bGQgZW5kIHVwIGZyZWVpbmcgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAsIHdoaWNoIGlzIHRoZSByZXN0cmljdGlvbiBzZXQgZm9yIHRoaXMgdGFzay4gQnV0IGhhbmcgb24uLi4gdGhhdCBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCBtZW1iZXIgKnNob3VsZCogb25seSBiZSBmcmVlZCB3aGVuIHRoZSB0YXNrIGl0c2VsZiBpcyBmcmVlZC4gVGhhdCBoYXBwZW5zIGxhdGVyLCByaWdodD8gSXNuJ3QgaXQgYGlvX3VyaW5nX2ZyZWVgJ3Mgam9iLCB3aGljaCB0aGVuIGNhbGxzIGBfX2lvX3VyaW5nX2ZyZWVgPyBXZSBkb24ndCB3YW50IHRvIHByZW1hdHVyZWx5IGZyZWUgdGhlIHJlc3RyaWN0aW9uLlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGlzOiB3aGVyZSAqaXMqIGBpb191cmluZ19mcmVlYCBjYWxsZWQ/IElzIGl0IHdpdGhpbiBgZnJlZV90YXNrYCBvciBhIHNpbWlsYXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZnVuY3Rpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCBiYWNrIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGxpZmVzcGFuIG9mIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBkYXRhLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY2FsbCBzaXRlcyBvZiBgaW9fdXJpbmdfZnJlZWAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTU0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjUyLjM0NzQ4MzExMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxOTczNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19mcmVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjExOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMTItdm9pZCBpb191cmluZ191bnJlZ19yaW5nZmQodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX3Rhc2tfY2FuY2VsKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjYtfVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoyNzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjgte1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yOS1cXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZyB8fCB0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozMDpcXHRcXHRfX2lvX3VyaW5nX2ZyZWUodHNrKTtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oPTQzPXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19maWxlc19jYW5jZWwodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC00NS19XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjQ2OnN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC00Ny17XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz01ODI9X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNjYyLVxcdFxcdC8qIGZvciBleGVjIGFsbCBjdXJyZW50J3MgcmVxdWVzdHMgc2hvdWxkIGJlIGdvbmUsIGtpbGwgdGN0eCAqL1xcbmlvX3VyaW5nL2NhbmNlbC5jOjY2MzpcXHRcXHRpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNjY0LVxcdH1cXG4tLVxcbmlvX3VyaW5nL3RjdHguYz0xNj1zdGF0aWMgc3RydWN0IGlvX3dxICppb19pbml0X3dxX29mZmxvYWQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNDUtXFxuaW9fdXJpbmcvdGN0eC5jOjQ2OnZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy00Ny17XFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzEtXFxuaW9fdXJpbmcvdGN0eC5jOjcyOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy03My17XFxuaW9fdXJpbmcvdGN0eC5jOjc0OlxcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xcbmlvX3VyaW5nL3RjdHguYy03NS1cXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xcbi0tXFxuaW9fdXJpbmcvdGN0eC5oPTE0PXZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XFxuaW9fdXJpbmcvdGN0eC5oOjE1OnZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG5pb191cmluZy90Y3R4LmgtMTYtXFxuLS1cXG5pb191cmluZy90dy5jPTQ2PXN0YXRpYyB2b2lkIGlvX2ZhbGxiYWNrX3R3KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4KVxcbi0tXFxuaW9fdXJpbmcvdHcuYy00OC1cXHQvKlxcbmlvX3VyaW5nL3R3LmM6NDk6XFx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVxcdTAwM2V0YXNrIHZhbGlkIGFuZCwgYXMgX19pb191cmluZ19mcmVlKCkgaXNcXG5pb191cmluZy90dy5jLTUwLVxcdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcXG4tLVxcbmtlcm5lbC9mb3JrLmM9NzgxPXZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5rZXJuZWwvZm9yay5jLTc4Ny1cXHR1bndpbmRfdGFza19mcmVlKHRzayk7XFxua2VybmVsL2ZvcmsuYzo3ODg6XFx0aW9fdXJpbmdfZnJlZSh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNzg5LVxcdGNncm91cF90YXNrX2ZyZWUodHNrKTtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk5ND1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNjEyLWJhZF9mb3JrX2NsZWFudXBfZGVsYXlhY2N0Olxcbmtlcm5lbC9mb3JrLmM6MjYxMzpcXHRpb191cmluZ19mcmVlKHApO1xcbmtlcm5lbC9mb3JrLmMtMjYxNC1cXHRkZWxheWFjY3RfdHNrX2ZyZWUocCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2JhdGNoLmM9MTY0PXN0YXRpYyB2b2lkIGZyZWVfYmF0Y2hfZmV0Y2hfYnVmKHN0cnVjdCB1YmxrX3RocmVhZCAqdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYy0xNjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZW5yX2ZldGNoX2J1ZnM7IGkrKykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYzoxNjk6XFx0XFx0aW9fdXJpbmdfZnJlZV9idWZfcmluZyhcXHUwMDI2dC1cXHUwMDNlcmluZywgdC1cXHUwMDNlZmV0Y2hbaV0uYnIsIDEsIGkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYy0xNzAtXFx0XFx0bXVubG9jayh0LVxcdTAwM2VmZXRjaFtpXS5mZXRjaF9idWYsIHQtXFx1MDAzZWZldGNoW2ldLmZldGNoX2J1Zl9zaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDM6NTYuMDY3MjMwNDI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTMyOTgyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBSZXNvdXJjZSBNYW5hZ2VtZW50IGluIFRhc2sgTGlmZWN5Y2xlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiBgaW9fdXJpbmdgIHJlc291cmNlcyB0aWVkIHRvIGEgdGFzaywgYW5kIHNvbWUgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBhcmUgc3RhcnRpbmcgdG8ganVtcCBvdXQgYXQgbWUuIExldCBtZSBzZWUuLi4gYGlvX3VyaW5nX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGBfX3B1dF90YXNrX3N0cnVjdGAsIGFuZCBhbHNvIGR1cmluZyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFNvLCBpdCdzIHRpZWQgdG8gdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZSB0YXNrIHN0cnVjdHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZ2V0cyBpbnZva2VkIGZyb20gYGRvX2V4aXRgIGFuZCBgYmVnaW5fbmV3X2V4ZWNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgKmFsc28qIGNhbGxzIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBwb3RlbnRpYWxseSBmcmVlcyBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCB3aGlsZSB0aGUgdGFzayBzdHJ1Y3R1cmUgaXRzZWxmIGlzIHN0aWxsIGFyb3VuZC5cblxuTm93LCBpZiB0aGF0IGhhcHBlbnMsIGFuZCB0aGUgdGFzayBpcyBzdGlsbCBhbGl2ZSwgd2hhdCBwcmV2ZW50cyBgaW9fdXJpbmdfZnJlZWAgZnJvbSBiZWluZyBjYWxsZWQgKmFnYWluKiBsYXRlciBkdXJpbmcgdGhlIG5vcm1hbCBgX19wdXRfdGFza19zdHJ1Y3RgIHByb2Nlc3MsIGNoZWNraW5nIGEgcG90ZW50aWFsbHkgZnJlZWQgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGA/IEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUgZnJlZSBvbiBvdXIgaGFuZHMsIHRoYXQgZG9lc24ndCBzb3VuZCByaWdodC5cblxuSGFuZyBvbi4uLiBMZXQgbWUgdGhpbmsuIERvZXNuJ3QgYF9faW9fdXJpbmdfZnJlZWAgc2V0IGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMYCAqYWZ0ZXIqIGZyZWVpbmcgdGhlIG1lbW9yeT8gQWhhISBUaGF0IHNob3VsZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgYWdhaW4gd2hlbiBgX19wdXRfdGFza19zdHJ1Y3RgIGlzIGNhbGxlZC4gT2theSwgSSBiZXR0ZXIgY2hlY2sgdGhlIGNvZGUgZm9yIGBfX2lvX3VyaW5nX2ZyZWVgIGluIGBpb191cmluZy90Y3R4LmNgIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLCBiZWNhdXNlIHRoaXMgaXMgbG9va2luZyBsaWtlIGEgcG90ZW50aWFsbHkgZGVsaWNhdGUgcmFjZSBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MDAuNzgwNTMxNjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTE2NjAzMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgX19pb191cmluZ19mcmVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjExOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMTItdm9pZCBpb191cmluZ191bnJlZ19yaW5nZmQodm9pZCk7XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NDY9dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzEtXFxuaW9fdXJpbmcvdGN0eC5jOjcyOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy03My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ0OjA0LjI5NzE0MDY2NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwNzQzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBpb191cmluZy90Y3R4LmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBpb191cmluZy90Y3R4LmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNzIuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbWlnaHQgaG9sZCBzb21lIGNydWNpYWwgZGV0YWlscyBJJ20gYWZ0ZXIsIHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkJ3MgcmVsZXZhbnQgY29uY2VwdCwgZS5nLiwgdGhyZWFkIGNvbnRleHQgbWFuYWdlbWVudCwgY29tcGxldGlvbiBxdWV1ZSBoYW5kbGluZywgc3VibWlzc2lvbiByaW5nIGludGVyYWN0aW9uLCBldGMuXS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIFttZW50aW9uIHlvdXIgcmVsZXZhbnQgZXhwZXJpZW5jZV0sIHRoaXMgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBbbWVudGlvbiB0aGUgcHJvYmxlbS90b3BpYyB5b3UgYXJlIHRyeWluZyB0byB1bmRlcnN0YW5kXS4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgW21lbnRpb24gc3BlY2lmaWMgc2lnbmFscyB5b3UgYXJlIGxvb2tpbmcgZm9yLCBlLmcuLCBob3cgdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQsIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBsb2NrcyBiZWluZyBhY3F1aXJlZCwgZXRjLl0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDowNy42MTc4ODYzNTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3RjdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuICA2MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDYyOlxcdFxcdFxcdH1cXG4gIDYzOlxcdFxcdFxcdFdBUk5fT05fT05DRSh0Y3R4LVxcdTAwM2Vpb193cSk7XFxuICA2NDpcXHRcXHRcXHRXQVJOX09OX09OQ0UodGN0eC1cXHUwMDNlY2FjaGVkX3JlZnMpO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZ0Y3R4LVxcdTAwM2VpbmZsaWdodCk7XFxuICA2NzpcXHRcXHRcXHRrZnJlZSh0Y3R4KTtcXG4gIDY4OlxcdFxcdFxcdHRzay1cXHUwMDNlaW9fdXJpbmcgPSBOVUxMO1xcbiAgNjk6XFx0XFx0fVxcbiAgNzA6XFx0fVxcbiAgNzE6XFx0XFxuICA3MjpcXHR2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xcbiAgNzU6XFx0XFx0aWYgKHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpIHtcXG4gIDc2OlxcdFxcdFxcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcXG4gIDc3OlxcdFxcdFxcdGtmcmVlKHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xcbiAgNzg6XFx0XFx0XFx0dHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCA9IE5VTEw7XFxuICA3OTpcXHRcXHR9XFxuICA4MDpcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdF9fY29sZCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqaW9fdXJpbmdfYWxsb2NfdGFza19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbiAgODQ6XFx0e1xcbiAgODU6XFx0XFx0c3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHg7XFxuICA4NjpcXHRcXHRpbnQgcmV0O1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHR0Y3R4ID0ga3phbGxvY19vYmooKnRjdHgpO1xcbiAgODk6XFx0XFx0aWYgKHVubGlrZWx5KCF0Y3R4KSlcXG4gIDkwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRyZXQgPSBwZXJjcHVfY291bnRlcl9pbml0KFxcdTAwMjZ0Y3R4LVxcdTAwM2VpbmZsaWdodCwgMCwgR0ZQX0tFUk5FTCk7XFxuICA5MzpcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbiAgOTQ6XFx0XFx0XFx0a2ZyZWUodGN0eCk7XFxuICA5NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgOTY6XFx0XFx0fVxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHR0Y3R4LVxcdTAwM2Vpb193cSA9IGlvX2luaXRfd3Ffb2ZmbG9hZChjdHgsIHRhc2spO1xcbiAgOTk6XFx0XFx0aWYgKElTX0VSUih0Y3R4LVxcdTAwM2Vpb193cSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MDcuNjE4MDQ1NzE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTE0MTE5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgX19pb191cmluZ19mcmVlYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW5kIHplcm9pbmcgb3V0IGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBUaGF0IG1ha2VzIHNlbnNlLiBCZWZvcmUgdGhpcyBwYXRjaCwgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3YXMgY2FsbGluZyBgX19pb191cmluZ19mcmVlYCBvbiB0aGUgKmN1cnJlbnQqIHRhc2suIFNvLCB0aGF0IGNhbGwgdG8gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3b3VsZCBiZSBmcmVlaW5nIGFuZCBudWxsaW5nIG91dCBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCB3aGljaCBzZWVtcyBhIGJpdCBvZmYsIGRvZXNuJ3QgaXQ/XG5cblRoZSBraWNrZXIgaGVyZSBpcyB0aGF0IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZ2V0cyBjYWxsZWQsIGFzIGZhciBhcyBJIGNhbiBzZWUgZnJvbSBjb250ZXh0LCB3aXRoaW4gYW4gYGV4ZWN2ZWAgY2FsbC4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXM7IGEgcHJvY2VzcyBzaG91bGQgKm5vdCogYmUgbG9zaW5nIGl0cyBgaW9fdXJpbmdfcmVzdHJpY3RgIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGFuIGBleGVjdmVgIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkgYmFkIG5ld3MhIFdoYXQgKmlzKiBgaW9fdXJpbmdfcmVzdHJpY3RgPyBCYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCdzIGxpa2VseSByZWxhdGVkIHRvIEJQRiBmaWx0ZXJpbmcgZm9yIGlvX3VyaW5n4oCmIEkgc2hvdWxkIHByb2JhYmx5IHNlYXJjaCBmb3IgYGlvX3VyaW5nX3Jlc3RyaWN0YCB0byBjb25maXJtIG15IHN1c3BpY2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ0OjEyLjAyOTQ2MTIxNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyNDcwMDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19yZXN0cmljdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI4LXtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6Mjk6XFx0aWYgKHRzay1cXHUwMDNlaW9fdXJpbmcgfHwgdHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzAtXFx0XFx0X19pb191cmluZ19mcmVlKHRzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MzI9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzMte1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozNDpcXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzUtXFx0XFx0cmV0dXJuIF9faW9fdXJpbmdfZm9yayh0c2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEyMDAtXFx0c3RydWN0IGlvX3VyaW5nX3Rhc2tcXHRcXHQqaW9fdXJpbmc7XFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEyMDE6XFx0c3RydWN0IGlvX3Jlc3RyaWN0aW9uXFx0XFx0KmlvX3VyaW5nX3Jlc3RyaWN0O1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMjAyLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9ODEyPXN0cnVjdCBpb191cmluZ19wcm9iZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MTktXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg6ODIwOnN0cnVjdCBpb191cmluZ19yZXN0cmljdGlvbiB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtODIxLVxcdF9fdTE2IG9wY29kZTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTgzMT1zdHJ1Y3QgaW9fdXJpbmdfdGFza19yZXN0cmljdGlvbiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MzQtXFx0X191MzIgcmVzdlszXTtcXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo4MzU6XFx0X19ERUNMQVJFX0ZMRVhfQVJSQVkoc3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uLCByZXN0cmljdGlvbnMpO1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTgzNi19O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9OTM2PXN0cnVjdCBpb191cmluZ19uYXBpIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1NS0vKlxcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjk1NjogKiBpb191cmluZ19yZXN0cmljdGlvbi1cXHUwMDNlb3Bjb2RlIHZhbHVlc1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1Ny0gKi9cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjk3Mz1zdGF0aWMgX19jb2xkIGludCBpb191cmluZ19jcmVhdGUoc3RydWN0IGlvX2N0eF9jb25maWcgKmNvbmZpZylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMzAzNy1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjMwMzg6XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MzAzOTpcXHRcXHRpb19jdHhfcmVzdHJpY3Rpb25fY2xvbmUoY3R4LCBjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zMDQwLVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMTE9c3RhdGljIF9fY29sZCBpbnQgaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzLFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMTMte1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTE0OlxcdHN0cnVjdCBpb191cmluZ19yZXN0cmljdGlvbiAqcmVzO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTE1LVxcdHNpemVfdCBzaXplO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0yMDE9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjA4LVxcdC8qIERpc2FsbG93IGlmIHRhc2sgYWxyZWFkeSBoYXMgcmVnaXN0ZXJlZCByZXN0cmljdGlvbnMgKi9cXG5pb191cmluZy9yZWdpc3Rlci5jOjIwOTpcXHRpZiAoY3VycmVudC1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMTAtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjM3LVxcdH1cXG5pb191cmluZy9yZWdpc3Rlci5jOjIzODpcXHRjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCA9IHJlcztcXG5pb191cmluZy9yZWdpc3Rlci5jLTIzOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MjQyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNTgtXFx0LyogSWYgbm8gdGFzayByZXN0cmljdGlvbnMgZXhpc3QsIHNldHVwIGEgbmV3IHNldCAqL1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjU5OlxcdHJlcyA9IGN1cnJlbnQtXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0O1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjYwLVxcdGlmICghcmVzKSB7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTI2Ny1cXHRpZiAocmV0KSB7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNjg6XFx0XFx0aWYgKHJlcyAhPSBjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG5pb191cmluZy9yZWdpc3Rlci5jLTI2OS1cXHRcXHRcXHRrZnJlZShyZXMpO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzEtXFx0fVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjcyOlxcdGlmICghY3VycmVudC1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNzM6XFx0XFx0Y3VycmVudC1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSByZXM7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzQtXFx0cmV0dXJuIDA7XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NzI9dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzQtXFx0aW9fdXJpbmdfZnJlZV90Y3R4KHRzayk7XFxuaW9fdXJpbmcvdGN0eC5jOjc1OlxcdGlmICh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XFxuaW9fdXJpbmcvdGN0eC5jOjc2OlxcdFxcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcXG5pb191cmluZy90Y3R4LmM6Nzc6XFx0XFx0a2ZyZWUodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuaW9fdXJpbmcvdGN0eC5jOjc4OlxcdFxcdHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMO1xcbmlvX3VyaW5nL3RjdHguYy03OS1cXHR9XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NDEwPWludCBfX2lvX3VyaW5nX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW9fdXJpbmcvdGN0eC5jLTQxMS17XFxuaW9fdXJpbmcvdGN0eC5jOjQxMjpcXHRzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcywgKnNyYyA9IHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3Q7XFxuaW9fdXJpbmcvdGN0eC5jLTQxMy1cXG5pb191cmluZy90Y3R4LmMtNDE0LVxcdC8qIERvbid0IGxlYXZlIGl0IGRhbmdsaW5nIG9uIGVycm9yICovXFxuaW9fdXJpbmcvdGN0eC5jOjQxNTpcXHR0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0ID0gTlVMTDtcXG5pb191cmluZy90Y3R4LmMtNDE2LVxcbi0tXFxuaW9fdXJpbmcvdGN0eC5jLTQyMC1cXG5pb191cmluZy90Y3R4LmM6NDIxOlxcdHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSByZXM7XFxuaW9fdXJpbmcvdGN0eC5jLTQyMi1cXHRpb19yZXN0cmljdGlvbl9jbG9uZShyZXMsIHNyYyk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD02MjI9c3RydWN0IGlvX3VyaW5nX3Byb2JlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTYyOS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo2MzA6c3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uIHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02MzEtXFx0X191MTYgb3Bjb2RlO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9Njc5PXN0cnVjdCBpb191cmluZ19idWZfcmVnIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTY4Ny0vKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjY4ODogKiBpb191cmluZ19yZXN0cmljdGlvbi1cXHUwMDNlb3Bjb2RlIHZhbHVlc1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTY4OS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MTUuMzU0MTY4OTg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MzA5MzY2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFJlc3RyaWN0aW9uIEZpeCoqXG5cbk9rYXksIHNvIGBpb191cmluZ19yZXN0cmljdGAgaXMgYSB0YXNrLWxldmVsIHNldHRpbmcgZm9yIGlvX3VyaW5nLCBhbmQgaXQncyBjbG9uZWQgd2hlbiBhIHByb2Nlc3MgZm9ya3MuIFRoZSBrZXkgaXNzdWUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGBleGVjdmVgLiBJIHNlZSB0aGF0IHdoZW4gYSB0YXNrIGNhbGxzIGBleGVjdmVgLCB0aGUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBmdW5jdGlvbiBpcyBjYWxsZWQuIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxpbmcgYF9faW9fdXJpbmdfZnJlZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllczogYF9faW9fdXJpbmdfZnJlZWAgd2FzIGZyZWVpbmcgdGhlIGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgIGFuZCBzZXR0aW5nIGl0IHRvIE5VTEwuXG5cbk5vdywgdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHJlZCBmbGFnIGluIG15IG1pbmQuIElmIGBleGVjdmVgIGNsZWFycyB0aGUgcmVzdHJpY3Rpb25zLCB0aGVuIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIG5ldyBwcm9ncmFtLCB0aGUgdGFzayB3b3VsZCBiZSBydW5uaW5nIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9ucy4gQnV0IHRoZSB3aG9sZSAqcG9pbnQqIG9mIHJlc3RyaWN0aW9ucyBpcyB0byBkZWZpbmUsIGFuZCAqZW5mb3JjZSosIGxpbWl0YXRpb25zIHRoYXQgcGVyc2lzdCBhY3Jvc3MgYGV4ZWN2ZWAsIHJpZ2h0PyBPciBwZXJoYXBzIHRoZXkgc2hvdWxkbid0IGJlIGNsZWFyZWQgYmVjYXVzZSBgZXhlY3ZlYCBzaG91bGRuJ3QgYnlwYXNzIHJlc3RyaWN0aW9ucyFcblxuVGhhdCdzIGl0ISBJZiBhIHRhc2sgc2V0cyB1cCByZXN0cmljdGlvbnMgYW5kIHRoZW4gY2FsbHMgYGV4ZWN2ZWAsIGJ1dCB0aG9zZSByZXN0cmljdGlvbnMgYXJlIGNsZWFyZWQgYnkgdGhlIGBleGVjdmVgIGNhbGwsIHRoZW4gdGhlIG5ldyBwcm9ncmFtIHdvdWxkIGJlIHJ1bm5pbmcgKndpdGhvdXQqIHRob3NlIHJlc3RyaWN0aW9ucy4gVGhhdCdzIGEgY2xlYXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS5cblxuU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBleGFjdCBidWc6IHdoZXJlIGBleGVjdmVgIHVuaW50ZW50aW9uYWxseSBjbGVhcnMgYGlvX3VyaW5nX3Jlc3RyaWN0YC4gVGhlIHNvbHV0aW9uPyBJbnN0ZWFkIG9mIHRoZSBvbGQsIGluY29ycmVjdCBjYWxsIHRvIGBfX2lvX3VyaW5nX2ZyZWUoY3VycmVudClgIGluc2lkZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCB0aGUgcGF0Y2ggcmVwbGFjZXMgaXQgd2l0aCBgaW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGBpb191cmluZ19yZXN0cmljdGAgc2V0dGluZyBpcyBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBgZXhlY3ZlYCBjYWxsLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGlvX3VyaW5nIGxvZ2ljIGZpeC4gV2UgY2FuIGRlZmluaXRlbHkgZnV6eiBpdC4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBsaWtlIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AgYW5kIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIHNpbmNlIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgc2V0IGBpb191cmluZ19yZXN0cmljdGAuIEFuZCwgb2YgY291cnNlLCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIHdoaWNoIGlzIHRoZSBmb2N1cyBvZiB0aGUgcGF0Y2ggYmVjYXVzZSBpdCBnZXRzIGNhbGxlZCBkdXJpbmcgYGV4ZWN2ZWAuIFdhaXQsIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AgaXMgY2FsbGVkIGJ5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIGdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MjIuMjg1MTA4NzQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3Mzk3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3JlZ2lzdGVyLmM9MTY3PXN0YXRpYyBfX2NvbGQgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9ucyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjAwLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjAxOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDIte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDAxPXN0YXRpYyBpbnQgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQodW5zaWduZWQgaW50IG9wY29kZSwgdm9pZCBfX3VzZXIgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwOS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlM6XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDEwOlxcdFxcdHJldHVybiBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayhhcmcsIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAxMS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDoyNi45NDI1MTk2OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMDU5MzIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgaW9fdXJpbmcgUmVnaXN0cmF0aW9uIE1lY2hhbmljcyoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgaW9fdXJpbmdfcmVnaXN0ZXJgIGZvciBhIG1vbWVudC4gUmlnaHQsIGxldCBtZSBzZWUsIEkga25vdyB0aGF0IGBJT1JJTkdfUkVHSVNURVJfUkVTVFJJQ1RJT05TYCBhbmQgYElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSYCBhcmUgdGhlIG9wY29kZXMgdXNlZCB3aXRoaW4gdGhhdCBjYWxsLCB0aGF0IG1ha2VzIHNlbnNlLiBIbW0sIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUncyBhIHNwZWNpYWwgY2FzZSwgYSBudWFuY2UgaGVyZSDigJMgd2Fzbid0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgPyBOb3cgd2hlcmUgZG9lcyB0aGF0IGNvbWUgaW50byBwbGF5Li4uIEFoLCBJIHNlZW0gdG8gcmVtZW1iZXIgaXQncyB1c2VkIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciwgYGZkYCwgaXMgc2V0IHRvIGAtMWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGlzbid0IGl0PyBCZXR0ZXIgY2hlY2sgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcGFydGljdWxhcnMuIEkgd2FudCB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDozMC40NTMxMTU3ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzg0MTk4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuYz05ODA9c3RhdGljIGludCBpb191cmluZ19yZWdpc3Rlcl9zZW5kX21zZ19yaW5nKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDAwLSAqL1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAwMTpzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDAyLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDE3PVNZU0NBTExfREVGSU5FNChpb191cmluZ19yZWdpc3RlciwgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgaW50LCBvcGNvZGUsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMzEtXFx0aWYgKGZkID09IC0xKVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAzMjpcXHRcXHRyZXR1cm4gaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQob3Bjb2RlLCBhcmcsIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MzQuNjkxNTQwOTIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjMzMzIxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgaW9fdXJpbmcgUmVzdHJpY3Rpb25zIGFuZCBCUEYgRmlsdGVyIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhlIGBpb191cmluZ19yZWdpc3RlcmAgc3lzdGVtIGNhbGwsIHdoZW4gdXNlZCB3aXRoIGBmZCA9PSAtMWAsIGNhbGxzIGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAsIHdoaWNoIHVsdGltYXRlbHkgbGVhZHMgdG8gYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBiZWluZyBpbnZva2VkLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGFpbXMgdG8gcHJldmVudCBgaW9fdXJpbmdfcmVzdHJpY3RgIGZyb20gYmVpbmcgZnJlZWQgZHVyaW5nIGFuIGBleGVjdmVgIGNhbGwuIE15IGZ1enppbmcgc3RyYXRlZ3kgdGhlbiBuZWVkcyB0byBiZSBwcmV0dHkgc3BlY2lmaWMgdG8gdGVzdCB0aGlzOlxuXG4xLiAgRmlyc3QsIEknbGwgbmVlZCB0byB1c2UgYGlvX3VyaW5nX3JlZ2lzdGVyYCB3aXRoIGBmZCA9IC0xYCBhbmQgZWl0aGVyIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1JFU1RSSUNUSU9OU2Agb3IgYElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSYCBvcGNvZGUgdG8gc2V0IGBjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC5cbjIuICBOZXh0LCBJIG5lZWQgdG8gdHJpZ2dlciBhbiBgZXhlY3ZlYC5cbjMuICBBZnRlciB0aGUgYGV4ZWN2ZWAsIHRoZSAqbmV3KiBwcm9ncmFtIHdpbGwgaG9wZWZ1bGx5IHN0aWxsIGhhdmUgYWNjZXNzIHRvIHRoYXQgYGN1cnJlbnQtXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgIGNvbnRleHQuXG40LiAgRmluYWxseSwgSSBjYW4gZWl0aGVyIHRyeSB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiB0aGF0ICpzaG91bGQqIGJlIHJlc3RyaWN0ZWQsIG9yIEkgY2FuIGp1c3QgZXhpdCB0aGUgcHJvZ3JhbSBhbmQgbGV0IGBfX2lvX3VyaW5nX2ZyZWVgIGNsZWFuIHRoaW5ncyB1cC5cblxuVGhlIGtleSBzeW1ib2xzIEkgc2hvdWxkIHRhcmdldCBhcmU6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AsIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBhbmQgYGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza2AgYXJlIHN0YXRpYy4gWWVwLCB0aGV5IGFyZS4gQnV0IHdhaXQsIHRoZSBndWlkZWxpbmVzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIERvZXMgdGhhdCBtZWFuIEkgc2hvdWxkIGJlIHVzaW5nIGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAgb3IgYHN5c19pb191cmluZ19yZWdpc3RlcmA/IEFjdHVhbGx5LCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgIGlzIGFsc28gc3RhdGljISBPa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGBpb191cmluZ19yZWdpc3RlcmAgc3lzY2FsbCBkaXJlY3RseS4gQWgsIHRoYXQncyBlaXRoZXIgYF9feDY0X3N5c19pb191cmluZ19yZWdpc3RlcmAgb3Igc2ltcGx5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIHRoYXQncyBiZXR0ZXIuXG5cbkEgcXVpY2sgY2hlY2sgb24gdGhlIG90aGVyIG9uZXM6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgaXMgbm9uLXN0YXRpYywgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgaXMgbm9uLXN0YXRpYywgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgIGlzIG5vbi1zdGF0aWMgdG9vLiBJJ2xsIG5lZWQgdG8gcmVmZXIgdG8gYGlvX3VyaW5nL3RjdHguY2AgbGF0ZXIgdG8gY2hlY2sgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDo0Mi41NTQ4NzY5NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDI0NTU3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBpb191cmluZ19mcmVlX3RjdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvdGN0eC5jPTE2PXN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3RjdHguYy00NS1cXG5pb191cmluZy90Y3R4LmM6NDY6dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW9fdXJpbmcvdGN0eC5jLTQ3LXtcXG4tLVxcbmlvX3VyaW5nL3RjdHguaD0xND12b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpO1xcbmlvX3VyaW5nL3RjdHguaDoxNTp2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuaW9fdXJpbmcvdGN0eC5oLTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDo0Ni45NTczNjc4NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2OTYzODE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBpb191cmluZyBTeW1ib2wgUmVzb2x1dGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHMgcmVsYXRlZCB0byBgaW9fdXJpbmdgIGFuZCB0cnlpbmcgdG8gemVybyBpbiBvbiB0aGUga2V5IG9uZXMuIEkndmUgY29uZmlybWVkIHRoYXQgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBuZWl0aGVyIGlzIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuIFRoYXQgbWVhbnMgdGhlc2UgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgbXkgZm9jdXMuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGluY2x1ZGluZyBgX194NjRfc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBvciBwb3RlbnRpYWxseSBqdXN0IGBzeXNfaW9fdXJpbmdfcmVnaXN0ZXJgIGFzIGEgZm9jdXMgc3ltYm9sLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBpcyB1c3VhbGx5IGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FNCguLi4pYC4gSW5jbHVkaW5nIGl0IGFkZHMgc29tZSBjb21wbGV4aXR5IHRoYXQgSSBjYW4gYXZvaWQuXG5cblRoZXJlZm9yZSwgSSB0aGluayB0aGUgbW9zdCBkaXJlY3QgcGF0aCBpcyB0byBjb25jZW50cmF0ZSBvbiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUsIG5vbi1zdGF0aWMgc3ltYm9scyB0aGF0J2xsIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC5cblxuTmV4dCwgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGRlcGVuZGVuY3kgb24gc3BlY2lmaWMgY29uZmlncywgbGlrZSBgQ09ORklHX0lPX1VSSU5HYC4gVGltZSB0byBkaXZlIGludG8gYGluaXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGlvX3VyaW5nL0tjb25maWdgIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6NTEuNzI3MDA4OTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODc4MTE1ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNy1cXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxOS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzOS1cXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5NDEtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDo1NS42MDUxMzQ2MDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDQ4NTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBpb191cmluZydzIEJQRiBSZXN0cmljdGlvbnMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUga2V5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaW9fdXJpbmcsIG9idmlvdXNseS4gQnV0IEkganVzdCBoYWQgYSBmbGFzaCBvZiBpbnNpZ2h0IOKAkyB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IHJlc3RyaWN0aW5nIGl0cyBjYXBhYmlsaXRpZXMgd2l0aCBCUEYgZmlsdGVycz8gWWVzLCB0aGF0J3MgaXQhIGBpb191cmluZ19yZXN0cmljdGAgcmluZ3MgYSBiZWxsLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW4uIExldCdzIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgaG93IEJQRiBmaWx0ZXJzIGFyZSBpbmNvcnBvcmF0ZWQgZHVyaW5nIHJlZ2lzdHJhdGlvbiwgc28gYGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza2Agc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRvIGV4YW1pbmUuIExldCdzIHNlZSBob3cgdGhleSBpbXBsZW1lbnQgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6NTkuMTI1NjIzODgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg2ODU3NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yZWdpc3Rlci5jPTIwMT1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNDEtXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNDI6c3RhdGljIGludCBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNDMte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDAxPXN0YXRpYyBpbnQgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQodW5zaWduZWQgaW50IG9wY29kZSwgdm9pZCBfX3VzZXIgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAxMS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAxMjpcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDEzLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MDIuODEyNDg3MDk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzc2OTUwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBhbmQgaXRzIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIGFuZCB0aGUgYENPTkZJR19JT19VUklOR19CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRoZXJlLCBhbmQgdW5kZXJzdGFuZGluZyB0aGF0IGlzIGNyaXRpY2FsIGZvciBbaW5zZXJ0IHJlYXNvbiByZWxldmFudCB0byB5b3VyIGZpZWxkLCBlLmcuLCBjb2RlIG1haW50YWluYWJpbGl0eSwgZmVhdHVyZSBlbmFibGVtZW50LCBwbGF0Zm9ybSBjb21wYXRpYmlsaXR5XS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCBjb25maWcgb3B0aW9uIGFjdHMgYXMgYSBnYXRpbmcgbWVjaGFuaXNtIGZvciB0aGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIHRhc2suIElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBbZS5nLiwgYnVpbGQgY29uZmlndXJhdGlvbnMsIGZlYXR1cmUgZmxhZ3MsIG9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XS4gTGV0J3MgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcmV2aWV3IGFueSByZWxldmFudCBLY29uZmlnIGVudHJpZXMsIGFuZCBiZSBzdXJlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjA2LjA1MDE4NTU5NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjI2ODY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSU9fVVJJTkdfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICs9IG1vY2tfZmlsZS5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgKz0gYnBmX2ZpbHRlci5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICs9IGJwZi1vcHMub1xcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5oPTEzPXN0cnVjdCBpb191cmluZ19icGZfb3BzIHtcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cXG5pb191cmluZy9icGYtb3BzLmg6MjA6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvYnBmLW9wcy5oLTIxLXZvaWQgaW9fdW5yZWdpc3Rlcl9icGZfb3BzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC02LVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDo3OiNpZmRlZiBDT05GSUdfSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTgtXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmg9NDI9c3RhdGljIGlubGluZSB2b2lkIGlvX2JwZl9maWx0ZXJfY2xvbmUoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpkc3QsXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDUtfVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDo0NjojZW5kaWYgLyogQ09ORklHX0lPX1VSSU5HX0JQRiAqL1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MTAuNDg2NDYwMTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODI0ODk4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgZUJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24gaW50ZXJhY3RzIHdpdGggZUJQRi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSBmb3IgYElPX1VSSU5HX0JQRmAgdGhlcmUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBkb2VzIGFuZCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRoYXQgd2lsbCBkaWN0YXRlIGhvdyBJIHB1cnN1ZSB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MTMuMjY4OTUzNjAyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDUxNTUyNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR19CUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvS2NvbmZpZz02PWNvbmZpZyBJT19VUklOR19aQ1JYXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjE3LjMyMDUxODY4OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc1NzkzNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgZGVmX2Jvb2wgeWAgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYElPX1VSSU5HYCBhbmQgYEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBmb3IgYGlvX3VyaW5nYCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5IGxvZ2ljLiBUaGlzIHNldHVwIHNjcmVhbXMgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBJL08gYW5kIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgc3lzY2FsbCBmZWF0dXJlcy4gSXQncyBsaWtlbHkgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlLCBvciB0aGF0IHNvbWUgc3BlY2lmaWMgQlBGIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgbGV2ZXJhZ2VkIG9yIGludGVncmF0ZWQgaW50byB0aGUgYGlvX3VyaW5nYCBkZXNpZ24gaW4gYSBjb25kaXRpb25hbCBtYW5uZXIuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCdzIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBiZW5lZml0cywgSSBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0IHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMhIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgdGhlcmUsIG9yIHBlcmhhcHMgYSBtb3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGludm9sdmluZyBmZWF0dXJlIGZsYWdzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MjAuOTk2MzE1MDUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIGlvX3VyaW5nIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIElPX1VSSU5HX1pDUlhcXG4gICA3OlxcdFxcdGRlZl9ib29sIHlcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9QT09MXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gTkVUX1JYX0JVU1lfUE9MTFxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgSU9fVVJJTkdfQlBGXFxuICAxNDpcXHRcXHRkZWZfYm9vbCB5XFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG4gIDE5OlxcdFxcdGRlZl9ib29sIHlcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MjAuOTk2NDg2MzkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTAxMzE4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBJT19VUklOR19CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBoYXMgYSBkZXBlbmRlbmN5IG9uIGJvdGggYEJQRmAgYW5kIGBORVRgLCBzbyB0aG9zZSBhcmUgbXVzdC1oYXZlcy4gTmF0dXJhbGx5LCBJIHNob3VsZCBhbHNvIGVuc3VyZSB0aGF0IEkgaGF2ZSBgSU9fVVJJTkdgLCBhbmQgYEJQRl9TWVNDQUxMYCBlbmFibGVkIGFzIHdlbGwuIFdhaXQgYSBzZWNvbmQsIEkgcmVjYWxsIHNlZWluZyBgSU9fVVJJTkdgIGRlZmluZWQgc29tZXdoZXJlIGluIGBpbml0L0tjb25maWdgIHdoZW4gSSB3YXMgbG9va2luZyBhdCBvdGhlciBjb25maWd1cmF0aW9ucy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGluIGBpbml0L0tjb25maWdgIGZvciB0aGUgYElPX1VSSU5HYCBvcHRpb25zIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NToyNC4yMDY2MjEyODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTE1OlxcdFxcdCAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nXFxuMTkxNjpcXHRcXHQgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLlxcbjE5MTc6XFx0XFxuMTkxODpcXHRjb25maWcgSU9fVVJJTkdcXG4xOTE5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4xOTIwOlxcdFxcdHNlbGVjdCBJT19XUVxcbjE5MjE6XFx0XFx0ZGVmYXVsdCB5XFxuMTkyMjpcXHRcXHRoZWxwXFxuMTkyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcXG4xOTI0OlxcdFxcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NToyNC4yMDY4MDA4MjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NTQzNTMxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBDYW5jZWwgTG9naWMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGJ1ZyB3aXRoaW4gYGlvX3VyaW5nYCByZWxhdGVkIHRvIGhvdyBjYW5jZWxsYXRpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBleGVjdmVgLiBJIHNlZSB0aGF0IGBJT19VUklOR2AgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwYXRjaCB0b3VjaGVzIGBpb191cmluZy9jYW5jZWwuY2AgYW5kIGBpb191cmluZy90Y3R4LmNgLCBpbW1lZGlhdGVseSByYWlzaW5nIG15IGFudGVubmEgcmVnYXJkaW5nIHRhc2sgY29udGV4dCBhbmQgY2FuY2VsbGF0aW9uIG9wZXJhdGlvbnMuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggbGllcyBpbiBjaGFuZ2luZyBob3cgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAgaXMgaGFuZGxlZCB3aGVuIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgaXMgY2FsbGVkLiBJdCBzZWVtcyB0aGF0IHByZXZpb3VzbHksIGR1cmluZyBgZXhlY3ZlYCwgdGhlIGdlbmVyaWMgY2FuY2VsIGZ1bmN0aW9uIHdvdWxkIGVycm9uZW91c2x5IGZyZWUgdGhpcyByZXN0cmljdGlvbiB1c2luZyBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYC4gVGhpcyBoYXMgbm93IGJlZW4gcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAsIHdoaWNoIGludGVudGlvbmFsbHkgKmRvZXNuJ3QqIGZyZWUgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAsIGJ1dCBpbnN0ZWFkIGZyZWVzIHRoZSBvdGhlciBjb250ZXh0IHZhcmlhYmxlcy4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjb3JyZWN0IGJlaGF2aW9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgaW4gdGhpcyBuZXcgZmxvdy5cblxuRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBUaGUgY2FsbHN0YWNrIGZyb20gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBsb29rcyBzb2xpZC4gSXQncyByZWFjaGVkIHRocm91Z2ggYF9faW9fdXJpbmdfY2FuY2VsYCwgdGhlbiBgaW9fdXJpbmdfdGFza19jYW5jZWxgLCBhbmQgZmluYWxseSBmcm9tIGBiZWdpbl9uZXdfZXhlY2AgYW5kIGBkb19leGl0YC4gWWVwLCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRob3NlIGtleSBwcm9jZXNzIGxpZmVjeWNsZSBwb2ludHMuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMuIGBpb191cmluZ19mcmVlX3RjdHhgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIG9yIHJhdGhlciwgdGhlIG9sZCBmdW5jdGlvbiB3aXRoIGEgbmV3IG5hbWUsIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgdGhlIG9yaWdpbmFsIGBfX2lvX3VyaW5nX2ZyZWVgIGhhcyBiZWNvbWUgYSB3cmFwcGVyIG5vdywgY2FsbGluZyBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgdGhlbiBoYW5kbGluZyB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBjbGVhbnVwIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiByZXNwb25zaWJpbGl0eS4gQm90aCBhcmUgbm9uLXN0YXRpYzsgdGhleSBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIHRob3JvdWdobHkgYW5kIEkgc2hvdWxkIGJlIHRlc3RpbmcgYm90aC5cblxuSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIG5vdywganVzdCB0byBiZSB0aG9yb3VnaC4gSXQncyBkZWNsYXJlZCBgX19jb2xkYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgY2FuY2VsbGF0aW9uIGlzbid0IGEgaG90IHBhdGguIEl0J3MgYWxzbyBub3Qgc3RhdGljLiBHb29kLlxuXG5JJ2xsIGNoZWNrIHRvIHNlZSBpZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBBaCwgeWVzLCBpdCBpcyBhbHNvIGNhbGxlZCBieSBgaW9fc3FfdGhyZWFkYCBpbiBgaW9fdXJpbmcvc3Fwb2xsLmNgLiBJIHdpbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblNvLCB0aGUgZm9jdXMgaXMgZGVmaW5pdGl2ZWx5IG9uOiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLlxuXG5JbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgSU9fVVJJTkdgLCBgQlBGYCwgYW5kIGBORVRgIHdpbGwgYmUgbmVjZXNzYXJ5LiBgSU9fVVJJTkdfQlBGYCBzZWVtcyB0byBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEJQRmAgYW5kIGBORVRgIGFyZSBzZXQsIHNvIHRoYXQncyBub3Qgc29tZXRoaW5nIHRvIHNwZWNpZnkgZXhwbGljaXRseS4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIGRlZmluZWQgcmVnYXJkbGVzcyBvZiB0aGUgQlBGIGZpbHRlciBhdmFpbGFiaWxpdHkuIElmIGl0IGlzIG9ubHkgZGVmaW5lZCBiZWhpbmQgYENPTkZJR19JT19VUklOR2AsIHRoZW4gSSBjYW4ganVzdCB2ZXJpZnkgYElPX1VSSU5HYC4gTGV0J3MgY29uZmlybSB0aGF0IHdpdGggYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0IHNob3VsZCBjbGVhciB1cCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc0MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjM1Ljc2MTE1NjgwMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0XFx0Y3R4LVxcdTAwM2VpbnRfZmxhZ3MgfD0gSU9fUklOR19GX09QX1JFU1RSSUNURUQ7XFxuIDE5NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VyZXN0cmljdGlvbnMucmVnX3JlZ2lzdGVyZWQpXFxuIDE5NzpcXHRcXHRcXHRjdHgtXFx1MDAzZWludF9mbGFncyB8PSBJT19SSU5HX0ZfUkVHX1JFU1RSSUNURUQ7XFxuIDE5ODpcXHRcXHRyZXR1cm4gMDtcXG4gMTk5OlxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4gMjAyOlxcdHtcXG4gMjAzOlxcdFxcdHN0cnVjdCBpb191cmluZ190YXNrX3Jlc3RyaWN0aW9uIF9fdXNlciAqdXJlcyA9IGFyZztcXG4gMjA0OlxcdFxcdHN0cnVjdCBpb191cmluZ190YXNrX3Jlc3RyaWN0aW9uIHRyZXM7XFxuIDIwNTpcXHRcXHRzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcztcXG4gMjA2OlxcdFxcdGludCByZXQ7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdC8qIERpc2FsbG93IGlmIHRhc2sgYWxyZWFkeSBoYXMgcmVnaXN0ZXJlZCByZXN0cmljdGlvbnMgKi9cXG4gMjA5OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG4gMjEwOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDIxMTpcXHRcXHQvKlxcbiAyMTI6XFx0XFx0ICogU2ltaWxhciB0byBzZWNjb21wLCBkaXNhbGxvdyBzZXR0aW5nIGEgZmlsdGVyIGlmIHRhc2tfbm9fbmV3X3ByaXZzXFxuIDIxMzpcXHRcXHQgKiBpcyBmYWxzZSBhbmQgd2UncmUgbm90IENBUF9TWVNfQURNSU4uXFxuIDIxNDpcXHRcXHQgKi9cXG4gMjE1OlxcdFxcdGlmICghdGFza19ub19uZXdfcHJpdnMoY3VycmVudCkgXFx1MDAyNlxcdTAwMjZcXG4gMjE2OlxcdFxcdCAgICAhbnNfY2FwYWJsZV9ub2F1ZGl0KGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0FETUlOKSlcXG4gMjE3OlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAyMTg6XFx0XFx0aWYgKG5yX2FyZ3MgIT0gMSlcXG4gMjE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRyZXMsIGFyZywgc2l6ZW9mKHRyZXMpKSlcXG4gMjIyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAodHJlcy5mbGFncylcXG4gMjI1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMjY6XFx0XFx0aWYgKCFtZW1faXNfemVybyh0cmVzLnJlc3YsIHNpemVvZih0cmVzLnJlc3YpKSlcXG4gMjI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRyZXMgPSBremFsbG9jX29iaigqcmVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiAyMzA6XFx0XFx0aWYgKCFyZXMpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0cmV0ID0gaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHVyZXMtXFx1MDAzZXJlc3RyaWN0aW9ucywgdHJlcy5ucl9yZXMsIHJlcyk7XFxuIDIzNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NTozNS43NjEzMDI1MjJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NjE3NzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSBjYW4gbWFrZSBvZiB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYGlvX3B1dF9icGZfZmlsdGVyc2AgaW4gYGlvX3VyaW5nYCoqXG5cbkhtbSwgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhpcyBiZWhhdmlvciBpcyB0aWVkIHRvIGBDT05GSUdfSU9fVVJJTkdfQlBGYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEl0IGFwcGVhcnMgdG8gYmUgaW5oZXJlbnRseSBwYXJ0IG9mIHRoZSBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgY29kZSBiYXNlLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uXG5cbk5vdywgYSBiZWxsIGp1c3Qgd2VudCBvZmYuIFdoZXJlICppcyogYGlvX3B1dF9icGZfZmlsdGVyc2AgYWN0dWFsbHkgdXNlZD8gQWgsIHJpZ2h0LiBJdCdzIGNhbGxlZCB3aXRoaW4gYF9faW9fdXJpbmdfZnJlZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggYW5kIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCBtZSB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoYXQgc3BlY2lmaWMgcm91dGluZSBpcyBjYWxsZWQgd2l0aGluIHRoZSBsYXJnZXIgZnJlZWluZyBwcm9jZXNzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBpbnRlcnByZXRpbmcgdGhlIHNpZ25pZmljYW5jZSBvZiBpdHMgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MzkuMzU3NDgyNjg2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA0MDI0NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3B1dF9icGZfZmlsdGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9icGZfZmlsdGVyLmM9OTc9c3RhdGljIHZvaWQgaW9fZnJlZV9icGZfZmlsdGVycyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMTM4LVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzoxMzk6c3RhdGljIHZvaWQgX19pb19wdXRfYnBmX2ZpbHRlcnMoc3RydWN0IGlvX2JwZl9maWx0ZXJzICpmaWx0ZXJzKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDAte1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTE0NC1cXG5pb191cmluZy9icGZfZmlsdGVyLmM6MTQ1OnZvaWQgaW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDYte1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDctXFx0aWYgKHJlcy1cXHUwMDNlYnBmX2ZpbHRlcnMpXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjE0ODpcXHRcXHRfX2lvX3B1dF9icGZfZmlsdGVycyhyZXMtXFx1MDAzZWJwZl9maWx0ZXJzKTtcXG5pb191cmluZy9icGZfZmlsdGVyLmMtMTQ5LX1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0yNjY9c3RhdGljIHN0cnVjdCBpb19icGZfZmlsdGVycyAqaW9fYnBmX2ZpbHRlcl9jb3coc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpzcmMpXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzA1LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMDY6XFx0X19pb19wdXRfYnBmX2ZpbHRlcnMoZmlsdGVycyk7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMwNy1cXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTM1OT1pbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcihzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MTYtXFx0aWYgKG9sZF9maWx0ZXJzKSB7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQxNzpcXHRcXHRfX2lvX3B1dF9icGZfZmlsdGVycyhvbGRfZmlsdGVycyk7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQxOC1cXHRcXHRyZXMtXFx1MDAzZWJwZl9maWx0ZXJzX2NvdyA9IGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQ1Mi1cXHRpZiAoZmlsdGVycyAhPSByZXMtXFx1MDAzZWJwZl9maWx0ZXJzKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzo0NTM6XFx0XFx0X19pb19wdXRfYnBmX2ZpbHRlcnMoZmlsdGVycyk7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQ1NC1lcnJfcHJvZzpcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD0xMT1pbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcihzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xMy1cXG5pb191cmluZy9icGZfZmlsdGVyLmg6MTQ6dm9pZCBpb19wdXRfYnBmX2ZpbHRlcnMoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMpO1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xNS1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD0zND1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19ydW5fYnBmX2ZpbHRlcnMoc3RydWN0IGlvX2JwZl9maWx0ZXIgX19yY3UgKipmaWx0ZXJzLFxcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTM4LX1cXG5pb191cmluZy9icGZfZmlsdGVyLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIGlvX3B1dF9icGZfZmlsdGVycyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcylcXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDAte1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTYzPXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2N0eF9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjAzLVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjIyMDQ6XFx0aW9fcHV0X2JwZl9maWx0ZXJzKFxcdTAwMjZjdHgtXFx1MDAzZXJlc3RyaWN0aW9ucyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjA1LVxcbi0tXFxuaW9fdXJpbmcvdGN0eC5jPTcyPXZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW9fdXJpbmcvdGN0eC5jLTc1LVxcdGlmICh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XFxuaW9fdXJpbmcvdGN0eC5jOjc2OlxcdFxcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcXG5pb191cmluZy90Y3R4LmMtNzctXFx0XFx0a2ZyZWUodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjQzLjU2MTUxNTczWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzI5NjE3MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgaW9fdXJpbmcgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgdGhpbmtpbmcuIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBpb191cmluZ19yZXN0cmljdGAgc3RydWN0dXJlIGlzIGhhbmRsZWQgZHVyaW5nIGBleGVjdmVgLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3YXMgaW5jb3JyZWN0bHkgZnJlZWluZyBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBpbnRlZ3JpdHkgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBkdXJpbmcgcHJvY2VzcyB0cmFuc2l0aW9ucy5cblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIHRoZSBkZWZpbml0aW9uIG9mIGBpb19wdXRfYnBmX2ZpbHRlcnNgLiBJIHJlYWxpemVkIHRoYXQgdGhlIGBpb19wdXRfYnBmX2ZpbHRlcnNgIGZ1bmN0aW9uLCBkZWZpbmVkIGluIGBpb191cmluZy9icGZfZmlsdGVyLmNgLCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfSU9fVVJJTkdfQlBGYCBpcyBzZXQuIElmIG5vdCwgaXQncyBqdXN0IGFuIGlubGluZSBmdW5jdGlvbi4gVGhpcyBtZWFucyBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUgYmFzZWxpbmUgbmVlZGVkLiBIb3dldmVyLCB0byBmdWxseSBleGVyY2lzZSBhbmQgdGVzdCB0aGUgQlBGIGZpbHRlciBjb21wb25lbnRzLCBJIHNob3VsZCBhbHNvIGVuYWJsZSBgQlBGYCBhbmQgYE5FVGAsIGluIGFkZGl0aW9uIHRvIGBJT19VUklOR2AsIHRvIGVuc3VyZSBgSU9fVVJJTkdfQlBGYCBpcyBlbmFibGVkLlxuXG5JJ3ZlIGRldGVybWluZWQgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBrZXkgc3ltYm9sczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IGFuZCBjb3VsZCByZXZlYWwgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3Vlcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYF9faW9fdXJpbmdfZnJlZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnZml4IGFuZCBhcmUgY3JpdGljYWwgZm9yIHRlc3RpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSU9fVVJJTkdgLCBgQlBGYCwgYE5FVGAgLSBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgaW5jbHVkaW5nIHRoZSBCUEYgZmlsdGVyaW5nLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBidWcgc2NlbmFyaW8gYW5kIHRlc3QgaXRzIGZpeC5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgYnVnIGZpeCBpbnZvbHZlcyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBpb191cmluZ19yZXN0cmljdGAgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uIHRyYW5zaXRpb25zLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgY29ycmVjdGx5IHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAgY2FsbHMgYnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBtb2RpZnlpbmcgdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMuXG5cbkkgY29uc2lkZXJlZCB3aGV0aGVyIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AgYW5kIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIHdvdWxkIGJlIHN1aXRhYmxlIGFzIGZvY3VzIHN5bWJvbHMsIHNpbmNlIHRoZXkgc2V0IGBpb191cmluZ19yZXN0cmljdGAuIEhvd2V2ZXIsIHRoZXkgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaGFyZGVyIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlaXIgY2FsbGluZyBzeW1ib2wsIGBpb191cmluZ19yZWdpc3RlcmAgaXMgZGVmaW5lZCB2aWEgYFNZU0NBTExfREVGSU5FNGAsIHNvIHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgd291bGQgYmUgcGxhdGZvcm0gc3BlY2lmaWMgKGBfX3g2NF9zeXNfaW9fdXJpbmdfcmVnaXN0ZXJgIG9yIGBfX2FybTY0X3N5c19pb191cmluZ19yZWdpc3RlcmApLiBJdCdzIGNsZWFuZXIgYW5kIG1vcmUgZGlyZWN0IHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoOiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLlxuXG5UbyBjb25maXJtIG15IGNob2ljZSwgSSBjaGVja2VkIHRoZSBkZWZpbml0aW9ucyBvZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGluIGBpb191cmluZy9jYW5jZWwuaGAsIGBpb191cmluZ19mcmVlX3RjdHhgIGluIGBpb191cmluZy90Y3R4LmhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAgaW4gYGluY2x1ZGUvbGludXgvaW9fdXJpbmcuaGAsIGFuZCB2ZXJpZmllZCB0aGF0IGFsbCB0aHJlZSBhcmUgbm9uLXN0YXRpYyBhbmQgZGlyZWN0bHkgZXhwb3NlZC4gVGhpcyBzb2xpZGlmaWVzIHRoZWlyIHN1aXRhYmlsaXR5IGFzIGZvY3VzIHN5bWJvbHMuXG5cbkknbSBub3cgc2F0aXNmaWVkIHdpdGggbXkgYW5hbHlzaXMgYW5kIHdpbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2MywiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6NTQuODkxMTM1ODQ0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3Mjg5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiQlBGXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jYW5jZWxfZ2VuZXJpY1wiLFxuICAgIFwiaW9fdXJpbmdfZnJlZV90Y3R4XCIsXG4gICAgXCJfX2lvX3VyaW5nX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gQnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBlbnN1cmVzIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGBleGVjdmVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiQlBGXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jYW5jZWxfZ2VuZXJpY1wiLFxuICAgIFwiaW9fdXJpbmdfZnJlZV90Y3R4XCIsXG4gICAgXCJfX2lvX3VyaW5nX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gQnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBlbnN1cmVzIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGBleGVjdmVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 07:21:16 +0000 UTC FinishedAt: 2026-08-01 07:45:56 +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": "8b5ffb43ae9d27eed9165e1962963d685d879219", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BPF", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8b5ffb43ae9d27eed9165e1962963d685d879219", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BPF", "NET" ], "series_id": "428e71bb-fb16-4da6-879b-814083a1644c" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_uring_cancel_generic", "io_uring_free_tctx", "__io_uring_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0JQRiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb191cmluZ19jYW5jZWxfZ2VuZXJpYyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19mcmVlX3RjdHgmIzM0OywKICAgICYjMzQ7X19pb191cmluZ19mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgKGNhbGxlZCBkdXJpbmcgYGV4ZWN2ZWApIHdvdWxkIGluY29ycmVjdGx5IGZyZWUgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAuIEJ5IHNwbGl0dGluZyBgX19pb191cmluZ19mcmVlYCBpbnRvIGBpb191cmluZ19mcmVlX3RjdHhgIGFuZCBgX19pb191cmluZ19mcmVlYCwgaXQgZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgcHJlc2VydmVkIGFjcm9zcyBgZXhlY3ZlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YjYxMDhhNGM1N2QxMDQyYzYxY2IxZDFiNGI3YmM0MWRjYWYwOTY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzo0MzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9jYW5jZWwuYyBiL2lvX3VyaW5nL2NhbmNlbC5jXG5pbmRleCA4YzZmYTZmMzY3ZTRmLi43ZDc4MjBlYWI4NzhiIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvY2FuY2VsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2NhbmNlbC5jXG5AQCAtNjYwLDYgJiM0Mzs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpXG4gXHRcdCAqL1xuIFx0XHRhdG9taWNfZGVjKFx1MDAyNnRjdHgtXHUwMDNlaW5fY2FuY2VsKTtcbiBcdFx0LyogZm9yIGV4ZWMgYWxsIGN1cnJlbnQmIzM5O3MgcmVxdWVzdHMgc2hvdWxkIGJlIGdvbmUsIGtpbGwgdGN0eCAqL1xuLVx0XHRfX2lvX3VyaW5nX2ZyZWUoY3VycmVudCk7XG4mIzQzO1x0XHRpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3RjdHguYyBiL2lvX3VyaW5nL3RjdHguY1xuaW5kZXggY2MzYmYyYjNiZGJjOS4uNDY2YjczMDBlMjA4ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3RjdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdGN0eC5jXG5AQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuLXZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuJiM0Mzt2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiB7XG4gXHRzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCA9IHRzay1cdTAwM2Vpb191cmluZztcbiBcdHN0cnVjdCBpb190Y3R4X25vZGUgKm5vZGU7XG5AQCAtNjcsNiAmIzQzOzY3LDExIEBAIHZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0XHRrZnJlZSh0Y3R4KTtcbiBcdFx0dHNrLVx1MDAzZWlvX3VyaW5nID0gTlVMTDtcbiBcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4mIzQzO3tcbiYjNDM7XHRpb191cmluZ19mcmVlX3RjdHgodHNrKTtcbiBcdGlmICh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpIHtcbiBcdFx0aW9fcHV0X2JwZl9maWx0ZXJzKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XG4gXHRcdGtmcmVlKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdGN0eC5oIGIvaW9fdXJpbmcvdGN0eC5oXG5pbmRleCAyMzEwZDJhMGM0NmQ5Li43NmFkMWFkNDU5NGVmIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvdGN0eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90Y3R4LmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQCB2b2lkIGlvX3VyaW5nX2RlbF90Y3R4X25vZGUodW5zaWduZWQgbG9uZyBpbmRleCk7XG4gaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4gaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZV9mcm9tX3N1Ym1pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4gdm9pZCBpb191cmluZ19jbGVhbl90Y3R4KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4KTtcbiYjNDM7dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuIFxuIHZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuIGludCBpb19yaW5nZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICpfX2FyZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3VyaW5nX2NhbmNlbF9nZW5lcmljJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2ZyZWVfdGN0eCYjMzQ7LAogICAgJiMzNDtfX2lvX3VyaW5nX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAoY2FsbGVkIGR1cmluZyBgZXhlY3ZlYCkgd291bGQgaW5jb3JyZWN0bHkgZnJlZSBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gQnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBlbnN1cmVzIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGBleGVjdmVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhiNjEwOGE0YzU3ZDEwNDJjNjFjYjFkMWI0YjdiYzQxZGNhZjA5NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjQzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvY2FuY2VsLmMgYi9pb191cmluZy9jYW5jZWwuYwppbmRleCA4YzZmYTZmMzY3ZTRmLi43ZDc4MjBlYWI4NzhiIDEwMDY0NAotLS0gYS9pb191cmluZy9jYW5jZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9jYW5jZWwuYwpAQCAtNjYwLDYgJiM0Mzs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpCiAJCSAqLwogCQlhdG9taWNfZGVjKCZhbXA7dGN0eC0mZ3Q7aW5fY2FuY2VsKTsKIAkJLyogZm9yIGV4ZWMgYWxsIGN1cnJlbnQmIzM5O3MgcmVxdWVzdHMgc2hvdWxkIGJlIGdvbmUsIGtpbGwgdGN0eCAqLwotCQlfX2lvX3VyaW5nX2ZyZWUoY3VycmVudCk7CiYjNDM7CQlpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdGN0eC5jIGIvaW9fdXJpbmcvdGN0eC5jCmluZGV4IGNjM2JmMmIzYmRiYzkuLjQ2NmI3MzAwZTIwOGUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3RjdHguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90Y3R4LmMKQEAgLTQzLDcgJiM0Mzs0Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAlyZXR1cm4gaW9fd3FfY3JlYXRlKGNvbmN1cnJlbmN5LCAmYW1wO2RhdGEpOwogfQogCi12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKJiM0Mzt2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCA9IHRzay0mZ3Q7aW9fdXJpbmc7CiAJc3RydWN0IGlvX3RjdHhfbm9kZSAqbm9kZTsKQEAgLTY3LDYgJiM0Mzs2NywxMSBAQCB2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIAkJa2ZyZWUodGN0eCk7CiAJCXRzay0mZ3Q7aW9fdXJpbmcgPSBOVUxMOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7ewomIzQzOwlpb191cmluZ19mcmVlX3RjdHgodHNrKTsKIAlpZiAodHNrLSZndDtpb191cmluZ19yZXN0cmljdCkgewogCQlpb19wdXRfYnBmX2ZpbHRlcnModHNrLSZndDtpb191cmluZ19yZXN0cmljdCk7CiAJCWtmcmVlKHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3QpOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdGN0eC5oIGIvaW9fdXJpbmcvdGN0eC5oCmluZGV4IDIzMTBkMmEwYzQ2ZDkuLjc2YWQxYWQ0NTk0ZWYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3RjdHguaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90Y3R4LmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBAIHZvaWQgaW9fdXJpbmdfZGVsX3RjdHhfbm9kZSh1bnNpZ25lZCBsb25nIGluZGV4KTsKIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpOwogaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZV9mcm9tX3N1Ym1pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7CiB2b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpOwomIzQzO3ZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogdm9pZCBpb191cmluZ191bnJlZ19yaW5nZmQodm9pZCk7CiBpbnQgaW9fcmluZ2ZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqX19hcmcsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGlvX3VyaW5nL2NhbmNlbC5jYCwgYGlvX3VyaW5nL3RjdHguY2AsIGFuZCBgaW9fdXJpbmcvdGN0eC5oYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYSByZXRhaW5lZCBgX19pb191cmluZ19mcmVlYC4gVGhlIGNydWNpYWwgY2hhbmdlIGlzIHRoYXQgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBub3cgY2FsbHMgYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYF9faW9fdXJpbmdfZnJlZShjdXJyZW50KWAuIFNvLCB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCB3b24mIzM5O3QgYmUgZnJlZWQgaW4gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBhbnltb3JlLgoKTm93LCBsZXQgbWUgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBGaXJzdCwgbGV0JiMzOTtzIHJlZnJlc2ggb24gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpbiBgaW9fdXJpbmcvY2FuY2VsLmNgLiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB0YXNrIGV4aXQgb3IgZXhlYy4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJZiBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGBleGVjYCwgc2hvdWxkIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCAqcmVhbGx5KiBiZSBmcmVlZD8gSXMgdGhhdCBhIHZhbGlkIHBvaW50IG9mIGZvY3VzPyBJdCBzb3VuZHMgbGlrZSB0aGVyZSYjMzk7cyBhIHBvc3NpYmlsaXR5IHRoYXQgaXQgc2hvdWxkbiYjMzk7dC4KCkFscmlnaHQsIGxldCBtZSBzdGVwIGJhY2sgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBncmFwaCB0byBldmFsdWF0ZSB0aGlzIGNoYW5nZS4gV2FpdCwgd2hlcmUgaXMgYF9faW9fdXJpbmdfZnJlZWAgY2FsbGVkICpmcm9tKiwgYmVzaWRlcyBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBBbmQgY29udmVyc2VseSwgd2hlcmUgaXMgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCBjYWxsZWQgKmZyb20qLCBjb21wYXJlZCB0byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBUaGlzIG1pZ2h0IGJlIHRoZSBjcml0aWNhbCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZS4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYF9faW9fdXJpbmdfZnJlZWAgYW5kIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb191cmluZ19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MTE6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTEyLXZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjktXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nIHx8IHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozMDpcdFx0X19pb191cmluZ19mcmVlKHRzayk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzEtfVxuLS1cbmlvX3VyaW5nL3RjdHguYz00Nj12b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy90Y3R4LmMtNzEtXG5pb191cmluZy90Y3R4LmM6NzI6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy90Y3R4LmMtNzMte1xuLS1cbmlvX3VyaW5nL3R3LmM9NDY9c3RhdGljIHZvaWQgaW9fZmFsbGJhY2tfdHcoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpXG4tLVxuaW9fdXJpbmcvdHcuYy00OC1cdC8qXG5pb191cmluZy90dy5jOjQ5Olx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVx1MDAzZXRhc2sgdmFsaWQgYW5kLCBhcyBfX2lvX3VyaW5nX2ZyZWUoKSBpc1xuaW9fdXJpbmcvdHcuYy01MC1cdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGNhbmNlbC5jYCBmaWxlLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZnVuY3Rpb24uIEdvdHRhIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGNhbmNlbGxhdGlvbnMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyBzdGF0ZSwgc3luY2hyb25pemF0aW9uLCBhbmQgdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgaW52YWxpZGF0aW5nIHN1Ym1pdHRlZCBJL08gcmVxdWVzdHMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgdGhlIHBvaW50IHdoZXJlIHdlIGNhbiBlbnN1cmUgYSBwcm9wZXIgYW5kIGVmZmljaWVudCBncmFjZWZ1bCBzaHV0ZG93biBvciBpbnRlcnJ1cHQuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYyBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBhIHRydWx5IHJvYnVzdCBhbmQgcGVyZm9ybWFudCBhcHBsaWNhdGlvbiBsZXZlcmFnaW5nIGBpb191cmluZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvY2FuY2VsLmM9NDM3PXZvaWQgX19pb191cmluZ19jYW5jZWwoYm9vbCBjYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTQzOS1cdGlvX3VyaW5nX3VucmVnX3JpbmdmZCgpO1xuaW9fdXJpbmcvY2FuY2VsLmM6NDQwOlx0aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoY2FuY2VsX2FsbCwgTlVMTCk7XG5pb191cmluZy9jYW5jZWwuYy00NDEtfVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTU3MT1zdGF0aWMgczY0IHRjdHhfaW5mbGlnaHQoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIGJvb2wgdHJhY2tlZClcbi0tXG5pb191cmluZy9jYW5jZWwuYy01ODEtICovXG5pb191cmluZy9jYW5jZWwuYzo1ODI6X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKVxuaW9fdXJpbmcvY2FuY2VsLmMtNTgzLXtcbi0tXG5pb191cmluZy9jYW5jZWwuaD0zMz1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5oLTM1LVx0XHRcdFx0XHQgYm9vbCBjYW5jZWxfYWxsLCBib29sIGlzX3NxcG9sbF90aHJlYWQpO1xuaW9fdXJpbmcvY2FuY2VsLmg6MzY6X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKTtcbmlvX3VyaW5nL2NhbmNlbC5oLTM3LV9fY29sZCBib29sIGlvX2NhbmNlbF9jdHhfY2Ioc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHZvaWQgKmRhdGEpO1xuLS1cbmlvX3VyaW5nL3NxcG9sbC5jPTI4ND1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL3NxcG9sbC5jLTQwNi1cbmlvX3VyaW5nL3NxcG9sbC5jOjQwNzpcdGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKHRydWUsIHNxZCk7XG5pb191cmluZy9zcXBvbGwuYy00MDgtXHRyY3VfYXNzaWduX3BvaW50ZXIoc3FkLVx1MDAzZXRocmVhZCwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENhbmNlbGxhdGlvbiBQYXRoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCB3aXRoIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuIEluc3RlYWQgb2YgdGhlIG9sZCBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYCwgaXQmIzM5O3Mgbm93IGNhbGxpbmcgYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYmVjYXVzZSB0aGUgb2xkIG1ldGhvZCwgYF9faW9fdXJpbmdfZnJlZWAsIHVzZWQgdG8gaGFuZGxlIGZyZWVpbmcgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLiBTbywgZWZmZWN0aXZlbHksIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2Agd29uJiMzOTt0IGJlIG1hbmFnaW5nIHRoYXQgbWVtb3J5IGFueW1vcmUuCgpIbW0sIHRoaXMgdHJpZ2dlcnMgYSBtZW50YWwgY2hhaW4gcmVhY3Rpb24uIExldCBtZSB0cmFjZSB0aGUgY2FsbHMuIFdoZXJlIGlzIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgdXNlZD8gSSBiZWxpZXZlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX2lvX3VyaW5nX2NhbmNlbGAuIEFuZCBgX19pb191cmluZ19jYW5jZWxgIGl0c2VsZiwgcmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGVpdGhlciBgaW9fdXJpbmdfdGFza19jYW5jZWxgIG9yLCBwb3RlbnRpYWxseSwgZnJvbSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGl0c2VsZj8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4gUmlnaHQsIGJlc3QgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmhgIHRvIHNlZSBob3cgYF9faW9fdXJpbmdfY2FuY2VsYCBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9fdXJpbmdfY2FuY2VsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW9fdXJpbmcuaC05LSNpZiBkZWZpbmVkKENPTkZJR19JT19VUklORylcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoxMDp2b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMTEtdm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xNz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZmlsZXNfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTE5LVx0aWYgKGN1cnJlbnQtXHUwMDNlaW9fdXJpbmcpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjA6XHRcdF9faW9fdXJpbmdfY2FuY2VsKGZhbHNlKTtcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yMS19XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX3Rhc2tfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI0LVx0aWYgKGN1cnJlbnQtXHUwMDNlaW9fdXJpbmcpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjU6XHRcdF9faW9fdXJpbmdfY2FuY2VsKHRydWUpO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI2LX1cbi0tXG5pb191cmluZy9jYW5jZWwuYz00MTQ9Ym9vbCBpb19tYXRjaF90YXNrX3NhZmUoc3RydWN0IGlvX2tpb2NiICpoZWFkLCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy00MzYtXG5pb191cmluZy9jYW5jZWwuYzo0Mzc6dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpXG5pb191cmluZy9jYW5jZWwuYy00Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBDYW5jZWxsYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIGNhbmNlbGxhdGlvbiBjb2RlLiBJIHNlZSB0aGF0IGBfX2lvX3VyaW5nX2NhbmNlbGAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBpb191cmluZ19maWxlc19jYW5jZWxgIGFuZCBgaW9fdXJpbmdfdGFza19jYW5jZWxgLiBNYWtlcyBzZW5zZSwgY292ZXJpbmcgYm90aCBmaWxlLXNwZWNpZmljIGFuZCB0YXNrLXJlbGF0ZWQgY2FuY2VsbGF0aW9ucy4gTm93LCBgaW9fdXJpbmdfdGFza19jYW5jZWxgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGdldHMgY2FsbGVkIGZyb20gYGRvX2V4aXRgIGFuZCBgYmVnaW5fbmV3X2V4ZWNgLiBUaGF0IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlLCBpdCBjb3VsZCBiZSBjYWxsZWQgZHVyaW5nIHByb2Nlc3MgdGVybWluYXRpb24uCgpIZXJlJiMzOTtzIHRoZSBiaXQgdGhhdCYjMzk7cyBidWdnaW5nIG1lLiBJZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgICp3ZXJlKiB0byBjYWxsIGBfX2lvX3VyaW5nX2ZyZWUoY3VycmVudClgLCBpdCB3b3VsZCBlbmQgdXAgZnJlZWluZyBgdHNrLSZndDtpb191cmluZ19yZXN0cmljdGAsIHdoaWNoIGlzIHRoZSByZXN0cmljdGlvbiBzZXQgZm9yIHRoaXMgdGFzay4gQnV0IGhhbmcgb24uLi4gdGhhdCBgdHNrLSZndDtpb191cmluZ19yZXN0cmljdGAgbWVtYmVyICpzaG91bGQqIG9ubHkgYmUgZnJlZWQgd2hlbiB0aGUgdGFzayBpdHNlbGYgaXMgZnJlZWQuIFRoYXQgaGFwcGVucyBsYXRlciwgcmlnaHQ/IElzbiYjMzk7dCBpdCBgaW9fdXJpbmdfZnJlZWAmIzM5O3Mgam9iLCB3aGljaCB0aGVuIGNhbGxzIGBfX2lvX3VyaW5nX2ZyZWVgPyBXZSBkb24mIzM5O3Qgd2FudCB0byBwcmVtYXR1cmVseSBmcmVlIHRoZSByZXN0cmljdGlvbi4KCkFscmlnaHQsIHNvIHRoZSBrZXkgaXM6IHdoZXJlICppcyogYGlvX3VyaW5nX2ZyZWVgIGNhbGxlZD8gSXMgaXQgd2l0aGluIGBmcmVlX3Rhc2tgIG9yIGEgc2ltaWxhciBsaWZlY3ljbGUgbWFuYWdlbWVudCBmdW5jdGlvbj8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGJhY2sgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgbGlmZXNwYW4gb2YgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGRhdGEuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY2FsbCBzaXRlcyBvZiBgaW9fdXJpbmdfZnJlZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfZnJlZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MTA9dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjExOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0xMi12b2lkIGlvX3VyaW5nX3VucmVnX3JpbmdmZCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX3Rhc2tfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI2LX1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoyNzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yOC17XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjktXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nIHx8IHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozMDpcdFx0X19pb191cmluZ19mcmVlKHRzayk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzEtfVxuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZmlsZXNfY2FuY2VsKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTQ1LX1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDo0NjpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC00Ny17XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NTgyPV9fY29sZCB2b2lkIGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKGJvb2wgY2FuY2VsX2FsbCwgc3RydWN0IGlvX3NxX2RhdGEgKnNxZClcbi0tXG5pb191cmluZy9jYW5jZWwuYy02NjItXHRcdC8qIGZvciBleGVjIGFsbCBjdXJyZW50JiMzOTtzIHJlcXVlc3RzIHNob3VsZCBiZSBnb25lLCBraWxsIHRjdHggKi9cbmlvX3VyaW5nL2NhbmNlbC5jOjY2MzpcdFx0aW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpO1xuaW9fdXJpbmcvY2FuY2VsLmMtNjY0LVx0fVxuLS1cbmlvX3VyaW5nL3RjdHguYz0xNj1zdGF0aWMgc3RydWN0IGlvX3dxICppb19pbml0X3dxX29mZmxvYWQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvdGN0eC5jLTQ1LVxuaW9fdXJpbmcvdGN0eC5jOjQ2OnZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuaW9fdXJpbmcvdGN0eC5jLTQ3LXtcbi0tXG5pb191cmluZy90Y3R4LmMtNzEtXG5pb191cmluZy90Y3R4LmM6NzI6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy90Y3R4LmMtNzMte1xuaW9fdXJpbmcvdGN0eC5jOjc0Olx0aW9fdXJpbmdfZnJlZV90Y3R4KHRzayk7XG5pb191cmluZy90Y3R4LmMtNzUtXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XG4tLVxuaW9fdXJpbmcvdGN0eC5oPTE0PXZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG5pb191cmluZy90Y3R4Lmg6MTU6dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW9fdXJpbmcvdGN0eC5oLTE2LVxuLS1cbmlvX3VyaW5nL3R3LmM9NDY9c3RhdGljIHZvaWQgaW9fZmFsbGJhY2tfdHcoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpXG4tLVxuaW9fdXJpbmcvdHcuYy00OC1cdC8qXG5pb191cmluZy90dy5jOjQ5Olx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVx1MDAzZXRhc2sgdmFsaWQgYW5kLCBhcyBfX2lvX3VyaW5nX2ZyZWUoKSBpc1xuaW9fdXJpbmcvdHcuYy01MC1cdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcbi0tXG5rZXJuZWwvZm9yay5jPTc4MT12b2lkIF9fcHV0X3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNzg3LVx0dW53aW5kX3Rhc2tfZnJlZSh0c2spO1xua2VybmVsL2ZvcmsuYzo3ODg6XHRpb191cmluZ19mcmVlKHRzayk7XG5rZXJuZWwvZm9yay5jLTc4OS1cdGNncm91cF90YXNrX2ZyZWUodHNrKTtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI2MTItYmFkX2ZvcmtfY2xlYW51cF9kZWxheWFjY3Q6XG5rZXJuZWwvZm9yay5jOjI2MTM6XHRpb191cmluZ19mcmVlKHApO1xua2VybmVsL2ZvcmsuYy0yNjE0LVx0ZGVsYXlhY2N0X3Rza19mcmVlKHApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYz0xNjQ9c3RhdGljIHZvaWQgZnJlZV9iYXRjaF9mZXRjaF9idWYoc3RydWN0IHVibGtfdGhyZWFkICp0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYy0xNjgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZW5yX2ZldGNoX2J1ZnM7IGkmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2JhdGNoLmM6MTY5Olx0XHRpb191cmluZ19mcmVlX2J1Zl9yaW5nKFx1MDAyNnQtXHUwMDNlcmluZywgdC1cdTAwM2VmZXRjaFtpXS5iciwgMSwgaSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2JhdGNoLmMtMTcwLVx0XHRtdW5sb2NrKHQtXHUwMDNlZmV0Y2hbaV0uZmV0Y2hfYnVmLCB0LVx1MDAzZWZldGNoW2ldLmZldGNoX2J1Zl9zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFJlc291cmNlIE1hbmFnZW1lbnQgaW4gVGFzayBMaWZlY3ljbGUqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBsaWZlY3ljbGUgb2YgYGlvX3VyaW5nYCByZXNvdXJjZXMgdGllZCB0byBhIHRhc2ssIGFuZCBzb21lIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpb3MgYXJlIHN0YXJ0aW5nIHRvIGp1bXAgb3V0IGF0IG1lLiBMZXQgbWUgc2VlLi4uIGBpb191cmluZ19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgX19wdXRfdGFza19zdHJ1Y3RgLCBhbmQgYWxzbyBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBTbywgaXQmIzM5O3MgdGllZCB0byB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlIHRhc2sgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBnZXRzIGludm9rZWQgZnJvbSBgZG9fZXhpdGAgYW5kIGBiZWdpbl9uZXdfZXhlY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSWYgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAqYWxzbyogY2FsbHMgYF9faW9fdXJpbmdfZnJlZWAsIGl0IHBvdGVudGlhbGx5IGZyZWVzIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCB3aGlsZSB0aGUgdGFzayBzdHJ1Y3R1cmUgaXRzZWxmIGlzIHN0aWxsIGFyb3VuZC4KCk5vdywgaWYgdGhhdCBoYXBwZW5zLCBhbmQgdGhlIHRhc2sgaXMgc3RpbGwgYWxpdmUsIHdoYXQgcHJldmVudHMgYGlvX3VyaW5nX2ZyZWVgIGZyb20gYmVpbmcgY2FsbGVkICphZ2FpbiogbGF0ZXIgZHVyaW5nIHRoZSBub3JtYWwgYF9fcHV0X3Rhc2tfc3RydWN0YCBwcm9jZXNzLCBjaGVja2luZyBhIHBvdGVudGlhbGx5IGZyZWVkIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YD8gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZSBmcmVlIG9uIG91ciBoYW5kcywgdGhhdCBkb2VzbiYjMzk7dCBzb3VuZCByaWdodC4KCkhhbmcgb24uLi4gTGV0IG1lIHRoaW5rLiBEb2VzbiYjMzk7dCBgX19pb191cmluZ19mcmVlYCBzZXQgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMYCAqYWZ0ZXIqIGZyZWVpbmcgdGhlIG1lbW9yeT8gQWhhISBUaGF0IHNob3VsZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgYWdhaW4gd2hlbiBgX19wdXRfdGFza19zdHJ1Y3RgIGlzIGNhbGxlZC4gT2theSwgSSBiZXR0ZXIgY2hlY2sgdGhlIGNvZGUgZm9yIGBfX2lvX3VyaW5nX2ZyZWVgIGluIGBpb191cmluZy90Y3R4LmNgIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLCBiZWNhdXNlIHRoaXMgaXMgbG9va2luZyBsaWtlIGEgcG90ZW50aWFsbHkgZGVsaWNhdGUgcmFjZSBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgX19pb191cmluZ19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MTE6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTEyLXZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuLS1cbmlvX3VyaW5nL3RjdHguYz00Nj12b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy90Y3R4LmMtNzEtXG5pb191cmluZy90Y3R4LmM6NzI6dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pb191cmluZy90Y3R4LmMtNzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmcvdGN0eC5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBpb191cmluZy90Y3R4LmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNzIuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbWlnaHQgaG9sZCBzb21lIGNydWNpYWwgZGV0YWlscyBJJiMzOTttIGFmdGVyLCByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBmaWVsZCYjMzk7cyByZWxldmFudCBjb25jZXB0LCBlLmcuLCB0aHJlYWQgY29udGV4dCBtYW5hZ2VtZW50LCBjb21wbGV0aW9uIHF1ZXVlIGhhbmRsaW5nLCBzdWJtaXNzaW9uIHJpbmcgaW50ZXJhY3Rpb24sIGV0Yy5dLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggW21lbnRpb24geW91ciByZWxldmFudCBleHBlcmllbmNlXSwgdGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIFttZW50aW9uIHRoZSBwcm9ibGVtL3RvcGljIHlvdSBhcmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmRdLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgW21lbnRpb24gc3BlY2lmaWMgc2lnbmFscyB5b3UgYXJlIGxvb2tpbmcgZm9yLCBlLmcuLCBob3cgdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQsIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBsb2NrcyBiZWluZyBhY3F1aXJlZCwgZXRjLl0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvdGN0eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiAgNjE6XHRcdFx0XHRicmVhaztcbiAgNjI6XHRcdFx0fVxuICA2MzpcdFx0XHRXQVJOX09OX09OQ0UodGN0eC1cdTAwM2Vpb193cSk7XG4gIDY0Olx0XHRcdFdBUk5fT05fT05DRSh0Y3R4LVx1MDAzZWNhY2hlZF9yZWZzKTtcbiAgNjU6XHRcbiAgNjY6XHRcdFx0cGVyY3B1X2NvdW50ZXJfZGVzdHJveShcdTAwMjZ0Y3R4LVx1MDAzZWluZmxpZ2h0KTtcbiAgNjc6XHRcdFx0a2ZyZWUodGN0eCk7XG4gIDY4Olx0XHRcdHRzay1cdTAwM2Vpb191cmluZyA9IE5VTEw7XG4gIDY5Olx0XHR9XG4gIDcwOlx0fVxuICA3MTpcdFxuICA3MjpcdHZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuICA3MzpcdHtcbiAgNzQ6XHRcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xuICA3NTpcdFx0aWYgKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xuICA3NjpcdFx0XHRpb19wdXRfYnBmX2ZpbHRlcnModHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbiAgNzc6XHRcdFx0a2ZyZWUodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbiAgNzg6XHRcdFx0dHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0ID0gTlVMTDtcbiAgNzk6XHRcdH1cbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0X19jb2xkIHN0cnVjdCBpb191cmluZ190YXNrICppb191cmluZ19hbGxvY190YXNrX2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuICA4MzpcdFx0XHRcdFx0XHRcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gIDg0Olx0e1xuICA4NTpcdFx0c3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHg7XG4gIDg2Olx0XHRpbnQgcmV0O1xuICA4NzpcdFxuICA4ODpcdFx0dGN0eCA9IGt6YWxsb2Nfb2JqKCp0Y3R4KTtcbiAgODk6XHRcdGlmICh1bmxpa2VseSghdGN0eCkpXG4gIDkwOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA5MTpcdFxuICA5MjpcdFx0cmV0ID0gcGVyY3B1X2NvdW50ZXJfaW5pdChcdTAwMjZ0Y3R4LVx1MDAzZWluZmxpZ2h0LCAwLCBHRlBfS0VSTkVMKTtcbiAgOTM6XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4gIDk0Olx0XHRcdGtmcmVlKHRjdHgpO1xuICA5NTpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuICA5NjpcdFx0fVxuICA5NzpcdFxuICA5ODpcdFx0dGN0eC1cdTAwM2Vpb193cSA9IGlvX2luaXRfd3Ffb2ZmbG9hZChjdHgsIHRhc2spO1xuICA5OTpcdFx0aWYgKElTX0VSUih0Y3R4LVx1MDAzZWlvX3dxKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIGBfX2lvX3VyaW5nX2ZyZWVgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCBhbmQgemVyb2luZyBvdXQgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLiBUaGF0IG1ha2VzIHNlbnNlLiBCZWZvcmUgdGhpcyBwYXRjaCwgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3YXMgY2FsbGluZyBgX19pb191cmluZ19mcmVlYCBvbiB0aGUgKmN1cnJlbnQqIHRhc2suIFNvLCB0aGF0IGNhbGwgdG8gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3b3VsZCBiZSBmcmVlaW5nIGFuZCBudWxsaW5nIG91dCBgdHNrLSZndDtpb191cmluZ19yZXN0cmljdGAgd2hpY2ggc2VlbXMgYSBiaXQgb2ZmLCBkb2VzbiYjMzk7dCBpdD8KClRoZSBraWNrZXIgaGVyZSBpcyB0aGF0IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZ2V0cyBjYWxsZWQsIGFzIGZhciBhcyBJIGNhbiBzZWUgZnJvbSBjb250ZXh0LCB3aXRoaW4gYW4gYGV4ZWN2ZWAgY2FsbC4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXM7IGEgcHJvY2VzcyBzaG91bGQgKm5vdCogYmUgbG9zaW5nIGl0cyBgaW9fdXJpbmdfcmVzdHJpY3RgIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGFuIGBleGVjdmVgIOKAkyB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGJhZCBuZXdzISBXaGF0ICppcyogYGlvX3VyaW5nX3Jlc3RyaWN0YD8gQmFzZWQgb24gdGhlIG5hbWluZywgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gQlBGIGZpbHRlcmluZyBmb3IgaW9fdXJpbmfigKYgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGZvciBgaW9fdXJpbmdfcmVzdHJpY3RgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb191cmluZ19yZXN0cmljdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjgte1xuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjI5Olx0aWYgKHRzay1cdTAwM2Vpb191cmluZyB8fCB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzAtXHRcdF9faW9fdXJpbmdfZnJlZSh0c2spO1xuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0zMj1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTMzLXtcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozNDpcdGlmICh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzUtXHRcdHJldHVybiBfX2lvX3VyaW5nX2ZvcmsodHNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEyMDAtXHRzdHJ1Y3QgaW9fdXJpbmdfdGFza1x0XHQqaW9fdXJpbmc7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTIwMTpcdHN0cnVjdCBpb19yZXN0cmljdGlvblx0XHQqaW9fdXJpbmdfcmVzdHJpY3Q7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTIwMi0jZW5kaWZcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD04MTI9c3RydWN0IGlvX3VyaW5nX3Byb2JlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MTktXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo4MjA6c3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uIHtcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTgyMS1cdF9fdTE2IG9wY29kZTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD04MzE9c3RydWN0IGlvX3VyaW5nX3Rhc2tfcmVzdHJpY3Rpb24ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTgzNC1cdF9fdTMyIHJlc3ZbM107XG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo4MzU6XHRfX0RFQ0xBUkVfRkxFWF9BUlJBWShzdHJ1Y3QgaW9fdXJpbmdfcmVzdHJpY3Rpb24sIHJlc3RyaWN0aW9ucyk7XG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MzYtfTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD05MzY9c3RydWN0IGlvX3VyaW5nX25hcGkge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1NS0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg6OTU2OiAqIGlvX3VyaW5nX3Jlc3RyaWN0aW9uLVx1MDAzZW9wY29kZSB2YWx1ZXNcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1Ny0gKi9cbi0tXG5pb191cmluZy9pb191cmluZy5jPTI5NzM9c3RhdGljIF9fY29sZCBpbnQgaW9fdXJpbmdfY3JlYXRlKHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zMDM3LVx0ICovXG5pb191cmluZy9pb191cmluZy5jOjMwMzg6XHRpZiAoY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MzAzOTpcdFx0aW9fY3R4X3Jlc3RyaWN0aW9uX2Nsb25lKGN0eCwgY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XG5pb191cmluZy9pb191cmluZy5jLTMwNDAtXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMTE9c3RhdGljIF9fY29sZCBpbnQgaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTEzLXtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTE0Olx0c3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uICpyZXM7XG5pb191cmluZy9yZWdpc3Rlci5jLTExNS1cdHNpemVfdCBzaXplO1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MjAxPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDgtXHQvKiBEaXNhbGxvdyBpZiB0YXNrIGFscmVhZHkgaGFzIHJlZ2lzdGVyZWQgcmVzdHJpY3Rpb25zICovXG5pb191cmluZy9yZWdpc3Rlci5jOjIwOTpcdGlmIChjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMTAtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMzctXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjIzODpcdGN1cnJlbnQtXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSByZXM7XG5pb191cmluZy9yZWdpc3Rlci5jLTIzOS1cdHJldHVybiAwO1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MjQyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjU4LVx0LyogSWYgbm8gdGFzayByZXN0cmljdGlvbnMgZXhpc3QsIHNldHVwIGEgbmV3IHNldCAqL1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNTk6XHRyZXMgPSBjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0O1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNjAtXHRpZiAoIXJlcykge1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjY3LVx0aWYgKHJldCkge1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNjg6XHRcdGlmIChyZXMgIT0gY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjY5LVx0XHRcdGtmcmVlKHJlcyk7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzEtXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjI3MjpcdGlmICghY3VycmVudC1cdTAwM2Vpb191cmluZ19yZXN0cmljdClcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjczOlx0XHRjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0ID0gcmVzO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzQtXHRyZXR1cm4gMDtcbi0tXG5pb191cmluZy90Y3R4LmM9NzI9dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW9fdXJpbmcvdGN0eC5jLTc0LVx0aW9fdXJpbmdfZnJlZV90Y3R4KHRzayk7XG5pb191cmluZy90Y3R4LmM6NzU6XHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XG5pb191cmluZy90Y3R4LmM6NzY6XHRcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuaW9fdXJpbmcvdGN0eC5jOjc3Olx0XHRrZnJlZSh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuaW9fdXJpbmcvdGN0eC5jOjc4Olx0XHR0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMO1xuaW9fdXJpbmcvdGN0eC5jLTc5LVx0fVxuLS1cbmlvX3VyaW5nL3RjdHguYz00MTA9aW50IF9faW9fdXJpbmdfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmlvX3VyaW5nL3RjdHguYy00MTEte1xuaW9fdXJpbmcvdGN0eC5jOjQxMjpcdHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzLCAqc3JjID0gdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0O1xuaW9fdXJpbmcvdGN0eC5jLTQxMy1cbmlvX3VyaW5nL3RjdHguYy00MTQtXHQvKiBEb24mIzM5O3QgbGVhdmUgaXQgZGFuZ2xpbmcgb24gZXJyb3IgKi9cbmlvX3VyaW5nL3RjdHguYzo0MTU6XHR0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMO1xuaW9fdXJpbmcvdGN0eC5jLTQxNi1cbi0tXG5pb191cmluZy90Y3R4LmMtNDIwLVxuaW9fdXJpbmcvdGN0eC5jOjQyMTpcdHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCA9IHJlcztcbmlvX3VyaW5nL3RjdHguYy00MjItXHRpb19yZXN0cmljdGlvbl9jbG9uZShyZXMsIHNyYyk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9NjIyPXN0cnVjdCBpb191cmluZ19wcm9iZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNjI5LVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg6NjMwOnN0cnVjdCBpb191cmluZ19yZXN0cmljdGlvbiB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02MzEtXHRfX3UxNiBvcGNvZGU7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9Njc5PXN0cnVjdCBpb191cmluZ19idWZfcmVnIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02ODctLypcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjY4ODogKiBpb191cmluZ19yZXN0cmljdGlvbi1cdTAwM2VvcGNvZGUgdmFsdWVzXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02ODktICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBpb191cmluZyBSZXN0cmljdGlvbiBGaXgqKgoKT2theSwgc28gYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBhIHRhc2stbGV2ZWwgc2V0dGluZyBmb3IgaW9fdXJpbmcsIGFuZCBpdCYjMzk7cyBjbG9uZWQgd2hlbiBhIHByb2Nlc3MgZm9ya3MuIFRoZSBrZXkgaXNzdWUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGBleGVjdmVgLiBJIHNlZSB0aGF0IHdoZW4gYSB0YXNrIGNhbGxzIGBleGVjdmVgLCB0aGUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBmdW5jdGlvbiBpcyBjYWxsZWQuIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxpbmcgYF9faW9fdXJpbmdfZnJlZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllczogYF9faW9fdXJpbmdfZnJlZWAgd2FzIGZyZWVpbmcgdGhlIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCBhbmQgc2V0dGluZyBpdCB0byBOVUxMLgoKTm93LCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgcmVkIGZsYWcgaW4gbXkgbWluZC4gSWYgYGV4ZWN2ZWAgY2xlYXJzIHRoZSByZXN0cmljdGlvbnMsIHRoZW4gYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHByb2dyYW0sIHRoZSB0YXNrIHdvdWxkIGJlIHJ1bm5pbmcgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb25zLiBCdXQgdGhlIHdob2xlICpwb2ludCogb2YgcmVzdHJpY3Rpb25zIGlzIHRvIGRlZmluZSwgYW5kICplbmZvcmNlKiwgbGltaXRhdGlvbnMgdGhhdCBwZXJzaXN0IGFjcm9zcyBgZXhlY3ZlYCwgcmlnaHQ/IE9yIHBlcmhhcHMgdGhleSBzaG91bGRuJiMzOTt0IGJlIGNsZWFyZWQgYmVjYXVzZSBgZXhlY3ZlYCBzaG91bGRuJiMzOTt0IGJ5cGFzcyByZXN0cmljdGlvbnMhCgpUaGF0JiMzOTtzIGl0ISBJZiBhIHRhc2sgc2V0cyB1cCByZXN0cmljdGlvbnMgYW5kIHRoZW4gY2FsbHMgYGV4ZWN2ZWAsIGJ1dCB0aG9zZSByZXN0cmljdGlvbnMgYXJlIGNsZWFyZWQgYnkgdGhlIGBleGVjdmVgIGNhbGwsIHRoZW4gdGhlIG5ldyBwcm9ncmFtIHdvdWxkIGJlIHJ1bm5pbmcgKndpdGhvdXQqIHRob3NlIHJlc3RyaWN0aW9ucy4gVGhhdCYjMzk7cyBhIGNsZWFyIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyB0aGlzIGV4YWN0IGJ1Zzogd2hlcmUgYGV4ZWN2ZWAgdW5pbnRlbnRpb25hbGx5IGNsZWFycyBgaW9fdXJpbmdfcmVzdHJpY3RgLiBUaGUgc29sdXRpb24/IEluc3RlYWQgb2YgdGhlIG9sZCwgaW5jb3JyZWN0IGNhbGwgdG8gYF9faW9fdXJpbmdfZnJlZShjdXJyZW50KWAgaW5zaWRlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIHRoZSBwYXRjaCByZXBsYWNlcyBpdCB3aXRoIGBpb191cmluZ19mcmVlX3RjdHgoY3VycmVudClgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBzZXR0aW5nIGlzIHByZXNlcnZlZCBhY3Jvc3MgdGhlIGBleGVjdmVgIGNhbGwuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBmdXp6aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBpb191cmluZyBsb2dpYyBmaXguIFdlIGNhbiBkZWZpbml0ZWx5IGZ1enogaXQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBhbmQgYGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza2Agc2luY2UgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzZXQgYGlvX3VyaW5nX3Jlc3RyaWN0YC4gQW5kLCBvZiBjb3Vyc2UsIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2Agd2hpY2ggaXMgdGhlIGZvY3VzIG9mIHRoZSBwYXRjaCBiZWNhdXNlIGl0IGdldHMgY2FsbGVkIGR1cmluZyBgZXhlY3ZlYC4gV2FpdCwgYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBpcyBjYWxsZWQgYnkgYGlvX3VyaW5nX3JlZ2lzdGVyYC4gT2theSwgZ290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTE2Nz1zdGF0aWMgX19jb2xkIGludCBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDAtXG5pb191cmluZy9yZWdpc3Rlci5jOjIwMTpzdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDIte1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MTAwMT1zdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDA5LVx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUkVTVFJJQ1RJT05TOlxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDEwOlx0XHRyZXR1cm4gaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2soYXJnLCBucl9hcmdzKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAxMS1cdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgaW9fdXJpbmcgUmVnaXN0cmF0aW9uIE1lY2hhbmljcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBpb191cmluZ19yZWdpc3RlcmAgZm9yIGEgbW9tZW50LiBSaWdodCwgbGV0IG1lIHNlZSwgSSBrbm93IHRoYXQgYElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlNgIGFuZCBgSU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVJgIGFyZSB0aGUgb3Bjb2RlcyB1c2VkIHdpdGhpbiB0aGF0IGNhbGwsIHRoYXQgbWFrZXMgc2Vuc2UuIEhtbSwgSSBoYXZlIGEgZmVlbGluZyB0aGVyZSYjMzk7cyBhIHNwZWNpYWwgY2FzZSwgYSBudWFuY2UgaGVyZSDigJMgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYD8gTm93IHdoZXJlIGRvZXMgdGhhdCBjb21lIGludG8gcGxheS4uLiBBaCwgSSBzZWVtIHRvIHJlbWVtYmVyIGl0JiMzOTtzIHVzZWQgd2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yLCBgZmRgLCBpcyBzZXQgdG8gYC0xYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXNuJiMzOTt0IGl0PyBCZXR0ZXIgY2hlY2sgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcGFydGljdWxhcnMuIEkgd2FudCB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcmVnaXN0ZXIuYz05ODA9c3RhdGljIGludCBpb191cmluZ19yZWdpc3Rlcl9zZW5kX21zZ19yaW5nKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwMC0gKi9cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAwMTpzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMDItXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTEwMTc9U1lTQ0FMTF9ERUZJTkU0KGlvX3VyaW5nX3JlZ2lzdGVyLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9wY29kZSxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMzEtXHRpZiAoZmQgPT0gLTEpXG5pb191cmluZy9yZWdpc3Rlci5jOjEwMzI6XHRcdHJldHVybiBpb191cmluZ19yZWdpc3Rlcl9ibGluZChvcGNvZGUsIGFyZywgbnJfYXJncyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTEwMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzY4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGlvX3VyaW5nIFJlc3RyaWN0aW9ucyBhbmQgQlBGIEZpbHRlciBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGUgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXN0ZW0gY2FsbCwgd2hlbiB1c2VkIHdpdGggYGZkID09IC0xYCwgY2FsbHMgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCwgd2hpY2ggdWx0aW1hdGVseSBsZWFkcyB0byBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgIGJlaW5nIGludm9rZWQuIFRoaXMgbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggYWltcyB0byBwcmV2ZW50IGBpb191cmluZ19yZXN0cmljdGAgZnJvbSBiZWluZyBmcmVlZCBkdXJpbmcgYW4gYGV4ZWN2ZWAgY2FsbC4gTXkgZnV6emluZyBzdHJhdGVneSB0aGVuIG5lZWRzIHRvIGJlIHByZXR0eSBzcGVjaWZpYyB0byB0ZXN0IHRoaXM6CgoxLiAgRmlyc3QsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBpb191cmluZ19yZWdpc3RlcmAgd2l0aCBgZmQgPSAtMWAgYW5kIGVpdGhlciB0aGUgYElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlNgIG9yIGBJT1JJTkdfUkVHSVNURVJfQlBGX0ZJTFRFUmAgb3Bjb2RlIHRvIHNldCBgY3VycmVudC0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLgoyLiAgTmV4dCwgSSBuZWVkIHRvIHRyaWdnZXIgYW4gYGV4ZWN2ZWAuCjMuICBBZnRlciB0aGUgYGV4ZWN2ZWAsIHRoZSAqbmV3KiBwcm9ncmFtIHdpbGwgaG9wZWZ1bGx5IHN0aWxsIGhhdmUgYWNjZXNzIHRvIHRoYXQgYGN1cnJlbnQtJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCBjb250ZXh0Lgo0LiAgRmluYWxseSwgSSBjYW4gZWl0aGVyIHRyeSB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiB0aGF0ICpzaG91bGQqIGJlIHJlc3RyaWN0ZWQsIG9yIEkgY2FuIGp1c3QgZXhpdCB0aGUgcHJvZ3JhbSBhbmQgbGV0IGBfX2lvX3VyaW5nX2ZyZWVgIGNsZWFuIHRoaW5ncyB1cC4KClRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCB0YXJnZXQgYXJlOiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgLCBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCwgYGlvX3VyaW5nX2ZyZWVfdGN0eGAsIGFuZCBgX19pb191cmluZ19mcmVlYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgIGFuZCBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBhcmUgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBCdXQgd2FpdCwgdGhlIGd1aWRlbGluZXMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gRG9lcyB0aGF0IG1lYW4gSSBzaG91bGQgYmUgdXNpbmcgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCBvciBgc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYD8gQWN0dWFsbHksIGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAgaXMgYWxzbyBzdGF0aWMhIE9rYXksIGxldCBtZSBjaGVjayB0aGUgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXNjYWxsIGRpcmVjdGx5LiBBaCwgdGhhdCYjMzk7cyBlaXRoZXIgYF9feDY0X3N5c19pb191cmluZ19yZWdpc3RlcmAgb3Igc2ltcGx5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIHRoYXQmIzM5O3MgYmV0dGVyLgoKQSBxdWljayBjaGVjayBvbiB0aGUgb3RoZXIgb25lczogYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpcyBub24tc3RhdGljLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCBpcyBub24tc3RhdGljLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAgaXMgbm9uLXN0YXRpYyB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcmVmZXIgdG8gYGlvX3VyaW5nL3RjdHguY2AgbGF0ZXIgdG8gY2hlY2sgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy90Y3R4LmM9MTY9c3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3RjdHguYy00NS1cbmlvX3VyaW5nL3RjdHguYzo0Njp2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmlvX3VyaW5nL3RjdHguYy00Ny17XG4tLVxuaW9fdXJpbmcvdGN0eC5oPTE0PXZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG5pb191cmluZy90Y3R4Lmg6MTU6dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuaW9fdXJpbmcvdGN0eC5oLTE2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBpb191cmluZyBTeW1ib2wgUmVzb2x1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3ltYm9scyByZWxhdGVkIHRvIGBpb191cmluZ2AgYW5kIHRyeWluZyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgb25lcy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBuZWl0aGVyIGlzIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuIFRoYXQgbWVhbnMgdGhlc2UgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgbXkgZm9jdXMuCgpJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYF9feDY0X3N5c19pb191cmluZ19yZWdpc3RlcmAgb3IgcG90ZW50aWFsbHkganVzdCBgc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBhcyBhIGZvY3VzIHN5bWJvbCwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYHN5c19pb191cmluZ19yZWdpc3RlcmAgaXMgdXN1YWxseSBkZWZpbmVkIHVzaW5nIGBTWVNDQUxMX0RFRklORTQoLi4uKWAuIEluY2x1ZGluZyBpdCBhZGRzIHNvbWUgY29tcGxleGl0eSB0aGF0IEkgY2FuIGF2b2lkLgoKVGhlcmVmb3JlLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCBwYXRoIGlzIHRvIGNvbmNlbnRyYXRlIG9uIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSwgbm9uLXN0YXRpYyBzeW1ib2xzIHRoYXQmIzM5O2xsIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4KCk5leHQsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBkZXBlbmRlbmN5IG9uIHNwZWNpZmljIGNvbmZpZ3MsIGxpa2UgYENPTkZJR19JT19VUklOR2AuIFRpbWUgdG8gZGl2ZSBpbnRvIGBpbml0L0tjb25maWdgIG9yIHBvc3NpYmx5IGBpb191cmluZy9LY29uZmlnYCB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTctXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDc1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gaW9fdXJpbmcmIzM5O3MgQlBGIFJlc3RyaWN0aW9ucyoqCgpPa2F5LCBzbyBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUga2V5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaW9fdXJpbmcsIG9idmlvdXNseS4gQnV0IEkganVzdCBoYWQgYSBmbGFzaCBvZiBpbnNpZ2h0IOKAkyB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCByZXN0cmljdGluZyBpdHMgY2FwYWJpbGl0aWVzIHdpdGggQlBGIGZpbHRlcnM/IFllcywgdGhhdCYjMzk7cyBpdCEgYGlvX3VyaW5nX3Jlc3RyaWN0YCByaW5ncyBhIGJlbGwsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuCgpSaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBob3cgQlBGIGZpbHRlcnMgYXJlIGluY29ycG9yYXRlZCBkdXJpbmcgcmVnaXN0cmF0aW9uLCBzbyBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBzb3VuZHMgbGlrZSB0aGUgZnVuY3Rpb24gdG8gZXhhbWluZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbXBsZW1lbnQgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTIwMT1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjQxLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNDI6c3RhdGljIGludCBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG5pb191cmluZy9yZWdpc3Rlci5jLTI0My17XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDAxPXN0YXRpYyBpbnQgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQodW5zaWduZWQgaW50IG9wY29kZSwgdm9pZCBfX3VzZXIgKmFyZyxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMTEtXHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDEyOlx0XHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTEwMTMtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTM2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCB0aGVzZSB3ZXJlIG15IG93biB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBhbmQgdGhlIGBDT05GSUdfSU9fVVJJTkdfQlBGYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgZGVwZW5kZW5jeSB0aGVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBpcyBjcml0aWNhbCBmb3IgW2luc2VydCByZWFzb24gcmVsZXZhbnQgdG8geW91ciBmaWVsZCwgZS5nLiwgY29kZSBtYWludGFpbmFiaWxpdHksIGZlYXR1cmUgZW5hYmxlbWVudCwgcGxhdGZvcm0gY29tcGF0aWJpbGl0eV0uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGNvbmZpZyBvcHRpb24gYWN0cyBhcyBhIGdhdGluZyBtZWNoYW5pc20gZm9yIHRoZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgdGFzay4gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFtlLmcuLCBidWlsZCBjb25maWd1cmF0aW9ucywgZmVhdHVyZSBmbGFncywgb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHldLiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcmV2aWV3IGFueSByZWxldmFudCBLY29uZmlnIGVudHJpZXMsIGFuZCBiZSBzdXJlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSU9fVVJJTkdfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICYjNDM7PSBtb2NrX2ZpbGUub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICYjNDM7PSBicGYtb3BzLm9cbi0tXG5pb191cmluZy9icGYtb3BzLmg9MTM9c3RydWN0IGlvX3VyaW5nX2JwZl9vcHMge1xuLS1cbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cbmlvX3VyaW5nL2JwZi1vcHMuaDoyMDojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL2JwZi1vcHMuaC0yMS12b2lkIGlvX3VucmVnaXN0ZXJfYnBmX29wcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTYtXG5pb191cmluZy9icGZfZmlsdGVyLmg6NzojaWZkZWYgQ09ORklHX0lPX1VSSU5HX0JQRlxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTgtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb19icGZfZmlsdGVyX2Nsb25lKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqZHN0LFxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00NS19XG5pb191cmluZy9icGZfZmlsdGVyLmg6NDY6I2VuZGlmIC8qIENPTkZJR19JT19VUklOR19CUEYgKi9cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGVCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYGlvX3VyaW5nYCBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCBlQlBGLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSBmb3IgYElPX1VSSU5HX0JQRmAgdGhlcmUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBkb2VzIGFuZCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRoYXQgd2lsbCBkaWN0YXRlIGhvdyBJIHB1cnN1ZSB0aGlzIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklOR19CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvS2NvbmZpZz02PWNvbmZpZyBJT19VUklOR19aQ1JYXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBkZWZfYm9vbCB5YCBjb25kaXRpb25hbCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgSU9fVVJJTkdgIGFuZCBgQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIGZvciBgaW9fdXJpbmdgIHRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3kgbG9naWMuIFRoaXMgc2V0dXAgc2NyZWFtcyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIEkvTyBhbmQgQmVya2VsZXkgUGFja2V0IEZpbHRlciBzeXNjYWxsIGZlYXR1cmVzLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlLCBvciB0aGF0IHNvbWUgc3BlY2lmaWMgQlBGIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgbGV2ZXJhZ2VkIG9yIGludGVncmF0ZWQgaW50byB0aGUgYGlvX3VyaW5nYCBkZXNpZ24gaW4gYSBjb25kaXRpb25hbCBtYW5uZXIuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHMsIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IHRoZXNlIHR3byBmZWF0dXJlcyBpbnRlcmFjdCB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW50byB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUgYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzISBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSB0aGVyZSwgb3IgcGVyaGFwcyBhIG1vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgaW52b2x2aW5nIGZlYXR1cmUgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgaW9fdXJpbmcgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSU9fVVJJTkdfWkNSWFxuICAgNzpcdFx0ZGVmX2Jvb2wgeVxuICAgODpcdFx0ZGVwZW5kcyBvbiBJT19VUklOR1xuICAgOTpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgMTA6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAxMTpcdFx0ZGVwZW5kcyBvbiBORVRfUlhfQlVTWV9QT0xMXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIElPX1VSSU5HX0JQRlxuICAxNDpcdFx0ZGVmX2Jvb2wgeVxuICAxNTpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgMTY6XHRcdGRlcGVuZHMgb24gTkVUXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbiAgMTk6XHRcdGRlZl9ib29sIHlcbiAgMjA6XHRcdGRlcGVuZHMgb24gSU9fVVJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgSU9fVVJJTkdfQlBGYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYm90aCBgQlBGYCBhbmQgYE5FVGAsIHNvIHRob3NlIGFyZSBtdXN0LWhhdmVzLiBOYXR1cmFsbHksIEkgc2hvdWxkIGFsc28gZW5zdXJlIHRoYXQgSSBoYXZlIGBJT19VUklOR2AsIGFuZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQgYXMgd2VsbC4gV2FpdCBhIHNlY29uZCwgSSByZWNhbGwgc2VlaW5nIGBJT19VUklOR2AgZGVmaW5lZCBzb21ld2hlcmUgaW4gYGluaXQvS2NvbmZpZ2Agd2hlbiBJIHdhcyBsb29raW5nIGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgaW4gYGluaXQvS2NvbmZpZ2AgZm9yIHRoZSBgSU9fVVJJTkdgIG9wdGlvbnMgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTU6XHRcdCAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nXG4xOTE2Olx0XHQgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLlxuMTkxNzpcdFxuMTkxODpcdGNvbmZpZyBJT19VUklOR1xuMTkxOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbjE5MjA6XHRcdHNlbGVjdCBJT19XUVxuMTkyMTpcdFx0ZGVmYXVsdCB5XG4xOTIyOlx0XHRoZWxwXG4xOTIzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcbjE5MjQ6XHRcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENhbmNlbCBMb2dpYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGJ1ZyB3aXRoaW4gYGlvX3VyaW5nYCByZWxhdGVkIHRvIGhvdyBjYW5jZWxsYXRpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBleGVjdmVgLiBJIHNlZSB0aGF0IGBJT19VUklOR2AgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwYXRjaCB0b3VjaGVzIGBpb191cmluZy9jYW5jZWwuY2AgYW5kIGBpb191cmluZy90Y3R4LmNgLCBpbW1lZGlhdGVseSByYWlzaW5nIG15IGFudGVubmEgcmVnYXJkaW5nIHRhc2sgY29udGV4dCBhbmQgY2FuY2VsbGF0aW9uIG9wZXJhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgZml4IGxpZXMgaW4gY2hhbmdpbmcgaG93IGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YCBpcyBoYW5kbGVkIHdoZW4gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpcyBjYWxsZWQuIEl0IHNlZW1zIHRoYXQgcHJldmlvdXNseSwgZHVyaW5nIGBleGVjdmVgLCB0aGUgZ2VuZXJpYyBjYW5jZWwgZnVuY3Rpb24gd291bGQgZXJyb25lb3VzbHkgZnJlZSB0aGlzIHJlc3RyaWN0aW9uIHVzaW5nIGBfX2lvX3VyaW5nX2ZyZWUoY3VycmVudClgLiBUaGlzIGhhcyBub3cgYmVlbiByZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBgaW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpYCwgd2hpY2ggaW50ZW50aW9uYWxseSAqZG9lc24mIzM5O3QqIGZyZWUgYHRzay0mZ3Q7aW9fdXJpbmdfcmVzdHJpY3RgLCBidXQgaW5zdGVhZCBmcmVlcyB0aGUgb3RoZXIgY29udGV4dCB2YXJpYWJsZXMuIFRoaXMgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBiZWhhdmlvciwgcHJldmVudGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBtZW1vcnkgY29ycnVwdGlvbi4KCk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCwgYGlvX3VyaW5nX2ZyZWVfdGN0eGAsIGFuZCBgX19pb191cmluZ19mcmVlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGFyZSBiZWhhdmluZyBhcyBleHBlY3RlZCBpbiB0aGlzIG5ldyBmbG93LgoKRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBUaGUgY2FsbHN0YWNrIGZyb20gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBsb29rcyBzb2xpZC4gSXQmIzM5O3MgcmVhY2hlZCB0aHJvdWdoIGBfX2lvX3VyaW5nX2NhbmNlbGAsIHRoZW4gYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCwgYW5kIGZpbmFsbHkgZnJvbSBgYmVnaW5fbmV3X2V4ZWNgIGFuZCBgZG9fZXhpdGAuIFllcCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdGhvc2Uga2V5IHByb2Nlc3MgbGlmZWN5Y2xlIHBvaW50cy4KClRoZW4sIHRoZXJlIGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMuIGBpb191cmluZ19mcmVlX3RjdHhgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIG9yIHJhdGhlciwgdGhlIG9sZCBmdW5jdGlvbiB3aXRoIGEgbmV3IG5hbWUsIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgdGhlIG9yaWdpbmFsIGBfX2lvX3VyaW5nX2ZyZWVgIGhhcyBiZWNvbWUgYSB3cmFwcGVyIG5vdywgY2FsbGluZyBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgdGhlbiBoYW5kbGluZyB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBjbGVhbnVwIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiByZXNwb25zaWJpbGl0eS4gQm90aCBhcmUgbm9uLXN0YXRpYzsgdGhleSBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIHRob3JvdWdobHkgYW5kIEkgc2hvdWxkIGJlIHRlc3RpbmcgYm90aC4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2Agbm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJdCYjMzk7cyBkZWNsYXJlZCBgX19jb2xkYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgY2FuY2VsbGF0aW9uIGlzbiYjMzk7dCBhIGhvdCBwYXRoLiBJdCYjMzk7cyBhbHNvIG5vdCBzdGF0aWMuIEdvb2QuCgpJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBpcyBjYWxsZWQgYW55d2hlcmUgZWxzZS4gQWgsIHllcywgaXQgaXMgYWxzbyBjYWxsZWQgYnkgYGlvX3NxX3RocmVhZGAgaW4gYGlvX3VyaW5nL3NxcG9sbC5jYC4gSSB3aWxsIGtlZXAgdGhhdCBpbiBtaW5kLgoKU28sIHRoZSBmb2N1cyBpcyBkZWZpbml0aXZlbHkgb246IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuCgpJbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYElPX1VSSU5HYCwgYEJQRmAsIGFuZCBgTkVUYCB3aWxsIGJlIG5lY2Vzc2FyeS4gYElPX1VSSU5HX0JQRmAgc2VlbXMgdG8gYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGBCUEZgIGFuZCBgTkVUYCBhcmUgc2V0LCBzbyB0aGF0JiMzOTtzIG5vdCBzb21ldGhpbmcgdG8gc3BlY2lmeSBleHBsaWNpdGx5LiBIb3dldmVyLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBpb191cmluZ19yZXN0cmljdGAgaXMgZGVmaW5lZCByZWdhcmRsZXNzIG9mIHRoZSBCUEYgZmlsdGVyIGF2YWlsYWJpbGl0eS4gSWYgaXQgaXMgb25seSBkZWZpbmVkIGJlaGluZCBgQ09ORklHX0lPX1VSSU5HYCwgdGhlbiBJIGNhbiBqdXN0IHZlcmlmeSBgSU9fVVJJTkdgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHdpdGggYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0IHNob3VsZCBjbGVhciB1cCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JlZ2lzdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdFx0XHRjdHgtXHUwMDNlaW50X2ZsYWdzIHw9IElPX1JJTkdfRl9PUF9SRVNUUklDVEVEO1xuIDE5NjpcdFx0aWYgKGN0eC1cdTAwM2VyZXN0cmljdGlvbnMucmVnX3JlZ2lzdGVyZWQpXG4gMTk3Olx0XHRcdGN0eC1cdTAwM2VpbnRfZmxhZ3MgfD0gSU9fUklOR19GX1JFR19SRVNUUklDVEVEO1xuIDE5ODpcdFx0cmV0dXJuIDA7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG4gMjAyOlx0e1xuIDIwMzpcdFx0c3RydWN0IGlvX3VyaW5nX3Rhc2tfcmVzdHJpY3Rpb24gX191c2VyICp1cmVzID0gYXJnO1xuIDIwNDpcdFx0c3RydWN0IGlvX3VyaW5nX3Rhc2tfcmVzdHJpY3Rpb24gdHJlcztcbiAyMDU6XHRcdHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzO1xuIDIwNjpcdFx0aW50IHJldDtcbiAyMDc6XHRcbiAyMDg6XHRcdC8qIERpc2FsbG93IGlmIHRhc2sgYWxyZWFkeSBoYXMgcmVnaXN0ZXJlZCByZXN0cmljdGlvbnMgKi9cbiAyMDk6XHRcdGlmIChjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxuIDIxMDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDIxMTpcdFx0LypcbiAyMTI6XHRcdCAqIFNpbWlsYXIgdG8gc2VjY29tcCwgZGlzYWxsb3cgc2V0dGluZyBhIGZpbHRlciBpZiB0YXNrX25vX25ld19wcml2c1xuIDIxMzpcdFx0ICogaXMgZmFsc2UgYW5kIHdlJiMzOTtyZSBub3QgQ0FQX1NZU19BRE1JTi5cbiAyMTQ6XHRcdCAqL1xuIDIxNTpcdFx0aWYgKCF0YXNrX25vX25ld19wcml2cyhjdXJyZW50KSBcdTAwMjZcdTAwMjZcbiAyMTY6XHRcdCAgICAhbnNfY2FwYWJsZV9ub2F1ZGl0KGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0FETUlOKSlcbiAyMTc6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gMjE4Olx0XHRpZiAobnJfYXJncyAhPSAxKVxuIDIxOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMjA6XHRcbiAyMjE6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0cmVzLCBhcmcsIHNpemVvZih0cmVzKSkpXG4gMjIyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKHRyZXMuZmxhZ3MpXG4gMjI1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIyNjpcdFx0aWYgKCFtZW1faXNfemVybyh0cmVzLnJlc3YsIHNpemVvZih0cmVzLnJlc3YpKSlcbiAyMjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjI4Olx0XG4gMjI5Olx0XHRyZXMgPSBremFsbG9jX29iaigqcmVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIDIzMDpcdFx0aWYgKCFyZXMpXG4gMjMxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIzMjpcdFxuIDIzMzpcdFx0cmV0ID0gaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHVyZXMtXHUwMDNlcmVzdHJpY3Rpb25zLCB0cmVzLm5yX3JlcywgcmVzKTtcbiAyMzQ6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IEkgY2FuIG1ha2Ugb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBgaW9fcHV0X2JwZl9maWx0ZXJzYCBpbiBgaW9fdXJpbmdgKioKCkhtbSwgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoaXMgYmVoYXZpb3IgaXMgdGllZCB0byBgQ09ORklHX0lPX1VSSU5HX0JQRmAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBhcHBlYXJzIHRvIGJlIGluaGVyZW50bHkgcGFydCBvZiB0aGUgYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGNvZGUgYmFzZS4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLgoKTm93LCBhIGJlbGwganVzdCB3ZW50IG9mZi4gV2hlcmUgKmlzKiBgaW9fcHV0X2JwZl9maWx0ZXJzYCBhY3R1YWxseSB1c2VkPyBBaCwgcmlnaHQuIEl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYF9faW9fdXJpbmdfZnJlZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggYW5kIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCBtZSB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoYXQgc3BlY2lmaWMgcm91dGluZSBpcyBjYWxsZWQgd2l0aGluIHRoZSBsYXJnZXIgZnJlZWluZyBwcm9jZXNzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBpbnRlcnByZXRpbmcgdGhlIHNpZ25pZmljYW5jZSBvZiBpdHMgZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19wdXRfYnBmX2ZpbHRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvYnBmX2ZpbHRlci5jPTk3PXN0YXRpYyB2b2lkIGlvX2ZyZWVfYnBmX2ZpbHRlcnMoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xMzgtXG5pb191cmluZy9icGZfZmlsdGVyLmM6MTM5OnN0YXRpYyB2b2lkIF9faW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19icGZfZmlsdGVycyAqZmlsdGVycylcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDAte1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDQtXG5pb191cmluZy9icGZfZmlsdGVyLmM6MTQ1OnZvaWQgaW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTE0Ni17XG5pb191cmluZy9icGZfZmlsdGVyLmMtMTQ3LVx0aWYgKHJlcy1cdTAwM2VicGZfZmlsdGVycylcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzoxNDg6XHRcdF9faW9fcHV0X2JwZl9maWx0ZXJzKHJlcy1cdTAwM2VicGZfZmlsdGVycyk7XG5pb191cmluZy9icGZfZmlsdGVyLmMtMTQ5LX1cbi0tXG5pb191cmluZy9icGZfZmlsdGVyLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgaW9fYnBmX2ZpbHRlcnMgKmlvX2JwZl9maWx0ZXJfY293KHN0cnVjdCBpb19yZXN0cmljdGlvbiAqc3JjKVxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMDUtXHRyY3VfcmVhZF91bmxvY2soKTtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMDY6XHRfX2lvX3B1dF9icGZfZmlsdGVycyhmaWx0ZXJzKTtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0zMDctXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0zNTk9aW50IGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXIoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMsXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQxNi1cdGlmIChvbGRfZmlsdGVycykge1xuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQxNzpcdFx0X19pb19wdXRfYnBmX2ZpbHRlcnMob2xkX2ZpbHRlcnMpO1xuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQxOC1cdFx0cmVzLVx1MDAzZWJwZl9maWx0ZXJzX2NvdyA9IGZhbHNlO1xuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00NTItXHRpZiAoZmlsdGVycyAhPSByZXMtXHUwMDNlYnBmX2ZpbHRlcnMpXG5pb191cmluZy9icGZfZmlsdGVyLmM6NDUzOlx0XHRfX2lvX3B1dF9icGZfZmlsdGVycyhmaWx0ZXJzKTtcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00NTQtZXJyX3Byb2c6XG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTExPWludCBpb19yZWdpc3Rlcl9icGZfZmlsdGVyKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzLFxuLS1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xMy1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDoxNDp2b2lkIGlvX3B1dF9icGZfZmlsdGVycyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcyk7XG5pb191cmluZy9icGZfZmlsdGVyLmgtMTUtXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oPTM0PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX3J1bl9icGZfZmlsdGVycyhzdHJ1Y3QgaW9fYnBmX2ZpbHRlciBfX3JjdSAqKmZpbHRlcnMsXG4tLVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTM4LX1cbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDozOTpzdGF0aWMgaW5saW5lIHZvaWQgaW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzKVxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTQwLXtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIxNjM9c3RhdGljIF9fY29sZCB2b2lkIGlvX3JpbmdfY3R4X2ZyZWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjAzLVx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMjA0Olx0aW9fcHV0X2JwZl9maWx0ZXJzKFx1MDAyNmN0eC1cdTAwM2VyZXN0cmljdGlvbnMpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjA1LVxuLS1cbmlvX3VyaW5nL3RjdHguYz03Mj12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pb191cmluZy90Y3R4LmMtNzUtXHRpZiAodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XG5pb191cmluZy90Y3R4LmM6NzY6XHRcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuaW9fdXJpbmcvdGN0eC5jLTc3LVx0XHRrZnJlZSh0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI2MwoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA2NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIGlvX3VyaW5nIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSB0aGlua2luZy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCBkdXJpbmcgYGV4ZWN2ZWAuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIHdhcyBpbmNvcnJlY3RseSBmcmVlaW5nIGB0c2stJmd0O2lvX3VyaW5nX3Jlc3RyaWN0YC4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBpbnRlZ3JpdHkgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBkdXJpbmcgcHJvY2VzcyB0cmFuc2l0aW9ucy4KCkluaXRpYWxseSwgSSBsb29rZWQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgaW9fcHV0X2JwZl9maWx0ZXJzYC4gSSByZWFsaXplZCB0aGF0IHRoZSBgaW9fcHV0X2JwZl9maWx0ZXJzYCBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgaW9fdXJpbmcvYnBmX2ZpbHRlci5jYCwgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lPX1VSSU5HX0JQRmAgaXMgc2V0LiBJZiBub3QsIGl0JiMzOTtzIGp1c3QgYW4gaW5saW5lIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIGBDT05GSUdfSU9fVVJJTkdgIGlzIHRoZSBiYXNlbGluZSBuZWVkZWQuIEhvd2V2ZXIsIHRvIGZ1bGx5IGV4ZXJjaXNlIGFuZCB0ZXN0IHRoZSBCUEYgZmlsdGVyIGNvbXBvbmVudHMsIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBCUEZgIGFuZCBgTkVUYCwgaW4gYWRkaXRpb24gdG8gYElPX1VSSU5HYCwgdG8gZW5zdXJlIGBJT19VUklOR19CUEZgIGlzIGVuYWJsZWQuCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQga2V5IHN5bWJvbHM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGNvdWxkIHJldmVhbCBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCwgYGlvX3VyaW5nX2ZyZWVfdGN0eGAsIGBfX2lvX3VyaW5nX2ZyZWVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGJ1Z2ZpeCBhbmQgYXJlIGNyaXRpY2FsIGZvciB0ZXN0aW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYElPX1VSSU5HYCwgYEJQRmAsIGBORVRgIC0gVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGVzc2VudGlhbCB0byBlbmFibGUgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIGluY2x1ZGluZyB0aGUgQlBGIGZpbHRlcmluZywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgYnVnIHNjZW5hcmlvIGFuZCB0ZXN0IGl0cyBmaXguCiogICAqKlJlYXNvbmluZzoqKiBUaGUgYnVnIGZpeCBpbnZvbHZlcyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBpb191cmluZ19yZXN0cmljdGAgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uIHRyYW5zaXRpb25zLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgY29ycmVjdGx5IHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAgY2FsbHMgYnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBtb2RpZnlpbmcgdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMuCgpJIGNvbnNpZGVyZWQgd2hldGhlciBgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2tgIGFuZCBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCB3b3VsZCBiZSBzdWl0YWJsZSBhcyBmb2N1cyBzeW1ib2xzLCBzaW5jZSB0aGV5IHNldCBgaW9fdXJpbmdfcmVzdHJpY3RgLiBIb3dldmVyLCB0aGV5IGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGhhcmRlciB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZWlyIGNhbGxpbmcgc3ltYm9sLCBgaW9fdXJpbmdfcmVnaXN0ZXJgIGlzIGRlZmluZWQgdmlhIGBTWVNDQUxMX0RFRklORTRgLCBzbyB0aGUgYWN0dWFsIHN5bWJvbCBuYW1lIHdvdWxkIGJlIHBsYXRmb3JtIHNwZWNpZmljIChgX194NjRfc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBvciBgX19hcm02NF9zeXNfaW9fdXJpbmdfcmVnaXN0ZXJgKS4gSXQmIzM5O3MgY2xlYW5lciBhbmQgbW9yZSBkaXJlY3QgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2g6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuCgpUbyBjb25maXJtIG15IGNob2ljZSwgSSBjaGVja2VkIHRoZSBkZWZpbml0aW9ucyBvZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGluIGBpb191cmluZy9jYW5jZWwuaGAsIGBpb191cmluZ19mcmVlX3RjdHhgIGluIGBpb191cmluZy90Y3R4LmhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAgaW4gYGluY2x1ZGUvbGludXgvaW9fdXJpbmcuaGAsIGFuZCB2ZXJpZmllZCB0aGF0IGFsbCB0aHJlZSBhcmUgbm9uLXN0YXRpYyBhbmQgZGlyZWN0bHkgZXhwb3NlZC4gVGhpcyBzb2xpZGlmaWVzIHRoZWlyIHN1aXRhYmlsaXR5IGFzIGZvY3VzIHN5bWJvbHMuCgpJJiMzOTttIG5vdyBzYXRpc2ZpZWQgd2l0aCBteSBhbmFseXNpcyBhbmQgd2lsbCBwcm9jZWVkIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtCUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfZnJlZV90Y3R4JiMzNDssCiAgICAmIzM0O19faW9fdXJpbmdfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBCeSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYF9faW9fdXJpbmdfZnJlZWAsIGl0IGVuc3VyZXMgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtCUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfZnJlZV90Y3R4JiMzNDssCiAgICAmIzM0O19faW9fdXJpbmdfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBCeSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYF9faW9fdXJpbmdfZnJlZWAsIGl0IGVuc3VyZXMgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDM6MjEuNzkyMTg0NDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjY2MjU4MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCUEZcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3VyaW5nX2NhbmNlbF9nZW5lcmljXCIsXG4gICAgXCJpb191cmluZ19mcmVlX3RjdHhcIixcbiAgICBcIl9faW9fdXJpbmdfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgKGNhbGxlZCBkdXJpbmcgYGV4ZWN2ZWApIHdvdWxkIGluY29ycmVjdGx5IGZyZWUgYHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBCeSBzcGxpdHRpbmcgYF9faW9fdXJpbmdfZnJlZWAgaW50byBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgYF9faW9fdXJpbmdfZnJlZWAsIGl0IGVuc3VyZXMgdGhhdCBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzoyMS43OTIxOTE2NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg5NDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhiNjEwOGE0YzU3ZDEwNDJjNjFjYjFkMWI0YjdiYzQxZGNhZjA5NjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzo0MzoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9jYW5jZWwuYyBiL2lvX3VyaW5nL2NhbmNlbC5jXFxuaW5kZXggOGM2ZmE2ZjM2N2U0Zi4uN2Q3ODIwZWFiODc4YiAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9jYW5jZWwuY1xcbisrKyBiL2lvX3VyaW5nL2NhbmNlbC5jXFxuQEAgLTY2MCw2ICs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZ0Y3R4LVxcdTAwM2Vpbl9jYW5jZWwpO1xcbiBcXHRcXHQvKiBmb3IgZXhlYyBhbGwgY3VycmVudCdzIHJlcXVlc3RzIHNob3VsZCBiZSBnb25lLCBraWxsIHRjdHggKi9cXG4tXFx0XFx0X19pb191cmluZ19mcmVlKGN1cnJlbnQpO1xcbitcXHRcXHRpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmMgYi9pb191cmluZy90Y3R4LmNcXG5pbmRleCBjYzNiZjJiM2JkYmM5Li40NjZiNzMwMGUyMDhlIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3RjdHguY1xcbisrKyBiL2lvX3VyaW5nL3RjdHguY1xcbkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXFx1MDAyNmRhdGEpO1xcbiB9XFxuIFxcbi12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4rdm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIHtcXG4gXFx0c3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHggPSB0c2stXFx1MDAzZWlvX3VyaW5nO1xcbiBcXHRzdHJ1Y3QgaW9fdGN0eF9ub2RlICpub2RlO1xcbkBAIC02Nyw2ICs2NywxMSBAQCB2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gXFx0XFx0a2ZyZWUodGN0eCk7XFxuIFxcdFxcdHRzay1cXHUwMDNlaW9fdXJpbmcgPSBOVUxMO1xcbiBcXHR9XFxuK31cXG4rXFxuK3ZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbit7XFxuK1xcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xcbiBcXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xcbiBcXHRcXHRpb19wdXRfYnBmX2ZpbHRlcnModHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuIFxcdFxcdGtmcmVlKHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmggYi9pb191cmluZy90Y3R4LmhcXG5pbmRleCAyMzEwZDJhMGM0NmQ5Li43NmFkMWFkNDU5NGVmIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3RjdHguaFxcbisrKyBiL2lvX3VyaW5nL3RjdHguaFxcbkBAIC0xMiw2ICsxMiw3IEBAIHZvaWQgaW9fdXJpbmdfZGVsX3RjdHhfbm9kZSh1bnNpZ25lZCBsb25nIGluZGV4KTtcXG4gaW50IF9faW9fdXJpbmdfYWRkX3RjdHhfbm9kZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XFxuIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGVfZnJvbV9zdWJtaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbiB2b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpO1xcbit2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuIFxcbiB2b2lkIGlvX3VyaW5nX3VucmVnX3JpbmdmZCh2b2lkKTtcXG4gaW50IGlvX3JpbmdmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKl9fYXJnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzoyMi4yNDIwNTY5NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTI4MTYzNzM3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkJQRlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNcIixcbiAgICBcImlvX3VyaW5nX2ZyZWVfdGN0eFwiLFxuICAgIFwiX19pb191cmluZ19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAoY2FsbGVkIGR1cmluZyBgZXhlY3ZlYCkgd291bGQgaW5jb3JyZWN0bHkgZnJlZSBgdHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdGAuIEJ5IHNwbGl0dGluZyBgX19pb191cmluZ19mcmVlYCBpbnRvIGBpb191cmluZ19mcmVlX3RjdHhgIGFuZCBgX19pb191cmluZ19mcmVlYCwgaXQgZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgcHJlc2VydmVkIGFjcm9zcyBgZXhlY3ZlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhiNjEwOGE0YzU3ZDEwNDJjNjFjYjFkMWI0YjdiYzQxZGNhZjA5NjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjQzOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvY2FuY2VsLmMgYi9pb191cmluZy9jYW5jZWwuY1xuaW5kZXggOGM2ZmE2ZjM2N2U0Zi4uN2Q3ODIwZWFiODc4YiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2NhbmNlbC5jXG4rKysgYi9pb191cmluZy9jYW5jZWwuY1xuQEAgLTY2MCw2ICs2NjAsNiBAQCBfX2NvbGQgdm9pZCBpb191cmluZ19jYW5jZWxfZ2VuZXJpYyhib29sIGNhbmNlbF9hbGwsIHN0cnVjdCBpb19zcV9kYXRhICpzcWQpXG4gXHRcdCAqL1xuIFx0XHRhdG9taWNfZGVjKFx1MDAyNnRjdHgtXHUwMDNlaW5fY2FuY2VsKTtcbiBcdFx0LyogZm9yIGV4ZWMgYWxsIGN1cnJlbnQncyByZXF1ZXN0cyBzaG91bGQgYmUgZ29uZSwga2lsbCB0Y3R4ICovXG4tXHRcdF9faW9fdXJpbmdfZnJlZShjdXJyZW50KTtcbitcdFx0aW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmMgYi9pb191cmluZy90Y3R4LmNcbmluZGV4IGNjM2JmMmIzYmRiYzkuLjQ2NmI3MzAwZTIwOGUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy90Y3R4LmNcbisrKyBiL2lvX3VyaW5nL3RjdHguY1xuQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHN0cnVjdCBpb193cSAqaW9faW5pdF93cV9vZmZsb2FkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGlvX3dxX2NyZWF0ZShjb25jdXJyZW5jeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuLXZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK3ZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIHtcbiBcdHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4ID0gdHNrLVx1MDAzZWlvX3VyaW5nO1xuIFx0c3RydWN0IGlvX3RjdHhfbm9kZSAqbm9kZTtcbkBAIC02Nyw2ICs2NywxMSBAQCB2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiBcdFx0a2ZyZWUodGN0eCk7XG4gXHRcdHRzay1cdTAwM2Vpb191cmluZyA9IE5VTEw7XG4gXHR9XG4rfVxuK1xuK3ZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK3tcbitcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xuIFx0aWYgKHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xuIFx0XHRpb19wdXRfYnBmX2ZpbHRlcnModHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbiBcdFx0a2ZyZWUodHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcbmRpZmYgLS1naXQgYS9pb191cmluZy90Y3R4LmggYi9pb191cmluZy90Y3R4LmhcbmluZGV4IDIzMTBkMmEwYzQ2ZDkuLjc2YWQxYWQ0NTk0ZWYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy90Y3R4LmhcbisrKyBiL2lvX3VyaW5nL3RjdHguaFxuQEAgLTEyLDYgKzEyLDcgQEAgdm9pZCBpb191cmluZ19kZWxfdGN0eF9ub2RlKHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xuIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuIGludCBfX2lvX3VyaW5nX2FkZF90Y3R4X25vZGVfZnJvbV9zdWJtaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xuIHZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XG4rdm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuIFxuIHZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xuIGludCBpb19yaW5nZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICpfX2FyZyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjIyLjI0MjA1OTE2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjA5NDYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgYGlvX3VyaW5nL2NhbmNlbC5jYCwgYGlvX3VyaW5nL3RjdHguY2AsIGFuZCBgaW9fdXJpbmcvdGN0eC5oYC4gU2VlbXMgbGlrZSB0aGV5J3JlIHNwbGl0dGluZyBgX19pb191cmluZ19mcmVlYCBpbnRvIGBpb191cmluZ19mcmVlX3RjdHhgIGFuZCBhIHJldGFpbmVkIGBfX2lvX3VyaW5nX2ZyZWVgLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgdGhhdCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIG5vdyBjYWxscyBgaW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYC4gU28sIHRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAgd29uJ3QgYmUgZnJlZWQgaW4gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBhbnltb3JlLlxuXG5Ob3csIGxldCBtZSBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEZpcnN0LCBsZXQncyByZWZyZXNoIG9uIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgaW4gYGlvX3VyaW5nL2NhbmNlbC5jYC4gUmlnaHQsIGl0J3MgY2FsbGVkIGR1cmluZyB0YXNrIGV4aXQgb3IgZXhlYy4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIElmIGl0J3MgY2FsbGVkIGR1cmluZyBgZXhlY2AsIHNob3VsZCBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCAqcmVhbGx5KiBiZSBmcmVlZD8gSXMgdGhhdCBhIHZhbGlkIHBvaW50IG9mIGZvY3VzPyBJdCBzb3VuZHMgbGlrZSB0aGVyZSdzIGEgcG9zc2liaWxpdHkgdGhhdCBpdCBzaG91bGRuJ3QuXG5cbkFscmlnaHQsIGxldCBtZSBzdGVwIGJhY2sgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBncmFwaCB0byBldmFsdWF0ZSB0aGlzIGNoYW5nZS4gV2FpdCwgd2hlcmUgaXMgYF9faW9fdXJpbmdfZnJlZWAgY2FsbGVkICpmcm9tKiwgYmVzaWRlcyBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBBbmQgY29udmVyc2VseSwgd2hlcmUgaXMgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCBjYWxsZWQgKmZyb20qLCBjb21wYXJlZCB0byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgPyBUaGlzIG1pZ2h0IGJlIHRoZSBjcml0aWNhbCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZS4gSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuIEknbGwgc2VhcmNoIGZvciBgX19pb191cmluZ19mcmVlYCBhbmQgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjI3LjY2MzAwODIxN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE5NDUyODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9fdXJpbmdfZnJlZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MTA9dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoxMTp2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTEyLXZvaWQgaW9fdXJpbmdfdW5yZWdfcmluZ2ZkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI5LVxcdGlmICh0c2stXFx1MDAzZWlvX3VyaW5nIHx8IHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjMwOlxcdFxcdF9faW9fdXJpbmdfZnJlZSh0c2spO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0zMS19XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NDY9dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzEtXFxuaW9fdXJpbmcvdGN0eC5jOjcyOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy03My17XFxuLS1cXG5pb191cmluZy90dy5jPTQ2PXN0YXRpYyB2b2lkIGlvX2ZhbGxiYWNrX3R3KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4KVxcbi0tXFxuaW9fdXJpbmcvdHcuYy00OC1cXHQvKlxcbmlvX3VyaW5nL3R3LmM6NDk6XFx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVxcdTAwM2V0YXNrIHZhbGlkIGFuZCwgYXMgX19pb191cmluZ19mcmVlKCkgaXNcXG5pb191cmluZy90dy5jLTUwLVxcdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDM6MzEuODgyNDY1NzcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MjQyNTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlcjpcblxuKipEaXZpbmcgaW50byBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBgaW9fdXJpbmdgIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBjYW5jZWwuY2AgZmlsZS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGZ1bmN0aW9uLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGNhbmNlbGxhdGlvbnMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdpbmcgc3RhdGUsIHN5bmNocm9uaXphdGlvbiwgYW5kIHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIGludmFsaWRhdGluZyBzdWJtaXR0ZWQgSS9PIHJlcXVlc3RzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHRoZSBwb2ludCB3aGVyZSB3ZSBjYW4gZW5zdXJlIGEgcHJvcGVyIGFuZCBlZmZpY2llbnQgZ3JhY2VmdWwgc2h1dGRvd24gb3IgaW50ZXJydXB0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBhIHRydWx5IHJvYnVzdCBhbmQgcGVyZm9ybWFudCBhcHBsaWNhdGlvbiBsZXZlcmFnaW5nIGBpb191cmluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzozNC44NjQ4OTUxMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NTI2NDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19jYW5jZWxfZ2VuZXJpY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9jYW5jZWwuYz00Mzc9dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy00MzktXFx0aW9fdXJpbmdfdW5yZWdfcmluZ2ZkKCk7XFxuaW9fdXJpbmcvY2FuY2VsLmM6NDQwOlxcdGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKGNhbmNlbF9hbGwsIE5VTEwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTQ0MS19XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz01NzE9c3RhdGljIHM2NCB0Y3R4X2luZmxpZ2h0KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBib29sIHRyYWNrZWQpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01ODEtICovXFxuaW9fdXJpbmcvY2FuY2VsLmM6NTgyOl9fY29sZCB2b2lkIGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljKGJvb2wgY2FuY2VsX2FsbCwgc3RydWN0IGlvX3NxX2RhdGEgKnNxZClcXG5pb191cmluZy9jYW5jZWwuYy01ODMte1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmg9MzM9X19jb2xkIGJvb2wgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5oLTM1LVxcdFxcdFxcdFxcdFxcdCBib29sIGNhbmNlbF9hbGwsIGJvb2wgaXNfc3Fwb2xsX3RocmVhZCk7XFxuaW9fdXJpbmcvY2FuY2VsLmg6MzY6X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKTtcXG5pb191cmluZy9jYW5jZWwuaC0zNy1fX2NvbGQgYm9vbCBpb19jYW5jZWxfY3R4X2NiKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKTtcXG4tLVxcbmlvX3VyaW5nL3NxcG9sbC5jPTI4ND1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmMtNDA2LVxcbmlvX3VyaW5nL3NxcG9sbC5jOjQwNzpcXHRpb191cmluZ19jYW5jZWxfZ2VuZXJpYyh0cnVlLCBzcWQpO1xcbmlvX3VyaW5nL3NxcG9sbC5jLTQwOC1cXHRyY3VfYXNzaWduX3BvaW50ZXIoc3FkLVxcdTAwM2V0aHJlYWQsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0MzozOC44NTAxNjUxNTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwMzg1MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyB0aGluZ3MgdXAgd2l0aCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLiBJbnN0ZWFkIG9mIHRoZSBvbGQgYF9faW9fdXJpbmdfZnJlZShjdXJyZW50KWAsIGl0J3Mgbm93IGNhbGxpbmcgYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBiZWNhdXNlIHRoZSBvbGQgbWV0aG9kLCBgX19pb191cmluZ19mcmVlYCwgdXNlZCB0byBoYW5kbGUgZnJlZWluZyBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gU28sIGVmZmVjdGl2ZWx5LCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIHdvbid0IGJlIG1hbmFnaW5nIHRoYXQgbWVtb3J5IGFueW1vcmUuXG5cbkhtbSwgdGhpcyB0cmlnZ2VycyBhIG1lbnRhbCBjaGFpbiByZWFjdGlvbi4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscy4gV2hlcmUgaXMgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB1c2VkPyBJIGJlbGlldmUgaXQncyBjYWxsZWQgZnJvbSBgX19pb191cmluZ19jYW5jZWxgLiBBbmQgYF9faW9fdXJpbmdfY2FuY2VsYCBpdHNlbGYsIHJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGVpdGhlciBgaW9fdXJpbmdfdGFza19jYW5jZWxgIG9yLCBwb3RlbnRpYWxseSwgZnJvbSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGl0c2VsZj8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4gUmlnaHQsIGJlc3QgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmhgIHRvIHNlZSBob3cgYF9faW9fdXJpbmdfY2FuY2VsYCBpcyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzYxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjQyLjk2MDU1MjgzOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3NjUwMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9fdXJpbmdfY2FuY2VsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC05LSNpZiBkZWZpbmVkKENPTkZJR19JT19VUklORylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MTA6dm9pZCBfX2lvX3VyaW5nX2NhbmNlbChib29sIGNhbmNlbF9hbGwpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0xMS12b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MTc9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2ZpbGVzX2NhbmNlbCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTE5LVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpb191cmluZylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjA6XFx0XFx0X19pb191cmluZ19jYW5jZWwoZmFsc2UpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yMS19XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oPTIyPXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ190YXNrX2NhbmNlbCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI0LVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpb191cmluZylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6MjU6XFx0XFx0X19pb191cmluZ19jYW5jZWwodHJ1ZSk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI2LX1cXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jPTQxND1ib29sIGlvX21hdGNoX3Rhc2tfc2FmZShzdHJ1Y3QgaW9fa2lvY2IgKmhlYWQsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNDM2LVxcbmlvX3VyaW5nL2NhbmNlbC5jOjQzNzp2b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbClcXG5pb191cmluZy9jYW5jZWwuYy00Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0Mzo0Ny40OTgyMDg4NDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ5MjcwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBpb191cmluZ2AgY2FuY2VsbGF0aW9uIGNvZGUuIEkgc2VlIHRoYXQgYF9faW9fdXJpbmdfY2FuY2VsYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgaW9fdXJpbmdfZmlsZXNfY2FuY2VsYCBhbmQgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYC4gTWFrZXMgc2Vuc2UsIGNvdmVyaW5nIGJvdGggZmlsZS1zcGVjaWZpYyBhbmQgdGFzay1yZWxhdGVkIGNhbmNlbGxhdGlvbnMuIE5vdywgYGlvX3VyaW5nX3Rhc2tfY2FuY2VsYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBnZXRzIGNhbGxlZCBmcm9tIGBkb19leGl0YCBhbmQgYGJlZ2luX25ld19leGVjYC4gVGhhdCBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSwgaXQgY291bGQgYmUgY2FsbGVkIGR1cmluZyBwcm9jZXNzIHRlcm1pbmF0aW9uLlxuXG5IZXJlJ3MgdGhlIGJpdCB0aGF0J3MgYnVnZ2luZyBtZS4gSWYgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCAqd2VyZSogdG8gY2FsbCBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYCwgaXQgd291bGQgZW5kIHVwIGZyZWVpbmcgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAsIHdoaWNoIGlzIHRoZSByZXN0cmljdGlvbiBzZXQgZm9yIHRoaXMgdGFzay4gQnV0IGhhbmcgb24uLi4gdGhhdCBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCBtZW1iZXIgKnNob3VsZCogb25seSBiZSBmcmVlZCB3aGVuIHRoZSB0YXNrIGl0c2VsZiBpcyBmcmVlZC4gVGhhdCBoYXBwZW5zIGxhdGVyLCByaWdodD8gSXNuJ3QgaXQgYGlvX3VyaW5nX2ZyZWVgJ3Mgam9iLCB3aGljaCB0aGVuIGNhbGxzIGBfX2lvX3VyaW5nX2ZyZWVgPyBXZSBkb24ndCB3YW50IHRvIHByZW1hdHVyZWx5IGZyZWUgdGhlIHJlc3RyaWN0aW9uLlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGlzOiB3aGVyZSAqaXMqIGBpb191cmluZ19mcmVlYCBjYWxsZWQ/IElzIGl0IHdpdGhpbiBgZnJlZV90YXNrYCBvciBhIHNpbWlsYXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZnVuY3Rpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCBiYWNrIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGxpZmVzcGFuIG9mIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBkYXRhLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY2FsbCBzaXRlcyBvZiBgaW9fdXJpbmdfZnJlZWAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTU0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQzOjUyLjM0NzQ4MzExMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxOTczNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19mcmVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjExOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMTItdm9pZCBpb191cmluZ191bnJlZ19yaW5nZmQodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX3Rhc2tfY2FuY2VsKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjYtfVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDoyNzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMjgte1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC0yOS1cXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZyB8fCB0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozMDpcXHRcXHRfX2lvX3VyaW5nX2ZyZWUodHNrKTtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oPTQzPXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19maWxlc19jYW5jZWwodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC00NS19XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjQ2OnN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaC00Ny17XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz01ODI9X19jb2xkIHZvaWQgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWMoYm9vbCBjYW5jZWxfYWxsLCBzdHJ1Y3QgaW9fc3FfZGF0YSAqc3FkKVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNjYyLVxcdFxcdC8qIGZvciBleGVjIGFsbCBjdXJyZW50J3MgcmVxdWVzdHMgc2hvdWxkIGJlIGdvbmUsIGtpbGwgdGN0eCAqL1xcbmlvX3VyaW5nL2NhbmNlbC5jOjY2MzpcXHRcXHRpb191cmluZ19mcmVlX3RjdHgoY3VycmVudCk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNjY0LVxcdH1cXG4tLVxcbmlvX3VyaW5nL3RjdHguYz0xNj1zdGF0aWMgc3RydWN0IGlvX3dxICppb19pbml0X3dxX29mZmxvYWQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNDUtXFxuaW9fdXJpbmcvdGN0eC5jOjQ2OnZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy00Ny17XFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzEtXFxuaW9fdXJpbmcvdGN0eC5jOjcyOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy03My17XFxuaW9fdXJpbmcvdGN0eC5jOjc0OlxcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xcbmlvX3VyaW5nL3RjdHguYy03NS1cXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCkge1xcbi0tXFxuaW9fdXJpbmcvdGN0eC5oPTE0PXZvaWQgaW9fdXJpbmdfY2xlYW5fdGN0eChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCk7XFxuaW9fdXJpbmcvdGN0eC5oOjE1OnZvaWQgaW9fdXJpbmdfZnJlZV90Y3R4KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG5pb191cmluZy90Y3R4LmgtMTYtXFxuLS1cXG5pb191cmluZy90dy5jPTQ2PXN0YXRpYyB2b2lkIGlvX2ZhbGxiYWNrX3R3KHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4KVxcbi0tXFxuaW9fdXJpbmcvdHcuYy00OC1cXHQvKlxcbmlvX3VyaW5nL3R3LmM6NDk6XFx0ICogVGhlIHRhc2sgcmVmIGJvdGgga2VlcHMgLVxcdTAwM2V0YXNrIHZhbGlkIGFuZCwgYXMgX19pb191cmluZ19mcmVlKCkgaXNcXG5pb191cmluZy90dy5jLTUwLVxcdCAqIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXRzZWxmIGlzIGZyZWVkLCBlbnN1cmVzIHRoZSB0Y3R4IChhbmRcXG4tLVxcbmtlcm5lbC9mb3JrLmM9NzgxPXZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5rZXJuZWwvZm9yay5jLTc4Ny1cXHR1bndpbmRfdGFza19mcmVlKHRzayk7XFxua2VybmVsL2ZvcmsuYzo3ODg6XFx0aW9fdXJpbmdfZnJlZSh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNzg5LVxcdGNncm91cF90YXNrX2ZyZWUodHNrKTtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk5ND1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNjEyLWJhZF9mb3JrX2NsZWFudXBfZGVsYXlhY2N0Olxcbmtlcm5lbC9mb3JrLmM6MjYxMzpcXHRpb191cmluZ19mcmVlKHApO1xcbmtlcm5lbC9mb3JrLmMtMjYxNC1cXHRkZWxheWFjY3RfdHNrX2ZyZWUocCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2JhdGNoLmM9MTY0PXN0YXRpYyB2b2lkIGZyZWVfYmF0Y2hfZmV0Y2hfYnVmKHN0cnVjdCB1YmxrX3RocmVhZCAqdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYy0xNjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZW5yX2ZldGNoX2J1ZnM7IGkrKykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYzoxNjk6XFx0XFx0aW9fdXJpbmdfZnJlZV9idWZfcmluZyhcXHUwMDI2dC1cXHUwMDNlcmluZywgdC1cXHUwMDNlZmV0Y2hbaV0uYnIsIDEsIGkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvYmF0Y2guYy0xNzAtXFx0XFx0bXVubG9jayh0LVxcdTAwM2VmZXRjaFtpXS5mZXRjaF9idWYsIHQtXFx1MDAzZWZldGNoW2ldLmZldGNoX2J1Zl9zaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDM6NTYuMDY3MjMwNDI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTMyOTgyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBSZXNvdXJjZSBNYW5hZ2VtZW50IGluIFRhc2sgTGlmZWN5Y2xlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiBgaW9fdXJpbmdgIHJlc291cmNlcyB0aWVkIHRvIGEgdGFzaywgYW5kIHNvbWUgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBhcmUgc3RhcnRpbmcgdG8ganVtcCBvdXQgYXQgbWUuIExldCBtZSBzZWUuLi4gYGlvX3VyaW5nX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGBfX3B1dF90YXNrX3N0cnVjdGAsIGFuZCBhbHNvIGR1cmluZyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFNvLCBpdCdzIHRpZWQgdG8gdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZSB0YXNrIHN0cnVjdHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZ2V0cyBpbnZva2VkIGZyb20gYGRvX2V4aXRgIGFuZCBgYmVnaW5fbmV3X2V4ZWNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgKmFsc28qIGNhbGxzIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBwb3RlbnRpYWxseSBmcmVlcyBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCB3aGlsZSB0aGUgdGFzayBzdHJ1Y3R1cmUgaXRzZWxmIGlzIHN0aWxsIGFyb3VuZC5cblxuTm93LCBpZiB0aGF0IGhhcHBlbnMsIGFuZCB0aGUgdGFzayBpcyBzdGlsbCBhbGl2ZSwgd2hhdCBwcmV2ZW50cyBgaW9fdXJpbmdfZnJlZWAgZnJvbSBiZWluZyBjYWxsZWQgKmFnYWluKiBsYXRlciBkdXJpbmcgdGhlIG5vcm1hbCBgX19wdXRfdGFza19zdHJ1Y3RgIHByb2Nlc3MsIGNoZWNraW5nIGEgcG90ZW50aWFsbHkgZnJlZWQgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGA/IEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUgZnJlZSBvbiBvdXIgaGFuZHMsIHRoYXQgZG9lc24ndCBzb3VuZCByaWdodC5cblxuSGFuZyBvbi4uLiBMZXQgbWUgdGhpbmsuIERvZXNuJ3QgYF9faW9fdXJpbmdfZnJlZWAgc2V0IGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMYCAqYWZ0ZXIqIGZyZWVpbmcgdGhlIG1lbW9yeT8gQWhhISBUaGF0IHNob3VsZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgYWdhaW4gd2hlbiBgX19wdXRfdGFza19zdHJ1Y3RgIGlzIGNhbGxlZC4gT2theSwgSSBiZXR0ZXIgY2hlY2sgdGhlIGNvZGUgZm9yIGBfX2lvX3VyaW5nX2ZyZWVgIGluIGBpb191cmluZy90Y3R4LmNgIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluLCBiZWNhdXNlIHRoaXMgaXMgbG9va2luZyBsaWtlIGEgcG90ZW50aWFsbHkgZGVsaWNhdGUgcmFjZSBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MDAuNzgwNTMxNjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTE2NjAzMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgX19pb191cmluZ19mcmVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW9fdXJpbmcuaD0xMD12b2lkIF9faW9fdXJpbmdfY2FuY2VsKGJvb2wgY2FuY2VsX2FsbCk7XFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oOjExOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMTItdm9pZCBpb191cmluZ191bnJlZ19yaW5nZmQodm9pZCk7XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NDY9dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzEtXFxuaW9fdXJpbmcvdGN0eC5jOjcyOnZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmlvX3VyaW5nL3RjdHguYy03My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ0OjA0LjI5NzE0MDY2NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwNzQzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBpb191cmluZy90Y3R4LmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBpb191cmluZy90Y3R4LmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNzIuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbWlnaHQgaG9sZCBzb21lIGNydWNpYWwgZGV0YWlscyBJJ20gYWZ0ZXIsIHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkJ3MgcmVsZXZhbnQgY29uY2VwdCwgZS5nLiwgdGhyZWFkIGNvbnRleHQgbWFuYWdlbWVudCwgY29tcGxldGlvbiBxdWV1ZSBoYW5kbGluZywgc3VibWlzc2lvbiByaW5nIGludGVyYWN0aW9uLCBldGMuXS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIFttZW50aW9uIHlvdXIgcmVsZXZhbnQgZXhwZXJpZW5jZV0sIHRoaXMgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBbbWVudGlvbiB0aGUgcHJvYmxlbS90b3BpYyB5b3UgYXJlIHRyeWluZyB0byB1bmRlcnN0YW5kXS4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgW21lbnRpb24gc3BlY2lmaWMgc2lnbmFscyB5b3UgYXJlIGxvb2tpbmcgZm9yLCBlLmcuLCBob3cgdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQsIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBsb2NrcyBiZWluZyBhY3F1aXJlZCwgZXRjLl0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDowNy42MTc4ODYzNTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3RjdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuICA2MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDYyOlxcdFxcdFxcdH1cXG4gIDYzOlxcdFxcdFxcdFdBUk5fT05fT05DRSh0Y3R4LVxcdTAwM2Vpb193cSk7XFxuICA2NDpcXHRcXHRcXHRXQVJOX09OX09OQ0UodGN0eC1cXHUwMDNlY2FjaGVkX3JlZnMpO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZ0Y3R4LVxcdTAwM2VpbmZsaWdodCk7XFxuICA2NzpcXHRcXHRcXHRrZnJlZSh0Y3R4KTtcXG4gIDY4OlxcdFxcdFxcdHRzay1cXHUwMDNlaW9fdXJpbmcgPSBOVUxMO1xcbiAgNjk6XFx0XFx0fVxcbiAgNzA6XFx0fVxcbiAgNzE6XFx0XFxuICA3MjpcXHR2b2lkIF9faW9fdXJpbmdfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdGlvX3VyaW5nX2ZyZWVfdGN0eCh0c2spO1xcbiAgNzU6XFx0XFx0aWYgKHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpIHtcXG4gIDc2OlxcdFxcdFxcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcXG4gIDc3OlxcdFxcdFxcdGtmcmVlKHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpO1xcbiAgNzg6XFx0XFx0XFx0dHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCA9IE5VTEw7XFxuICA3OTpcXHRcXHR9XFxuICA4MDpcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdF9fY29sZCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqaW9fdXJpbmdfYWxsb2NfdGFza19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbiAgODQ6XFx0e1xcbiAgODU6XFx0XFx0c3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHg7XFxuICA4NjpcXHRcXHRpbnQgcmV0O1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHR0Y3R4ID0ga3phbGxvY19vYmooKnRjdHgpO1xcbiAgODk6XFx0XFx0aWYgKHVubGlrZWx5KCF0Y3R4KSlcXG4gIDkwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRyZXQgPSBwZXJjcHVfY291bnRlcl9pbml0KFxcdTAwMjZ0Y3R4LVxcdTAwM2VpbmZsaWdodCwgMCwgR0ZQX0tFUk5FTCk7XFxuICA5MzpcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbiAgOTQ6XFx0XFx0XFx0a2ZyZWUodGN0eCk7XFxuICA5NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgOTY6XFx0XFx0fVxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHR0Y3R4LVxcdTAwM2Vpb193cSA9IGlvX2luaXRfd3Ffb2ZmbG9hZChjdHgsIHRhc2spO1xcbiAgOTk6XFx0XFx0aWYgKElTX0VSUih0Y3R4LVxcdTAwM2Vpb193cSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MDcuNjE4MDQ1NzE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTE0MTE5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgX19pb191cmluZ19mcmVlYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW5kIHplcm9pbmcgb3V0IGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgLiBUaGF0IG1ha2VzIHNlbnNlLiBCZWZvcmUgdGhpcyBwYXRjaCwgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3YXMgY2FsbGluZyBgX19pb191cmluZ19mcmVlYCBvbiB0aGUgKmN1cnJlbnQqIHRhc2suIFNvLCB0aGF0IGNhbGwgdG8gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3b3VsZCBiZSBmcmVlaW5nIGFuZCBudWxsaW5nIG91dCBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YCB3aGljaCBzZWVtcyBhIGJpdCBvZmYsIGRvZXNuJ3QgaXQ/XG5cblRoZSBraWNrZXIgaGVyZSBpcyB0aGF0IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgZ2V0cyBjYWxsZWQsIGFzIGZhciBhcyBJIGNhbiBzZWUgZnJvbSBjb250ZXh0LCB3aXRoaW4gYW4gYGV4ZWN2ZWAgY2FsbC4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXM7IGEgcHJvY2VzcyBzaG91bGQgKm5vdCogYmUgbG9zaW5nIGl0cyBgaW9fdXJpbmdfcmVzdHJpY3RgIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGFuIGBleGVjdmVgIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkgYmFkIG5ld3MhIFdoYXQgKmlzKiBgaW9fdXJpbmdfcmVzdHJpY3RgPyBCYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCdzIGxpa2VseSByZWxhdGVkIHRvIEJQRiBmaWx0ZXJpbmcgZm9yIGlvX3VyaW5n4oCmIEkgc2hvdWxkIHByb2JhYmx5IHNlYXJjaCBmb3IgYGlvX3VyaW5nX3Jlc3RyaWN0YCB0byBjb25maXJtIG15IHN1c3BpY2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ0OjEyLjAyOTQ2MTIxNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyNDcwMDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19yZXN0cmljdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW5jbHVkZS9saW51eC9pb191cmluZy5oLTI4LXtcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg6Mjk6XFx0aWYgKHRzay1cXHUwMDNlaW9fdXJpbmcgfHwgdHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzAtXFx0XFx0X19pb191cmluZ19mcmVlKHRzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmg9MzI9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzMte1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcuaDozNDpcXHRpZiAodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nLmgtMzUtXFx0XFx0cmV0dXJuIF9faW9fdXJpbmdfZm9yayh0c2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEyMDAtXFx0c3RydWN0IGlvX3VyaW5nX3Rhc2tcXHRcXHQqaW9fdXJpbmc7XFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEyMDE6XFx0c3RydWN0IGlvX3Jlc3RyaWN0aW9uXFx0XFx0KmlvX3VyaW5nX3Jlc3RyaWN0O1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMjAyLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9ODEyPXN0cnVjdCBpb191cmluZ19wcm9iZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MTktXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg6ODIwOnN0cnVjdCBpb191cmluZ19yZXN0cmljdGlvbiB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtODIxLVxcdF9fdTE2IG9wY29kZTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTgzMT1zdHJ1Y3QgaW9fdXJpbmdfdGFza19yZXN0cmljdGlvbiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC04MzQtXFx0X191MzIgcmVzdlszXTtcXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo4MzU6XFx0X19ERUNMQVJFX0ZMRVhfQVJSQVkoc3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uLCByZXN0cmljdGlvbnMpO1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTgzNi19O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9OTM2PXN0cnVjdCBpb191cmluZ19uYXBpIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1NS0vKlxcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjk1NjogKiBpb191cmluZ19yZXN0cmljdGlvbi1cXHUwMDNlb3Bjb2RlIHZhbHVlc1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTk1Ny0gKi9cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjk3Mz1zdGF0aWMgX19jb2xkIGludCBpb191cmluZ19jcmVhdGUoc3RydWN0IGlvX2N0eF9jb25maWcgKmNvbmZpZylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMzAzNy1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjMwMzg6XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MzAzOTpcXHRcXHRpb19jdHhfcmVzdHJpY3Rpb25fY2xvbmUoY3R4LCBjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zMDQwLVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMTE9c3RhdGljIF9fY29sZCBpbnQgaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzLFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMTMte1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTE0OlxcdHN0cnVjdCBpb191cmluZ19yZXN0cmljdGlvbiAqcmVzO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTE1LVxcdHNpemVfdCBzaXplO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0yMDE9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjA4LVxcdC8qIERpc2FsbG93IGlmIHRhc2sgYWxyZWFkeSBoYXMgcmVnaXN0ZXJlZCByZXN0cmljdGlvbnMgKi9cXG5pb191cmluZy9yZWdpc3Rlci5jOjIwOTpcXHRpZiAoY3VycmVudC1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMTAtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjM3LVxcdH1cXG5pb191cmluZy9yZWdpc3Rlci5jOjIzODpcXHRjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCA9IHJlcztcXG5pb191cmluZy9yZWdpc3Rlci5jLTIzOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MjQyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNTgtXFx0LyogSWYgbm8gdGFzayByZXN0cmljdGlvbnMgZXhpc3QsIHNldHVwIGEgbmV3IHNldCAqL1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjU5OlxcdHJlcyA9IGN1cnJlbnQtXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0O1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjYwLVxcdGlmICghcmVzKSB7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTI2Ny1cXHRpZiAocmV0KSB7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNjg6XFx0XFx0aWYgKHJlcyAhPSBjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG5pb191cmluZy9yZWdpc3Rlci5jLTI2OS1cXHRcXHRcXHRrZnJlZShyZXMpO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzEtXFx0fVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjcyOlxcdGlmICghY3VycmVudC1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNzM6XFx0XFx0Y3VycmVudC1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSByZXM7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNzQtXFx0cmV0dXJuIDA7XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NzI9dm9pZCBfX2lvX3VyaW5nX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pb191cmluZy90Y3R4LmMtNzQtXFx0aW9fdXJpbmdfZnJlZV90Y3R4KHRzayk7XFxuaW9fdXJpbmcvdGN0eC5jOjc1OlxcdGlmICh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XFxuaW9fdXJpbmcvdGN0eC5jOjc2OlxcdFxcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcXG5pb191cmluZy90Y3R4LmM6Nzc6XFx0XFx0a2ZyZWUodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuaW9fdXJpbmcvdGN0eC5jOjc4OlxcdFxcdHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSBOVUxMO1xcbmlvX3VyaW5nL3RjdHguYy03OS1cXHR9XFxuLS1cXG5pb191cmluZy90Y3R4LmM9NDEwPWludCBfX2lvX3VyaW5nX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW9fdXJpbmcvdGN0eC5jLTQxMS17XFxuaW9fdXJpbmcvdGN0eC5jOjQxMjpcXHRzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcywgKnNyYyA9IHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3Q7XFxuaW9fdXJpbmcvdGN0eC5jLTQxMy1cXG5pb191cmluZy90Y3R4LmMtNDE0LVxcdC8qIERvbid0IGxlYXZlIGl0IGRhbmdsaW5nIG9uIGVycm9yICovXFxuaW9fdXJpbmcvdGN0eC5jOjQxNTpcXHR0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0ID0gTlVMTDtcXG5pb191cmluZy90Y3R4LmMtNDE2LVxcbi0tXFxuaW9fdXJpbmcvdGN0eC5jLTQyMC1cXG5pb191cmluZy90Y3R4LmM6NDIxOlxcdHRzay1cXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3QgPSByZXM7XFxuaW9fdXJpbmcvdGN0eC5jLTQyMi1cXHRpb19yZXN0cmljdGlvbl9jbG9uZShyZXMsIHNyYyk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaD02MjI9c3RydWN0IGlvX3VyaW5nX3Byb2JlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTYyOS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo2MzA6c3RydWN0IGlvX3VyaW5nX3Jlc3RyaWN0aW9uIHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC02MzEtXFx0X191MTYgb3Bjb2RlO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9Njc5PXN0cnVjdCBpb191cmluZ19idWZfcmVnIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTY4Ny0vKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjY4ODogKiBpb191cmluZ19yZXN0cmljdGlvbi1cXHUwMDNlb3Bjb2RlIHZhbHVlc1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTY4OS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MTUuMzU0MTY4OTg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MzA5MzY2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIFJlc3RyaWN0aW9uIEZpeCoqXG5cbk9rYXksIHNvIGBpb191cmluZ19yZXN0cmljdGAgaXMgYSB0YXNrLWxldmVsIHNldHRpbmcgZm9yIGlvX3VyaW5nLCBhbmQgaXQncyBjbG9uZWQgd2hlbiBhIHByb2Nlc3MgZm9ya3MuIFRoZSBrZXkgaXNzdWUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGBleGVjdmVgLiBJIHNlZSB0aGF0IHdoZW4gYSB0YXNrIGNhbGxzIGBleGVjdmVgLCB0aGUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBmdW5jdGlvbiBpcyBjYWxsZWQuIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxpbmcgYF9faW9fdXJpbmdfZnJlZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllczogYF9faW9fdXJpbmdfZnJlZWAgd2FzIGZyZWVpbmcgdGhlIGB0c2stXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgIGFuZCBzZXR0aW5nIGl0IHRvIE5VTEwuXG5cbk5vdywgdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHJlZCBmbGFnIGluIG15IG1pbmQuIElmIGBleGVjdmVgIGNsZWFycyB0aGUgcmVzdHJpY3Rpb25zLCB0aGVuIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIG5ldyBwcm9ncmFtLCB0aGUgdGFzayB3b3VsZCBiZSBydW5uaW5nIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9ucy4gQnV0IHRoZSB3aG9sZSAqcG9pbnQqIG9mIHJlc3RyaWN0aW9ucyBpcyB0byBkZWZpbmUsIGFuZCAqZW5mb3JjZSosIGxpbWl0YXRpb25zIHRoYXQgcGVyc2lzdCBhY3Jvc3MgYGV4ZWN2ZWAsIHJpZ2h0PyBPciBwZXJoYXBzIHRoZXkgc2hvdWxkbid0IGJlIGNsZWFyZWQgYmVjYXVzZSBgZXhlY3ZlYCBzaG91bGRuJ3QgYnlwYXNzIHJlc3RyaWN0aW9ucyFcblxuVGhhdCdzIGl0ISBJZiBhIHRhc2sgc2V0cyB1cCByZXN0cmljdGlvbnMgYW5kIHRoZW4gY2FsbHMgYGV4ZWN2ZWAsIGJ1dCB0aG9zZSByZXN0cmljdGlvbnMgYXJlIGNsZWFyZWQgYnkgdGhlIGBleGVjdmVgIGNhbGwsIHRoZW4gdGhlIG5ldyBwcm9ncmFtIHdvdWxkIGJlIHJ1bm5pbmcgKndpdGhvdXQqIHRob3NlIHJlc3RyaWN0aW9ucy4gVGhhdCdzIGEgY2xlYXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS5cblxuU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBleGFjdCBidWc6IHdoZXJlIGBleGVjdmVgIHVuaW50ZW50aW9uYWxseSBjbGVhcnMgYGlvX3VyaW5nX3Jlc3RyaWN0YC4gVGhlIHNvbHV0aW9uPyBJbnN0ZWFkIG9mIHRoZSBvbGQsIGluY29ycmVjdCBjYWxsIHRvIGBfX2lvX3VyaW5nX2ZyZWUoY3VycmVudClgIGluc2lkZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCB0aGUgcGF0Y2ggcmVwbGFjZXMgaXQgd2l0aCBgaW9fdXJpbmdfZnJlZV90Y3R4KGN1cnJlbnQpYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGBpb191cmluZ19yZXN0cmljdGAgc2V0dGluZyBpcyBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBgZXhlY3ZlYCBjYWxsLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGlvX3VyaW5nIGxvZ2ljIGZpeC4gV2UgY2FuIGRlZmluaXRlbHkgZnV6eiBpdC4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBsaWtlIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AgYW5kIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIHNpbmNlIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgc2V0IGBpb191cmluZ19yZXN0cmljdGAuIEFuZCwgb2YgY291cnNlLCBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIHdoaWNoIGlzIHRoZSBmb2N1cyBvZiB0aGUgcGF0Y2ggYmVjYXVzZSBpdCBnZXRzIGNhbGxlZCBkdXJpbmcgYGV4ZWN2ZWAuIFdhaXQsIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AgaXMgY2FsbGVkIGJ5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIGdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MjIuMjg1MTA4NzQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3Mzk3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3JlZ2lzdGVyLmM9MTY3PXN0YXRpYyBfX2NvbGQgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9ucyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMjAwLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MjAxOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yMDIte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDAxPXN0YXRpYyBpbnQgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQodW5zaWduZWQgaW50IG9wY29kZSwgdm9pZCBfX3VzZXIgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwOS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlM6XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDEwOlxcdFxcdHJldHVybiBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayhhcmcsIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAxMS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDoyNi45NDI1MTk2OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMDU5MzIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgaW9fdXJpbmcgUmVnaXN0cmF0aW9uIE1lY2hhbmljcyoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgaW9fdXJpbmdfcmVnaXN0ZXJgIGZvciBhIG1vbWVudC4gUmlnaHQsIGxldCBtZSBzZWUsIEkga25vdyB0aGF0IGBJT1JJTkdfUkVHSVNURVJfUkVTVFJJQ1RJT05TYCBhbmQgYElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSYCBhcmUgdGhlIG9wY29kZXMgdXNlZCB3aXRoaW4gdGhhdCBjYWxsLCB0aGF0IG1ha2VzIHNlbnNlLiBIbW0sIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUncyBhIHNwZWNpYWwgY2FzZSwgYSBudWFuY2UgaGVyZSDigJMgd2Fzbid0IHRoZXJlIHNvbWV0aGluZyBhYm91dCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgPyBOb3cgd2hlcmUgZG9lcyB0aGF0IGNvbWUgaW50byBwbGF5Li4uIEFoLCBJIHNlZW0gdG8gcmVtZW1iZXIgaXQncyB1c2VkIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciwgYGZkYCwgaXMgc2V0IHRvIGAtMWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGlzbid0IGl0PyBCZXR0ZXIgY2hlY2sgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcGFydGljdWxhcnMuIEkgd2FudCB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDozMC40NTMxMTU3ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzg0MTk4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuYz05ODA9c3RhdGljIGludCBpb191cmluZ19yZWdpc3Rlcl9zZW5kX21zZ19yaW5nKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDAwLSAqL1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAwMTpzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDAyLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDE3PVNZU0NBTExfREVGSU5FNChpb191cmluZ19yZWdpc3RlciwgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgaW50LCBvcGNvZGUsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMzEtXFx0aWYgKGZkID09IC0xKVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAzMjpcXHRcXHRyZXR1cm4gaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQob3Bjb2RlLCBhcmcsIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6MzQuNjkxNTQwOTIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjMzMzIxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgaW9fdXJpbmcgUmVzdHJpY3Rpb25zIGFuZCBCUEYgRmlsdGVyIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhlIGBpb191cmluZ19yZWdpc3RlcmAgc3lzdGVtIGNhbGwsIHdoZW4gdXNlZCB3aXRoIGBmZCA9PSAtMWAsIGNhbGxzIGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAsIHdoaWNoIHVsdGltYXRlbHkgbGVhZHMgdG8gYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBiZWluZyBpbnZva2VkLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGFpbXMgdG8gcHJldmVudCBgaW9fdXJpbmdfcmVzdHJpY3RgIGZyb20gYmVpbmcgZnJlZWQgZHVyaW5nIGFuIGBleGVjdmVgIGNhbGwuIE15IGZ1enppbmcgc3RyYXRlZ3kgdGhlbiBuZWVkcyB0byBiZSBwcmV0dHkgc3BlY2lmaWMgdG8gdGVzdCB0aGlzOlxuXG4xLiAgRmlyc3QsIEknbGwgbmVlZCB0byB1c2UgYGlvX3VyaW5nX3JlZ2lzdGVyYCB3aXRoIGBmZCA9IC0xYCBhbmQgZWl0aGVyIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1JFU1RSSUNUSU9OU2Agb3IgYElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSYCBvcGNvZGUgdG8gc2V0IGBjdXJyZW50LVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC5cbjIuICBOZXh0LCBJIG5lZWQgdG8gdHJpZ2dlciBhbiBgZXhlY3ZlYC5cbjMuICBBZnRlciB0aGUgYGV4ZWN2ZWAsIHRoZSAqbmV3KiBwcm9ncmFtIHdpbGwgaG9wZWZ1bGx5IHN0aWxsIGhhdmUgYWNjZXNzIHRvIHRoYXQgYGN1cnJlbnQtXHUwMDNlaW9fdXJpbmdfcmVzdHJpY3RgIGNvbnRleHQuXG40LiAgRmluYWxseSwgSSBjYW4gZWl0aGVyIHRyeSB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiB0aGF0ICpzaG91bGQqIGJlIHJlc3RyaWN0ZWQsIG9yIEkgY2FuIGp1c3QgZXhpdCB0aGUgcHJvZ3JhbSBhbmQgbGV0IGBfX2lvX3VyaW5nX2ZyZWVgIGNsZWFuIHRoaW5ncyB1cC5cblxuVGhlIGtleSBzeW1ib2xzIEkgc2hvdWxkIHRhcmdldCBhcmU6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AsIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrYCBhbmQgYGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza2AgYXJlIHN0YXRpYy4gWWVwLCB0aGV5IGFyZS4gQnV0IHdhaXQsIHRoZSBndWlkZWxpbmVzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIERvZXMgdGhhdCBtZWFuIEkgc2hvdWxkIGJlIHVzaW5nIGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAgb3IgYHN5c19pb191cmluZ19yZWdpc3RlcmA/IEFjdHVhbGx5LCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgIGlzIGFsc28gc3RhdGljISBPa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGBpb191cmluZ19yZWdpc3RlcmAgc3lzY2FsbCBkaXJlY3RseS4gQWgsIHRoYXQncyBlaXRoZXIgYF9feDY0X3N5c19pb191cmluZ19yZWdpc3RlcmAgb3Igc2ltcGx5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIHRoYXQncyBiZXR0ZXIuXG5cbkEgcXVpY2sgY2hlY2sgb24gdGhlIG90aGVyIG9uZXM6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgaXMgbm9uLXN0YXRpYywgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgaXMgbm9uLXN0YXRpYywgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgIGlzIG5vbi1zdGF0aWMgdG9vLiBJJ2xsIG5lZWQgdG8gcmVmZXIgdG8gYGlvX3VyaW5nL3RjdHguY2AgbGF0ZXIgdG8gY2hlY2sgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDo0Mi41NTQ4NzY5NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDI0NTU3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBpb191cmluZ19mcmVlX3RjdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvdGN0eC5jPTE2PXN0YXRpYyBzdHJ1Y3QgaW9fd3EgKmlvX2luaXRfd3Ffb2ZmbG9hZChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3RjdHguYy00NS1cXG5pb191cmluZy90Y3R4LmM6NDY6dm9pZCBpb191cmluZ19mcmVlX3RjdHgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuaW9fdXJpbmcvdGN0eC5jLTQ3LXtcXG4tLVxcbmlvX3VyaW5nL3RjdHguaD0xND12b2lkIGlvX3VyaW5nX2NsZWFuX3RjdHgoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgpO1xcbmlvX3VyaW5nL3RjdHguaDoxNTp2b2lkIGlvX3VyaW5nX2ZyZWVfdGN0eChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuaW9fdXJpbmcvdGN0eC5oLTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDo0Ni45NTczNjc4NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2OTYzODE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBpb191cmluZyBTeW1ib2wgUmVzb2x1dGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHMgcmVsYXRlZCB0byBgaW9fdXJpbmdgIGFuZCB0cnlpbmcgdG8gemVybyBpbiBvbiB0aGUga2V5IG9uZXMuIEkndmUgY29uZmlybWVkIHRoYXQgYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBuZWl0aGVyIGlzIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AuIFRoYXQgbWVhbnMgdGhlc2UgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgbXkgZm9jdXMuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGluY2x1ZGluZyBgX194NjRfc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBvciBwb3RlbnRpYWxseSBqdXN0IGBzeXNfaW9fdXJpbmdfcmVnaXN0ZXJgIGFzIGEgZm9jdXMgc3ltYm9sLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgc3lzX2lvX3VyaW5nX3JlZ2lzdGVyYCBpcyB1c3VhbGx5IGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FNCguLi4pYC4gSW5jbHVkaW5nIGl0IGFkZHMgc29tZSBjb21wbGV4aXR5IHRoYXQgSSBjYW4gYXZvaWQuXG5cblRoZXJlZm9yZSwgSSB0aGluayB0aGUgbW9zdCBkaXJlY3QgcGF0aCBpcyB0byBjb25jZW50cmF0ZSBvbiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUsIG5vbi1zdGF0aWMgc3ltYm9scyB0aGF0J2xsIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC5cblxuTmV4dCwgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGRlcGVuZGVuY3kgb24gc3BlY2lmaWMgY29uZmlncywgbGlrZSBgQ09ORklHX0lPX1VSSU5HYC4gVGltZSB0byBkaXZlIGludG8gYGluaXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGlvX3VyaW5nL0tjb25maWdgIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6NTEuNzI3MDA4OTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODc4MTE1ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNy1cXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxOS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzOS1cXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5NDEtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NDo1NS42MDUxMzQ2MDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDQ4NTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBpb191cmluZydzIEJQRiBSZXN0cmljdGlvbnMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUga2V5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaW9fdXJpbmcsIG9idmlvdXNseS4gQnV0IEkganVzdCBoYWQgYSBmbGFzaCBvZiBpbnNpZ2h0IOKAkyB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IHJlc3RyaWN0aW5nIGl0cyBjYXBhYmlsaXRpZXMgd2l0aCBCUEYgZmlsdGVycz8gWWVzLCB0aGF0J3MgaXQhIGBpb191cmluZ19yZXN0cmljdGAgcmluZ3MgYSBiZWxsLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW4uIExldCdzIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgaG93IEJQRiBmaWx0ZXJzIGFyZSBpbmNvcnBvcmF0ZWQgZHVyaW5nIHJlZ2lzdHJhdGlvbiwgc28gYGlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza2Agc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRvIGV4YW1pbmUuIExldCdzIHNlZSBob3cgdGhleSBpbXBsZW1lbnQgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDQ6NTkuMTI1NjIzODgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg2ODU3NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlZ2lzdGVyX2JwZl9maWx0ZXJfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yZWdpc3Rlci5jPTIwMT1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIGludCBucl9hcmdzKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNDEtXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoyNDI6c3RhdGljIGludCBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2sodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgaW50IG5yX2FyZ3MpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0yNDMte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz0xMDAxPXN0YXRpYyBpbnQgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQodW5zaWduZWQgaW50IG9wY29kZSwgdm9pZCBfX3VzZXIgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAxMS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6MTAxMjpcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy0xMDEzLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MDIuODEyNDg3MDk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzc2OTUwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrYCBhbmQgaXRzIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIGFuZCB0aGUgYENPTkZJR19JT19VUklOR19CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRoZXJlLCBhbmQgdW5kZXJzdGFuZGluZyB0aGF0IGlzIGNyaXRpY2FsIGZvciBbaW5zZXJ0IHJlYXNvbiByZWxldmFudCB0byB5b3VyIGZpZWxkLCBlLmcuLCBjb2RlIG1haW50YWluYWJpbGl0eSwgZmVhdHVyZSBlbmFibGVtZW50LCBwbGF0Zm9ybSBjb21wYXRpYmlsaXR5XS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCBjb25maWcgb3B0aW9uIGFjdHMgYXMgYSBnYXRpbmcgbWVjaGFuaXNtIGZvciB0aGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIHRhc2suIElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBbZS5nLiwgYnVpbGQgY29uZmlndXJhdGlvbnMsIGZlYXR1cmUgZmxhZ3MsIG9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XS4gTGV0J3MgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcmV2aWV3IGFueSByZWxldmFudCBLY29uZmlnIGVudHJpZXMsIGFuZCBiZSBzdXJlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjA2LjA1MDE4NTU5NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjI2ODY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSU9fVVJJTkdfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICs9IG1vY2tfZmlsZS5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgKz0gYnBmX2ZpbHRlci5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRl9PUFMpICs9IGJwZi1vcHMub1xcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5oPTEzPXN0cnVjdCBpb191cmluZ19icGZfb3BzIHtcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuaC0xOS1cXG5pb191cmluZy9icGYtb3BzLmg6MjA6I2lmZGVmIENPTkZJR19JT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvYnBmLW9wcy5oLTIxLXZvaWQgaW9fdW5yZWdpc3Rlcl9icGZfb3BzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC02LVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDo3OiNpZmRlZiBDT05GSUdfSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTgtXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmg9NDI9c3RhdGljIGlubGluZSB2b2lkIGlvX2JwZl9maWx0ZXJfY2xvbmUoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpkc3QsXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDUtfVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaDo0NjojZW5kaWYgLyogQ09ORklHX0lPX1VSSU5HX0JQRiAqL1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC00Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MTAuNDg2NDYwMTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODI0ODk4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgZUJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24gaW50ZXJhY3RzIHdpdGggZUJQRi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSBmb3IgYElPX1VSSU5HX0JQRmAgdGhlcmUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBkb2VzIGFuZCBpZiBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRoYXQgd2lsbCBkaWN0YXRlIGhvdyBJIHB1cnN1ZSB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MTMuMjY4OTUzNjAyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDUxNTUyNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR19CUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvS2NvbmZpZz02PWNvbmZpZyBJT19VUklOR19aQ1JYXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjE3LjMyMDUxODY4OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc1NzkzNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgZGVmX2Jvb2wgeWAgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYElPX1VSSU5HYCBhbmQgYEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBmb3IgYGlvX3VyaW5nYCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5IGxvZ2ljLiBUaGlzIHNldHVwIHNjcmVhbXMgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBJL08gYW5kIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgc3lzY2FsbCBmZWF0dXJlcy4gSXQncyBsaWtlbHkgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlLCBvciB0aGF0IHNvbWUgc3BlY2lmaWMgQlBGIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgbGV2ZXJhZ2VkIG9yIGludGVncmF0ZWQgaW50byB0aGUgYGlvX3VyaW5nYCBkZXNpZ24gaW4gYSBjb25kaXRpb25hbCBtYW5uZXIuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCdzIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBiZW5lZml0cywgSSBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0IHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMhIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgdGhlcmUsIG9yIHBlcmhhcHMgYSBtb3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGludm9sdmluZyBmZWF0dXJlIGZsYWdzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MjAuOTk2MzE1MDUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIGlvX3VyaW5nIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIElPX1VSSU5HX1pDUlhcXG4gICA3OlxcdFxcdGRlZl9ib29sIHlcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9QT09MXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gTkVUX1JYX0JVU1lfUE9MTFxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgSU9fVVJJTkdfQlBGXFxuICAxNDpcXHRcXHRkZWZfYm9vbCB5XFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG4gIDE5OlxcdFxcdGRlZl9ib29sIHlcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MjAuOTk2NDg2MzkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTAxMzE4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBJT19VUklOR19CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBoYXMgYSBkZXBlbmRlbmN5IG9uIGJvdGggYEJQRmAgYW5kIGBORVRgLCBzbyB0aG9zZSBhcmUgbXVzdC1oYXZlcy4gTmF0dXJhbGx5LCBJIHNob3VsZCBhbHNvIGVuc3VyZSB0aGF0IEkgaGF2ZSBgSU9fVVJJTkdgLCBhbmQgYEJQRl9TWVNDQUxMYCBlbmFibGVkIGFzIHdlbGwuIFdhaXQgYSBzZWNvbmQsIEkgcmVjYWxsIHNlZWluZyBgSU9fVVJJTkdgIGRlZmluZWQgc29tZXdoZXJlIGluIGBpbml0L0tjb25maWdgIHdoZW4gSSB3YXMgbG9va2luZyBhdCBvdGhlciBjb25maWd1cmF0aW9ucy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGluIGBpbml0L0tjb25maWdgIGZvciB0aGUgYElPX1VSSU5HYCBvcHRpb25zIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NToyNC4yMDY2MjEyODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTE1OlxcdFxcdCAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nXFxuMTkxNjpcXHRcXHQgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLlxcbjE5MTc6XFx0XFxuMTkxODpcXHRjb25maWcgSU9fVVJJTkdcXG4xOTE5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4xOTIwOlxcdFxcdHNlbGVjdCBJT19XUVxcbjE5MjE6XFx0XFx0ZGVmYXVsdCB5XFxuMTkyMjpcXHRcXHRoZWxwXFxuMTkyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcXG4xOTI0OlxcdFxcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NToyNC4yMDY4MDA4MjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NTQzNTMxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBDYW5jZWwgTG9naWMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGJ1ZyB3aXRoaW4gYGlvX3VyaW5nYCByZWxhdGVkIHRvIGhvdyBjYW5jZWxsYXRpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBleGVjdmVgLiBJIHNlZSB0aGF0IGBJT19VUklOR2AgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQsIHdoaWNoIGlzIGdvb2QuIFRoZSBwYXRjaCB0b3VjaGVzIGBpb191cmluZy9jYW5jZWwuY2AgYW5kIGBpb191cmluZy90Y3R4LmNgLCBpbW1lZGlhdGVseSByYWlzaW5nIG15IGFudGVubmEgcmVnYXJkaW5nIHRhc2sgY29udGV4dCBhbmQgY2FuY2VsbGF0aW9uIG9wZXJhdGlvbnMuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggbGllcyBpbiBjaGFuZ2luZyBob3cgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAgaXMgaGFuZGxlZCB3aGVuIGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AgaXMgY2FsbGVkLiBJdCBzZWVtcyB0aGF0IHByZXZpb3VzbHksIGR1cmluZyBgZXhlY3ZlYCwgdGhlIGdlbmVyaWMgY2FuY2VsIGZ1bmN0aW9uIHdvdWxkIGVycm9uZW91c2x5IGZyZWUgdGhpcyByZXN0cmljdGlvbiB1c2luZyBgX19pb191cmluZ19mcmVlKGN1cnJlbnQpYC4gVGhpcyBoYXMgbm93IGJlZW4gcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gYGlvX3VyaW5nX2ZyZWVfdGN0eChjdXJyZW50KWAsIHdoaWNoIGludGVudGlvbmFsbHkgKmRvZXNuJ3QqIGZyZWUgYHRzay1cdTAwM2Vpb191cmluZ19yZXN0cmljdGAsIGJ1dCBpbnN0ZWFkIGZyZWVzIHRoZSBvdGhlciBjb250ZXh0IHZhcmlhYmxlcy4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjb3JyZWN0IGJlaGF2aW9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBpb191cmluZ19jYW5jZWxfZ2VuZXJpY2AsIGBpb191cmluZ19mcmVlX3RjdHhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgaW4gdGhpcyBuZXcgZmxvdy5cblxuRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBUaGUgY2FsbHN0YWNrIGZyb20gYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCBsb29rcyBzb2xpZC4gSXQncyByZWFjaGVkIHRocm91Z2ggYF9faW9fdXJpbmdfY2FuY2VsYCwgdGhlbiBgaW9fdXJpbmdfdGFza19jYW5jZWxgLCBhbmQgZmluYWxseSBmcm9tIGBiZWdpbl9uZXdfZXhlY2AgYW5kIGBkb19leGl0YC4gWWVwLCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRob3NlIGtleSBwcm9jZXNzIGxpZmVjeWNsZSBwb2ludHMuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMuIGBpb191cmluZ19mcmVlX3RjdHhgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIG9yIHJhdGhlciwgdGhlIG9sZCBmdW5jdGlvbiB3aXRoIGEgbmV3IG5hbWUsIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhlIHBhdGNoIHNob3dzIHRoYXQgdGhlIG9yaWdpbmFsIGBfX2lvX3VyaW5nX2ZyZWVgIGhhcyBiZWNvbWUgYSB3cmFwcGVyIG5vdywgY2FsbGluZyBgaW9fdXJpbmdfZnJlZV90Y3R4YCBhbmQgdGhlbiBoYW5kbGluZyB0aGUgYGlvX3VyaW5nX3Jlc3RyaWN0YCBjbGVhbnVwIHNlcGFyYXRlbHkuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiByZXNwb25zaWJpbGl0eS4gQm90aCBhcmUgbm9uLXN0YXRpYzsgdGhleSBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIHRob3JvdWdobHkgYW5kIEkgc2hvdWxkIGJlIHRlc3RpbmcgYm90aC5cblxuSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIG5vdywganVzdCB0byBiZSB0aG9yb3VnaC4gSXQncyBkZWNsYXJlZCBgX19jb2xkYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgY2FuY2VsbGF0aW9uIGlzbid0IGEgaG90IHBhdGguIEl0J3MgYWxzbyBub3Qgc3RhdGljLiBHb29kLlxuXG5JJ2xsIGNoZWNrIHRvIHNlZSBpZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBBaCwgeWVzLCBpdCBpcyBhbHNvIGNhbGxlZCBieSBgaW9fc3FfdGhyZWFkYCBpbiBgaW9fdXJpbmcvc3Fwb2xsLmNgLiBJIHdpbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblNvLCB0aGUgZm9jdXMgaXMgZGVmaW5pdGl2ZWx5IG9uOiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLlxuXG5JbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgSU9fVVJJTkdgLCBgQlBGYCwgYW5kIGBORVRgIHdpbGwgYmUgbmVjZXNzYXJ5LiBgSU9fVVJJTkdfQlBGYCBzZWVtcyB0byBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEJQRmAgYW5kIGBORVRgIGFyZSBzZXQsIHNvIHRoYXQncyBub3Qgc29tZXRoaW5nIHRvIHNwZWNpZnkgZXhwbGljaXRseS4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgaW9fdXJpbmdfcmVzdHJpY3RgIGlzIGRlZmluZWQgcmVnYXJkbGVzcyBvZiB0aGUgQlBGIGZpbHRlciBhdmFpbGFiaWxpdHkuIElmIGl0IGlzIG9ubHkgZGVmaW5lZCBiZWhpbmQgYENPTkZJR19JT19VUklOR2AsIHRoZW4gSSBjYW4ganVzdCB2ZXJpZnkgYElPX1VSSU5HYC4gTGV0J3MgY29uZmlybSB0aGF0IHdpdGggYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBUaGF0IHNob3VsZCBjbGVhciB1cCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc0MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjM1Ljc2MTE1NjgwMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0XFx0Y3R4LVxcdTAwM2VpbnRfZmxhZ3MgfD0gSU9fUklOR19GX09QX1JFU1RSSUNURUQ7XFxuIDE5NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VyZXN0cmljdGlvbnMucmVnX3JlZ2lzdGVyZWQpXFxuIDE5NzpcXHRcXHRcXHRjdHgtXFx1MDAzZWludF9mbGFncyB8PSBJT19SSU5HX0ZfUkVHX1JFU1RSSUNURUQ7XFxuIDE5ODpcXHRcXHRyZXR1cm4gMDtcXG4gMTk5OlxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFzayh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4gMjAyOlxcdHtcXG4gMjAzOlxcdFxcdHN0cnVjdCBpb191cmluZ190YXNrX3Jlc3RyaWN0aW9uIF9fdXNlciAqdXJlcyA9IGFyZztcXG4gMjA0OlxcdFxcdHN0cnVjdCBpb191cmluZ190YXNrX3Jlc3RyaWN0aW9uIHRyZXM7XFxuIDIwNTpcXHRcXHRzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcztcXG4gMjA2OlxcdFxcdGludCByZXQ7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdC8qIERpc2FsbG93IGlmIHRhc2sgYWxyZWFkeSBoYXMgcmVnaXN0ZXJlZCByZXN0cmljdGlvbnMgKi9cXG4gMjA5OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpb191cmluZ19yZXN0cmljdClcXG4gMjEwOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDIxMTpcXHRcXHQvKlxcbiAyMTI6XFx0XFx0ICogU2ltaWxhciB0byBzZWNjb21wLCBkaXNhbGxvdyBzZXR0aW5nIGEgZmlsdGVyIGlmIHRhc2tfbm9fbmV3X3ByaXZzXFxuIDIxMzpcXHRcXHQgKiBpcyBmYWxzZSBhbmQgd2UncmUgbm90IENBUF9TWVNfQURNSU4uXFxuIDIxNDpcXHRcXHQgKi9cXG4gMjE1OlxcdFxcdGlmICghdGFza19ub19uZXdfcHJpdnMoY3VycmVudCkgXFx1MDAyNlxcdTAwMjZcXG4gMjE2OlxcdFxcdCAgICAhbnNfY2FwYWJsZV9ub2F1ZGl0KGN1cnJlbnRfdXNlcl9ucygpLCBDQVBfU1lTX0FETUlOKSlcXG4gMjE3OlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAyMTg6XFx0XFx0aWYgKG5yX2FyZ3MgIT0gMSlcXG4gMjE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRyZXMsIGFyZywgc2l6ZW9mKHRyZXMpKSlcXG4gMjIyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAodHJlcy5mbGFncylcXG4gMjI1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMjY6XFx0XFx0aWYgKCFtZW1faXNfemVybyh0cmVzLnJlc3YsIHNpemVvZih0cmVzLnJlc3YpKSlcXG4gMjI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRyZXMgPSBremFsbG9jX29iaigqcmVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiAyMzA6XFx0XFx0aWYgKCFyZXMpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0cmV0ID0gaW9fcGFyc2VfcmVzdHJpY3Rpb25zKHVyZXMtXFx1MDAzZXJlc3RyaWN0aW9ucywgdHJlcy5ucl9yZXMsIHJlcyk7XFxuIDIzNDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo0NTozNS43NjEzMDI1MjJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NjE3NzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSBjYW4gbWFrZSBvZiB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYGlvX3B1dF9icGZfZmlsdGVyc2AgaW4gYGlvX3VyaW5nYCoqXG5cbkhtbSwgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhpcyBiZWhhdmlvciBpcyB0aWVkIHRvIGBDT05GSUdfSU9fVVJJTkdfQlBGYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEl0IGFwcGVhcnMgdG8gYmUgaW5oZXJlbnRseSBwYXJ0IG9mIHRoZSBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgY29kZSBiYXNlLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uXG5cbk5vdywgYSBiZWxsIGp1c3Qgd2VudCBvZmYuIFdoZXJlICppcyogYGlvX3B1dF9icGZfZmlsdGVyc2AgYWN0dWFsbHkgdXNlZD8gQWgsIHJpZ2h0LiBJdCdzIGNhbGxlZCB3aXRoaW4gYF9faW9fdXJpbmdfZnJlZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggYW5kIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCBtZSB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoYXQgc3BlY2lmaWMgcm91dGluZSBpcyBjYWxsZWQgd2l0aGluIHRoZSBsYXJnZXIgZnJlZWluZyBwcm9jZXNzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBpbnRlcnByZXRpbmcgdGhlIHNpZ25pZmljYW5jZSBvZiBpdHMgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6MzkuMzU3NDgyNjg2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA0MDI0NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3B1dF9icGZfZmlsdGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9icGZfZmlsdGVyLmM9OTc9c3RhdGljIHZvaWQgaW9fZnJlZV9icGZfZmlsdGVycyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMTM4LVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzoxMzk6c3RhdGljIHZvaWQgX19pb19wdXRfYnBmX2ZpbHRlcnMoc3RydWN0IGlvX2JwZl9maWx0ZXJzICpmaWx0ZXJzKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDAte1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTE0NC1cXG5pb191cmluZy9icGZfZmlsdGVyLmM6MTQ1OnZvaWQgaW9fcHV0X2JwZl9maWx0ZXJzKHN0cnVjdCBpb19yZXN0cmljdGlvbiAqcmVzKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDYte1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy0xNDctXFx0aWYgKHJlcy1cXHUwMDNlYnBmX2ZpbHRlcnMpXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjE0ODpcXHRcXHRfX2lvX3B1dF9icGZfZmlsdGVycyhyZXMtXFx1MDAzZWJwZl9maWx0ZXJzKTtcXG5pb191cmluZy9icGZfZmlsdGVyLmMtMTQ5LX1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYz0yNjY9c3RhdGljIHN0cnVjdCBpb19icGZfZmlsdGVycyAqaW9fYnBmX2ZpbHRlcl9jb3coc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpzcmMpXFxuLS1cXG5pb191cmluZy9icGZfZmlsdGVyLmMtMzA1LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzozMDY6XFx0X19pb19wdXRfYnBmX2ZpbHRlcnMoZmlsdGVycyk7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTMwNy1cXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jPTM1OT1pbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcihzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYy00MTYtXFx0aWYgKG9sZF9maWx0ZXJzKSB7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jOjQxNzpcXHRcXHRfX2lvX3B1dF9icGZfZmlsdGVycyhvbGRfZmlsdGVycyk7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQxOC1cXHRcXHRyZXMtXFx1MDAzZWJwZl9maWx0ZXJzX2NvdyA9IGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQ1Mi1cXHRpZiAoZmlsdGVycyAhPSByZXMtXFx1MDAzZWJwZl9maWx0ZXJzKVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuYzo0NTM6XFx0XFx0X19pb19wdXRfYnBmX2ZpbHRlcnMoZmlsdGVycyk7XFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5jLTQ1NC1lcnJfcHJvZzpcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD0xMT1pbnQgaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcihzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcyxcXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xMy1cXG5pb191cmluZy9icGZfZmlsdGVyLmg6MTQ6dm9pZCBpb19wdXRfYnBmX2ZpbHRlcnMoc3RydWN0IGlvX3Jlc3RyaWN0aW9uICpyZXMpO1xcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaC0xNS1cXG4tLVxcbmlvX3VyaW5nL2JwZl9maWx0ZXIuaD0zND1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19ydW5fYnBmX2ZpbHRlcnMoc3RydWN0IGlvX2JwZl9maWx0ZXIgX19yY3UgKipmaWx0ZXJzLFxcbi0tXFxuaW9fdXJpbmcvYnBmX2ZpbHRlci5oLTM4LX1cXG5pb191cmluZy9icGZfZmlsdGVyLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIGlvX3B1dF9icGZfZmlsdGVycyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb24gKnJlcylcXG5pb191cmluZy9icGZfZmlsdGVyLmgtNDAte1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTYzPXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2N0eF9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjAzLVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjIyMDQ6XFx0aW9fcHV0X2JwZl9maWx0ZXJzKFxcdTAwMjZjdHgtXFx1MDAzZXJlc3RyaWN0aW9ucyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMjA1LVxcbi0tXFxuaW9fdXJpbmcvdGN0eC5jPTcyPXZvaWQgX19pb191cmluZ19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW9fdXJpbmcvdGN0eC5jLTc1LVxcdGlmICh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KSB7XFxuaW9fdXJpbmcvdGN0eC5jOjc2OlxcdFxcdGlvX3B1dF9icGZfZmlsdGVycyh0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0KTtcXG5pb191cmluZy90Y3R4LmMtNzctXFx0XFx0a2ZyZWUodHNrLVxcdTAwM2Vpb191cmluZ19yZXN0cmljdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjQ1OjQzLjU2MTUxNTczWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzI5NjE3MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgaW9fdXJpbmcgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgdGhpbmtpbmcuIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBpb191cmluZ19yZXN0cmljdGAgc3RydWN0dXJlIGlzIGhhbmRsZWQgZHVyaW5nIGBleGVjdmVgLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgYGlvX3VyaW5nX2NhbmNlbF9nZW5lcmljYCB3YXMgaW5jb3JyZWN0bHkgZnJlZWluZyBgdHNrLVx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBpbnRlZ3JpdHkgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBkdXJpbmcgcHJvY2VzcyB0cmFuc2l0aW9ucy5cblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIHRoZSBkZWZpbml0aW9uIG9mIGBpb19wdXRfYnBmX2ZpbHRlcnNgLiBJIHJlYWxpemVkIHRoYXQgdGhlIGBpb19wdXRfYnBmX2ZpbHRlcnNgIGZ1bmN0aW9uLCBkZWZpbmVkIGluIGBpb191cmluZy9icGZfZmlsdGVyLmNgLCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfSU9fVVJJTkdfQlBGYCBpcyBzZXQuIElmIG5vdCwgaXQncyBqdXN0IGFuIGlubGluZSBmdW5jdGlvbi4gVGhpcyBtZWFucyBgQ09ORklHX0lPX1VSSU5HYCBpcyB0aGUgYmFzZWxpbmUgbmVlZGVkLiBIb3dldmVyLCB0byBmdWxseSBleGVyY2lzZSBhbmQgdGVzdCB0aGUgQlBGIGZpbHRlciBjb21wb25lbnRzLCBJIHNob3VsZCBhbHNvIGVuYWJsZSBgQlBGYCBhbmQgYE5FVGAsIGluIGFkZGl0aW9uIHRvIGBJT19VUklOR2AsIHRvIGVuc3VyZSBgSU9fVVJJTkdfQlBGYCBpcyBlbmFibGVkLlxuXG5JJ3ZlIGRldGVybWluZWQgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBrZXkgc3ltYm9sczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IGFuZCBjb3VsZCByZXZlYWwgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3Vlcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYF9faW9fdXJpbmdfZnJlZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnZml4IGFuZCBhcmUgY3JpdGljYWwgZm9yIHRlc3RpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSU9fVVJJTkdgLCBgQlBGYCwgYE5FVGAgLSBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgaW5jbHVkaW5nIHRoZSBCUEYgZmlsdGVyaW5nLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBidWcgc2NlbmFyaW8gYW5kIHRlc3QgaXRzIGZpeC5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgYnVnIGZpeCBpbnZvbHZlcyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBpb191cmluZ19yZXN0cmljdGAgZHVyaW5nIHByb2Nlc3MgZXhlY3V0aW9uIHRyYW5zaXRpb25zLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IGBpb191cmluZ19yZXN0cmljdGAgaXMgY29ycmVjdGx5IHByZXNlcnZlZCBhY3Jvc3MgYGV4ZWN2ZWAgY2FsbHMgYnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBtb2RpZnlpbmcgdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMuXG5cbkkgY29uc2lkZXJlZCB3aGV0aGVyIGBpb19yZWdpc3Rlcl9yZXN0cmljdGlvbnNfdGFza2AgYW5kIGBpb19yZWdpc3Rlcl9icGZfZmlsdGVyX3Rhc2tgIHdvdWxkIGJlIHN1aXRhYmxlIGFzIGZvY3VzIHN5bWJvbHMsIHNpbmNlIHRoZXkgc2V0IGBpb191cmluZ19yZXN0cmljdGAuIEhvd2V2ZXIsIHRoZXkgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaGFyZGVyIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlaXIgY2FsbGluZyBzeW1ib2wsIGBpb191cmluZ19yZWdpc3RlcmAgaXMgZGVmaW5lZCB2aWEgYFNZU0NBTExfREVGSU5FNGAsIHNvIHRoZSBhY3R1YWwgc3ltYm9sIG5hbWUgd291bGQgYmUgcGxhdGZvcm0gc3BlY2lmaWMgKGBfX3g2NF9zeXNfaW9fdXJpbmdfcmVnaXN0ZXJgIG9yIGBfX2FybTY0X3N5c19pb191cmluZ19yZWdpc3RlcmApLiBJdCdzIGNsZWFuZXIgYW5kIG1vcmUgZGlyZWN0IHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoOiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgLCBgaW9fdXJpbmdfZnJlZV90Y3R4YCwgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLlxuXG5UbyBjb25maXJtIG15IGNob2ljZSwgSSBjaGVja2VkIHRoZSBkZWZpbml0aW9ucyBvZiBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIGluIGBpb191cmluZy9jYW5jZWwuaGAsIGBpb191cmluZ19mcmVlX3RjdHhgIGluIGBpb191cmluZy90Y3R4LmhgLCBhbmQgYF9faW9fdXJpbmdfZnJlZWAgaW4gYGluY2x1ZGUvbGludXgvaW9fdXJpbmcuaGAsIGFuZCB2ZXJpZmllZCB0aGF0IGFsbCB0aHJlZSBhcmUgbm9uLXN0YXRpYyBhbmQgZGlyZWN0bHkgZXhwb3NlZC4gVGhpcyBzb2xpZGlmaWVzIHRoZWlyIHN1aXRhYmlsaXR5IGFzIGZvY3VzIHN5bWJvbHMuXG5cbkknbSBub3cgc2F0aXNmaWVkIHdpdGggbXkgYW5hbHlzaXMgYW5kIHdpbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2MywiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NDU6NTQuODkxMTM1ODQ0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3Mjg5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiQlBGXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jYW5jZWxfZ2VuZXJpY1wiLFxuICAgIFwiaW9fdXJpbmdfZnJlZV90Y3R4XCIsXG4gICAgXCJfX2lvX3VyaW5nX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gQnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBlbnN1cmVzIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGBleGVjdmVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiQlBGXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jYW5jZWxfZ2VuZXJpY1wiLFxuICAgIFwiaW9fdXJpbmdfZnJlZV90Y3R4XCIsXG4gICAgXCJfX2lvX3VyaW5nX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgaW9fdXJpbmdfY2FuY2VsX2dlbmVyaWNgIChjYWxsZWQgZHVyaW5nIGBleGVjdmVgKSB3b3VsZCBpbmNvcnJlY3RseSBmcmVlIGB0c2stXFx1MDAzZWlvX3VyaW5nX3Jlc3RyaWN0YC4gQnkgc3BsaXR0aW5nIGBfX2lvX3VyaW5nX2ZyZWVgIGludG8gYGlvX3VyaW5nX2ZyZWVfdGN0eGAgYW5kIGBfX2lvX3VyaW5nX2ZyZWVgLCBpdCBlbnN1cmVzIHRoYXQgYGlvX3VyaW5nX3Jlc3RyaWN0YCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGBleGVjdmVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[1] Phase: Succeeded StartedAt: 2026-08-01 07:46:07 +0000 UTC FinishedAt: 2026-08-01 07:46:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 07:46:07 +0000 UTC FinishedAt: 2026-08-01 07:46:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2] Phase: Succeeded StartedAt: 2026-08-01 07:46:07 +0000 UTC FinishedAt: 2026-08-01 11:39:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 07:46:07 +0000 UTC FinishedAt: 2026-08-01 11:39:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 07:46:07 +0000 UTC FinishedAt: 2026-08-01 07:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 07:46:07 +0000 UTC FinishedAt: 2026-08-01 07:46:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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-workflowpq926/series-workflowpq926-convert-artifact-1682795104/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 07:46:52 +0000 UTC FinishedAt: 2026-08-01 08:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 07:46:52 +0000 UTC FinishedAt: 2026-08-01 08:08:19 +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:*4ec19618-e314-458e-af5b-b514cfb0b727,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-workflowpq926/series-workflowpq926-convert-artifact-1682795104/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": "e7d879f1-acd6-4ea9-914b-cc8481eed627", "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-workflowpq926/series-workflowpq926-build-action-1748359462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 07:46:52 +0000 UTC FinishedAt: 2026-08-01 08:08:08 +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:*4ec19618-e314-458e-af5b-b514cfb0b727,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-workflowpq926/series-workflowpq926-convert-artifact-1682795104/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": "e7d879f1-acd6-4ea9-914b-cc8481eed627", "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-workflowpq926/series-workflowpq926-build-action-1748359462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:08:19 +0000 UTC FinishedAt: 2026-08-01 08:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:08:19 +0000 UTC FinishedAt: 2026-08-01 08:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:08:19 +0000 UTC FinishedAt: 2026-08-01 08:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:08:19 +0000 UTC FinishedAt: 2026-08-01 08:08:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-workflowpq926/series-workflowpq926-convert-artifact-1259376263/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:08:30 +0000 UTC FinishedAt: 2026-08-01 08:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:08:30 +0000 UTC FinishedAt: 2026-08-01 08:10:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7d879f1-acd6-4ea9-914b-cc8481eed627,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-workflowpq926/series-workflowpq926-build-action-1748359462/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-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:10:37 +0000 UTC FinishedAt: 2026-08-01 08:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:10:37 +0000 UTC FinishedAt: 2026-08-01 08:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:10:37 +0000 UTC FinishedAt: 2026-08-01 08:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:10:38 +0000 UTC FinishedAt: 2026-08-01 08:33:48 +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:*4ec19618-e314-458e-af5b-b514cfb0b727,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-workflowpq926/series-workflowpq926-convert-artifact-1259376263/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": "06aea1fa-bd11-4909-b220-e0f472d3cbff", "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-workflowpq926/series-workflowpq926-build-action-3651829771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:10:38 +0000 UTC FinishedAt: 2026-08-01 08:33:35 +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:*4ec19618-e314-458e-af5b-b514cfb0b727,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-workflowpq926/series-workflowpq926-convert-artifact-1259376263/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": "06aea1fa-bd11-4909-b220-e0f472d3cbff", "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-workflowpq926/series-workflowpq926-build-action-3651829771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:33:48 +0000 UTC FinishedAt: 2026-08-01 08:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:33:48 +0000 UTC FinishedAt: 2026-08-01 08:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:33:48 +0000 UTC FinishedAt: 2026-08-01 08:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:33:48 +0000 UTC FinishedAt: 2026-08-01 08:35:37 +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:*06aea1fa-bd11-4909-b220-e0f472d3cbff,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-workflowpq926/series-workflowpq926-build-action-3651829771/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-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:49 +0000 UTC FinishedAt: 2026-08-01 11:39:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:49 +0000 UTC FinishedAt: 2026-08-01 11:39:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"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:*e7d879f1-acd6-4ea9-914b-cc8481eed627,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06aea1fa-bd11-4909-b220-e0f472d3cbff,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-workflowpq926/series-workflowpq926-build-action-1748359462/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-workflowpq926/series-workflowpq926-build-action-3651829771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:49 +0000 UTC FinishedAt: 2026-08-01 08:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:49 +0000 UTC FinishedAt: 2026-08-01 08:35:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"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-workflowpq926/series-workflowpq926-convert-artifact-2014454112/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:49 +0000 UTC FinishedAt: 2026-08-01 08:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:49 +0000 UTC FinishedAt: 2026-08-01 08:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:35:50 +0000 UTC FinishedAt: 2026-08-01 08:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:36:00 +0000 UTC FinishedAt: 2026-08-01 11:39:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpq926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_uring_cancel_generic","io_uring_free_tctx","__io_uring_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b5ffb43ae9d27eed9165e1962963d685d879219","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BPF","NET"],"series_id":"428e71bb-fb16-4da6-879b-814083a1644c","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-08-01 08:36:00 +0000 UTC FinishedAt: 2026-08-01 11:39:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7d879f1-acd6-4ea9-914b-cc8481eed627,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06aea1fa-bd11-4909-b220-e0f472d3cbff,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-workflowpq926/series-workflowpq926-build-action-1748359462/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-workflowpq926/series-workflowpq926-build-action-3651829771/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-workflowpq926/series-workflowpq926-convert-artifact-2014454112/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,}