Name: series-workflowht4mg Phase: Succeeded StartedAt: 2026-07-27 07:39:06 +0000 UTC FinishedAt: 2026-07-27 13:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[0] Phase: Succeeded StartedAt: 2026-07-27 07:39:06 +0000 UTC FinishedAt: 2026-07-27 08:19:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 07:39:06 +0000 UTC FinishedAt: 2026-07-27 08:19:50 +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": "1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "8d1eb236-4676-4f3e-8a6e-577bcc9437d2" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_send", "io_recv", "io_buffers_select", "io_buffers_peek" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fc2VuZCYjMzQ7LAogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBjYXBwaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGJ1ZmZlciBwZWVrZWQgZnJvbSBhIHJpbmcgYnVmZmVyIGluIGlvX3VyaW5nIHRvIE1BWF9SV19DT1VOVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB0aGF0IHVzZSBwcm92aWRlZCByaW5nIGJ1ZmZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNDA5ZTZmN2MyNTBjOTM0OTM3ZTNjZTE4YmFjMzM2OTM0ZWJiN2NmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDg6MTc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXG5pbmRleCBkZTAxMjliY2VhYmEzMC4uMWNmNWJlNjJiYjY1NjMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTI2Niw2ICYjNDM7MjY2LDkgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuJiM0MztcdC8qIE1BWF9SV19DT1VOVCBpcyB0aGUgdW5pdmVyc2FsIExpbnV4IHBlci1jYWxsIElPIG1heGltdW0gKi9cbiYjNDM7XHRhcmctXHUwMDNlbWF4X2xlbiA9IG1pbl90KHNpemVfdCwgYXJnLVx1MDAzZW1heF9sZW4sIE1BWF9SV19DT1VOVCk7XG4mIzQzO1xuIFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gXHRpZiAoYXJnLVx1MDAzZW1heF9sZW4pIHtcbiBcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbkBAIC0yOTUsNyAmIzQzOzI5OCw3IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFxuIFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cbiBcdGlmICghYXJnLVx1MDAzZW1heF9sZW4pXG4tXHRcdGFyZy1cdTAwM2VtYXhfbGVuID0gSU5UX01BWDtcbiYjNDM7XHRcdGFyZy1cdTAwM2VtYXhfbGVuID0gTUFYX1JXX0NPVU5UO1xuIFxuIFx0cmVxLVx1MDAzZWJ1Zl9pbmRleCA9IFJFQURfT05DRShidWYtXHUwMDNlYmlkKTtcbiBcdGRvIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE0MDllNmY3YzI1MGM5MzQ5MzdlM2NlMThiYWMzMzY5MzRlYmI3Y2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwODoxNzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuYwppbmRleCBkZTAxMjliY2VhYmEzMC4uMWNmNWJlNjJiYjY1NjMgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2tidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9rYnVmLmMKQEAgLTI2Niw2ICYjNDM7MjY2LDkgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsCiAJaWYgKHVubGlrZWx5KCFucl9hdmFpbCkpCiAJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwkvKiBNQVhfUldfQ09VTlQgaXMgdGhlIHVuaXZlcnNhbCBMaW51eCBwZXItY2FsbCBJTyBtYXhpbXVtICovCiYjNDM7CWFyZy0mZ3Q7bWF4X2xlbiA9IG1pbl90KHNpemVfdCwgYXJnLSZndDttYXhfbGVuLCBNQVhfUldfQ09VTlQpOwomIzQzOwogCWJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsIGhlYWQsIGJsLSZndDttYXNrKTsKIAlpZiAoYXJnLSZndDttYXhfbGVuKSB7CiAJCXUzMiBsZW4gPSBSRUFEX09OQ0UoYnVmLSZndDtsZW4pOwpAQCAtMjk1LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAogCS8qIHNldCBpdCB0byBtYXgsIGlmIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgaXQgdW5jb25kaXRpb25hbGx5ICovCiAJaWYgKCFhcmctJmd0O21heF9sZW4pCi0JCWFyZy0mZ3Q7bWF4X2xlbiA9IElOVF9NQVg7CiYjNDM7CQlhcmctJmd0O21heF9sZW4gPSBNQVhfUldfQ09VTlQ7CiAKIAlyZXEtJmd0O2J1Zl9pbmRleCA9IFJFQURfT05DRShidWYtJmd0O2JpZCk7CiAJZG8gewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIGFzIEkgc2VlIHRoZW06CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBpb191cmluZyBTZWN1cml0eSBWdWxuZXJhYmlsaXR5KioKClJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggbW9kaWZ5aW5nIGBpb191cmluZy9rYnVmLmNgLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBpbnRyb2R1Y2luZyBhIGNhcCBvbiBgYXJnLSZndDttYXhfbGVuYC4gVGhpcyBjYXAgaXMgc2V0IHRvIGBNQVhfUldfQ09VTlRgLCB3aGljaCBJIGFzc3VtZSBpcyBzb21lIGRlZmluZWQgY29uc3RhbnQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhpcyBpcyAqZnVuY3Rpb25hbCogY2hhbmdlIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIEFuZCBhcyB3ZSBhbGwga25vdywgYGlvX3VyaW5nYCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBkdWUgdG8gaXRzIGNvbXBsZXggZGVzaWduIGFuZCBwb3RlbnRpYWwgZm9yIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHNvIGFueSBmdW5jdGlvbmFsIGNoYW5nZSBoZXJlIGRlc2VydmVzIGV4dHJhIHNjcnV0aW55LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGFmZmVjdGVkIGNvZGU6IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNhcCBvbiBgbWF4X2xlbmAsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHNpZGUtZWZmZWN0cywgcmVzb3VyY2UgZXhoYXVzdGlvbiBjb25kaXRpb25zLCBvciBzdWJ0bGUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZy4KCkJleW9uZCB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGNhbGwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYC4gVGhvc2UgYXJlIHRoZSBhcmVhcyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGltcGFjdCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgSSBzaG91bGQgZm9jdXMgbXkgaW4tZGVwdGggYW5hbHlzaXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCwgYW5kIGhvdyB0aGUgY2FwcGVkIGBtYXhfbGVuYCBtaWdodCBwcm9wYWdhdGUgb3IgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgdXAgdGhlIHN0YWNrLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yaW5nX2J1ZmZlcnNfcGVlayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9MjMwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTI1Mi1cbmlvX3VyaW5nL2tidWYuYzoyNTM6c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmMtMjU0LVx0XHRcdFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmM9MzQ0PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM1NS1cdGlmIChzZWwtXHUwMDNlYnVmX2xpc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcbmlvX3VyaW5nL2tidWYuYzozNTY6XHRcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcva2J1Zi5jLTM1Ny1cdFx0Lypcbi0tXG5pb191cmluZy9rYnVmLmM9MzgwPWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0zOTMtXHRpZiAoYmwtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcbmlvX3VyaW5nL2tidWYuYzozOTQ6XHRcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBibCk7XG5pb191cmluZy9rYnVmLmMtMzk1LVx0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkvTyBSaW5nIEJ1ZmZlciBQZWVrIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgaGllcmFyY2h5IHVwd2FyZHMuIEkgbmVlZCB0byBrbm93IHdoZXJlICp0aG9zZSogdHdvIGZ1bmN0aW9ucywgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AsIGFyZSBjYWxsZWQuIEtub3dpbmcgdGhlaXIgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBJL08gZmxvdy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBJL08gcmluZyBidWZmZXIgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzQzLVxuaW9fdXJpbmcva2J1Zi5jOjM0NDppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5jLTM0NS1cdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTcwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG5pb191cmluZy9rYnVmLmgtNzEtXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2tidWYuaDo3MjppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5oLTczLVx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9NjA5PXN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNjMxLVxuaW9fdXJpbmcvbmV0LmM6NjMyOlx0cmV0ID0gaW9fYnVmZmVyc19zZWxlY3QocmVxLCBcdTAwMjZhcmcsIHNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtNjMzLVx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIElPX1VSaW5nIE5ldHdvcmsgU3RhY2sqKgoKQWxyaWdodCwgc28gYGlvX2J1ZmZlcnNfc2VsZWN0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIHRoaWNrIG9mIHRoaW5ncyB3aXRoaW4gdGhlIGBpb191cmluZy9uZXQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBuZXR3b3JrIEkvTyBvcGVyYXRpb25zIGFyZSBoYXBwZW5pbmcsIG9yIGF0IGxlYXN0LCB0aGUgc2VsZWN0aW9uIG1lY2hhbmlzbXMgZm9yIHRoZW0uIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGdpdmVuIGhvdyBjcml0aWNhbCB0aGlzIGlzIGZvciBwZXJmb3JtYW5jZS4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlJiMzOTtyZSBtYWtpbmcgZGVjaXNpb25zIGFib3V0IHdoaWNoIGJ1ZmZlcnMgd2UmIzM5O3JlIGdvaW5nIHRvIHNlbmQgb3ZlciB0aGUgbmV0d29yay4gTm93LCB3aGF0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIHdoYXQgZGF0YSBpcyBhY3R1YWxseSBiZWluZyAqY29uc2lkZXJlZCogZm9yIHNlbmRpbmcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgZGF0YSBpdHNlbGYsIGFuZCBob3cgaXQgaXMgaW5zcGVjdGVkLCBieSB0YWtpbmcgYSBsb29rIGF0IGhvdyBgaW9fYnVmZmVyc19wZWVrYCBmYWN0b3JzIGludG8gdGhpcyBwcm9jZXNzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgbmV4dCBzdGVwIOKAkyB1bmRlcnN0YW5kIHRoZSBpbnNwZWN0aW9uIHByb2Nlc3Mgb2YgdGhlIElPIGJ1ZmZlcnMuIExldCYjMzk7cyBzZWUgaG93IGBpb19idWZmZXJzX3BlZWtgIGNvbWVzIGludG8gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19idWZmZXJzX3BlZWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTM0ND1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0zNzktXG5pb191cmluZy9rYnVmLmM6MzgwOmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5jLTM4MS1cdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcbi0tXG5pb191cmluZy9rYnVmLmg9NzI9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03My1cdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcva2J1Zi5oOjc0OmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5oLTc1LVx0XHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcbi0tXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExNzEtXHRcdFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oYXJnLm1heF9sZW4sIHNyLVx1MDAzZW1zaG90X3RvdGFsX2xlbik7XG5pb191cmluZy9uZXQuYzoxMTcyOlx0XHRyZXQgPSBpb19idWZmZXJzX3BlZWsocmVxLCBcdTAwMjZhcmcsIHNlbCk7XG5pb191cmluZy9uZXQuYy0xMTczLVx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgaW9fdXJpbmcgTmV0d29yayBTdGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgZG93biB0aGlzIGBpb19idWZmZXJzX3BlZWtgIGZ1bmN0aW9uLiBUaGUgY29kZSB0ZWxscyBtZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgd2l0aGluIGBpb191cmluZy9uZXQuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIFRvIHJlYWxseSBnZXQgYSBncmFzcCBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciwgSSYjMzk7dmUgZ290IHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiAqb3V0d2FyZCogZnJvbSBgaW9fcmVjdl9idWZfc2VsZWN0YC4gV2hlcmUgZWxzZSBpcyB0aGlzIGZ1bmN0aW9uIGdldHRpbmcgaW52b2tlZD8gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3IgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAuIFRob3NlIGFyZSBwcm9iYWJseSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLiBJIHN1c3BlY3QgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZWlyIHBhcmVudCBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBncmFzcCBvZiBob3cgdGhlIG5ldHdvcmtpbmcgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMzctXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI0OC1cdFx0c2VsLnZhbCA9IHNyLVx1MDAzZWxlbjtcbmlvX3VyaW5nL25ldC5jOjEyNDk6XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTI1MC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBJL08gQnVmZmVyaW5nKioKCk9rYXksIHNvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBpb19yZWN2YC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgYW5kIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJiMzOTtyZSBoYW5kbGluZyByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlIGlucHV0IHBhdGguIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhhdCBwaWVjZS4gQnV0IEkmIzM5O20gc3VkZGVubHkgY3VyaW91czogd2hhdCYjMzk7cyB0aGUgYW5hbG9nb3VzIGZ1bmN0aW9uIGluIHRoZSBzZW5kaW5nIHBhdGg/IElzIHRoZXJlIGEgZnVuY3Rpb24gY29tcGFyYWJsZSB0byBgaW9fcmVjdl9idWZfc2VsZWN0YCBmb3Igc2VuZCBidWZmZXJzPyBTb21ldGhpbmcgbGlrZSBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJhbGxlbCBleGlzdHMgYW5kLCBpZiBzbywgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZSBmb3Igb3VyIG92ZXJhbGwgYnVmZmVyIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0IG1pZ2h0IHJldmVhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgc2VuZCBwYXRoIGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIGluIHRlcm1zIG9mIGJ1ZmZlciBzZWxlY3Rpb24gYW5kIGF2YWlsYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2VuZF9zZWxlY3RfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTU2MD1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTYwOC1cbmlvX3VyaW5nL25ldC5jOjYwOTpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtNjEwLVx0XHRcdFx0IHN0cnVjdCBpb19icl9zZWwgKnNlbCwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZylcbi0tXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy02OTAtXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG5pb191cmluZy9uZXQuYzo2OTE6XHRcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcdTAwMjZzZWwsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtNjkyLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEkvTyBSaW5nIEJ1ZmZlciBJbnRlcmZhY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgYGlvX3JlY3ZgIGFuZCBgaW9fc2VuZGAganVtcCBvdXQgYXQgbWUgYXMgdGhlIG9idmlvdXMgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gVGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlLCByaWdodD8gSXQmIzM5O3Mgd2hlcmUgdGhlIGRhdGEgc3RhcnRzIGZsb3dpbmcuIERlZmluaXRlbHkgaGlnaCBwcmlvcml0eS4KCkkgc2VlIGEgcGF0Y2ggdGhhdCBsaW1pdHMgYGFyZy0mZ3Q7bWF4X2xlbmAgdG8gYE1BWF9SV19DT1VOVGAgd2l0aGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEludGVyZXN0aW5nLiBUaGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbnN0cmFpbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhhdCBsaW1pdC4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGBpb19yZWN2bXNnYCBhbmQgYGlvX3NlbmRtc2dgIGNhbGwgZWl0aGVyIGBpb19yZWN2X2J1Zl9zZWxlY3RgIG9yIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaG9zZSBhcmUgdGhlIG5leHQgbGV2ZWwgZG93biB0aGUgc3RhY2sgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgYmVoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMzctXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI0OC1cdFx0c2VsLnZhbCA9IHNyLVx1MDAzZWxlbjtcbmlvX3VyaW5nL25ldC5jOjEyNDk6XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTI1MC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fcmVjdm1zZ2AgSW1wbGVtZW50YXRpb24qKgoKV2FpdCBhIHNlY29uZCwgSSB0aG91Z2h0IGBpb19yZWN2bXNnYCBoYWQgYSBkaXJlY3QgY2FsbCB0byBgaW9fcmVjdl9idWZfc2VsZWN0YD8gVGhhdCBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjay4gTGV0IG1lIHB1bGwgdXAgYGlvX3VyaW5nL25ldC5jYCBhbmQgZGlnIGludG8gdGhlIGBpb19yZWN2bXNnYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgaW5jb21pbmcgbWVzc2FnZXMgYW5kIGJ1ZmZlciBzZWxlY3Rpb24uIFRoZXJlIGNvdWxkIGJlIHNvbWV0aGluZyBzdWJ0bGUgSSYjMzk7bSBtaXNzaW5nIGluIHRoZSBpbnRlcmFjdGlvbiB0aGVyZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBuZXR3b3JrIEkvTyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBwcm9jZXNzIGFsaWducyB3aXRoIHdoYXQmIzM5O3MgYWN0dWFsbHkgY29kZWQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMzctXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI0OC1cdFx0c2VsLnZhbCA9IHNyLVx1MDAzZWxlbjtcbmlvX3VyaW5nL25ldC5jOjEyNDk6XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTI1MC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ29udGV4dCoqCgpSaWdodCwgc28gYGlvX3JlY3Ztc2dgLi4uIHRoYXQmIzM5O3MganVzdCBhIGJpdCBvZiBhIHJlZCBoZXJyaW5nLiBJdCYjMzk7cyBvYnZpb3VzbHkganVzdCB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBtZWFucyBpdCBzaG93ZWQgdXAgYXMgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBUaGF0JiMzOTtzIG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29yZSBJL08gZnVuY3Rpb25zLiBNeSBmb2N1cyBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdW5kZXJzdGFuZGluZyBgaW9fcmVjdmAgYW5kIGBpb19zZW5kYC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGNhbGxzIG1pZ2h0IGludGVyYWN0LCB3aGF0IHRoZSBlcnJvciBoYW5kbGluZyBsb29rcyBsaWtlLCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IG9idmlvdXMgcGxhY2Ugd2hlcmUgYW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGlzIHByZXNlbnRpbmcgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9OTM9ZW51bSBzcl9yZXRyeV9mbGFncyB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExLVxuaW9fdXJpbmcvbmV0LmM6MTEyOnN0cnVjdCBpb19yZWN2emMge1xuaW9fdXJpbmcvbmV0LmMtMTEzLVx0c3RydWN0IGZpbGVcdFx0XHQqZmlsZTtcbi0tXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy03MzMtXG5pb191cmluZy9uZXQuYzo3MzQ6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9uZXQuYy03MzUtXHRcdFx0XHQgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzU3LVxuaW9fdXJpbmcvbmV0LmM6NzU4OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTc1OS1cdFx0XHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzczLVx0fVxuaW9fdXJpbmcvbmV0LmM6Nzc0Olx0cmV0dXJuIGlvX3JlY3Ztc2dfbXNob3RfcHJlcChyZXEsIGlvbXNnLCBtc2cubXNnX25hbWVsZW4sXG5pb191cmluZy9uZXQuYy03NzUtXHRcdFx0XHRcdG1zZy5tc2dfY29udHJvbGxlbik7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNzc3LVxuaW9fdXJpbmcvbmV0LmM6Nzc4OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvbmV0LmMtNzc5LXtcbi0tXG5pb191cmluZy9uZXQuYy04MDUtXG5pb191cmluZy9uZXQuYzo4MDY6XHRyZXR1cm4gaW9fcmVjdm1zZ19jb3B5X2hkcihyZXEsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtODA3LX1cbi0tXG5pb191cmluZy9uZXQuYy04MTEtXG5pb191cmluZy9uZXQuYzo4MTI6aW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtODEzLXtcbi0tXG5pb191cmluZy9uZXQuYy04NzAtXHRzci1cdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMgPSAwO1xuaW9fdXJpbmcvbmV0LmM6ODcxOlx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xuaW9fdXJpbmcvbmV0LmMtODcyLX1cbi0tXG5pb191cmluZy9uZXQuYy04NzgtLypcbmlvX3VyaW5nL25ldC5jOjg3OTogKiBGaW5pc2hlcyBpb19yZWN2IGFuZCBpb19yZWN2bXNnLlxuaW9fdXJpbmcvbmV0LmMtODgwLSAqXG4tLVxuaW9fdXJpbmcvbmV0LmMtODgzLSAqL1xuaW9fdXJpbmcvbmV0LmM6ODg0OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTg4NS1cdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy05NjYtXG5pb191cmluZy9uZXQuYzo5Njc6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG5pb191cmluZy9uZXQuYy05NjgtXHRcdFx0XHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1Zixcbi0tXG5pb191cmluZy9uZXQuYy05OTEtXG5pb191cmluZy9uZXQuYzo5OTI6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XG5pb191cmluZy9uZXQuYy05OTMtXHRzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQgbXNnO1xuLS1cbmlvX3VyaW5nL25ldC5jLTk5Ni1cbmlvX3VyaW5nL25ldC5jOjk5NzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpb19zcl9tc2cgKmlvLFxuaW9fdXJpbmcvbmV0LmMtOTk4LVx0XHRcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0xMDAyLVx0aW50IGNvcHlfbGVuO1xuaW9fdXJpbmcvbmV0LmM6MTAwMzpcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xuaW9fdXJpbmcvbmV0LmMtMTAwNC1cbi0tXG5pb191cmluZy9uZXQuYy0xMDM5LVx0LyogZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZ2FwIGJldHdlZW4gaGRyIGFuZCBzb2NrYWRkcl9zdG9yYWdlICovXG5pb191cmluZy9uZXQuYzoxMDQwOlx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XG5pb191cmluZy9uZXQuYy0xMDQxLVx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcbi0tXG5pb191cmluZy9uZXQuYy0xMDUwLVxuaW9fdXJpbmcvbmV0LmM6MTA1MTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtMTA1Mi17XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA4My1cdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XG5pb191cmluZy9uZXQuYzoxMDg0Olx0XHRcdHJldCA9IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoa21zZywgc3IsIFx1MDAyNnNlbC5hZGRyLCBcdTAwMjZsZW4pO1xuaW9fdXJpbmcvbmV0LmMtMTA4NS1cdFx0XHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA5Ni1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuaW9fdXJpbmcvbmV0LmM6MTA5NzpcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtMTA5OC1cdFx0XHRcdFx0ICAgXHUwMDI2bXNob3RfZmluaXNoZWQpO1xuLS1cbmlvX3VyaW5nL25ldC5jLTExMzEtXHRzZWwudmFsID0gcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTEzMjpcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG5pb191cmluZy9uZXQuYy0xMTMzLVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMTM3LVxuaW9fdXJpbmcvbmV0LmM6MTEzODpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMzktXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTIwOS1cbmlvX3VyaW5nL25ldC5jOjEyMTA6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTEyMTEte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyNDgtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjQ5Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyNTAtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI5MS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMjkyOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbmlvX3VyaW5nL25ldC5jLTEyOTMtXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyOTctXG5pb191cmluZy9uZXQuYzoxMjk4OmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtMTI5OS17XG5pb191cmluZy9uZXQuYzoxMzAwOlx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcbmlvX3VyaW5nL25ldC5jLTEzMDEtXHR1bnNpZ25lZCBpZnFfaWR4O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEzMjUtXG5pb191cmluZy9uZXQuYzoxMzI2OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTEzMjcte1xuaW9fdXJpbmcvbmV0LmM6MTMyODpcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG5pb191cmluZy9uZXQuYy0xMzI5LVx0c3RydWN0IHNvY2tldCAqc29jaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgQ29yZSBJL08gRW50cnkgUG9pbnRzKioKCkFscmlnaHQsIG15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYGlvX3NlbmRtc2dgLCBhbmQgYGlvX3JlY3Z6Y2AgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBJL08gb3BlcmF0aW9ucyBoZXJlLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgZGF0YSBmbG93IGJlZ2lucywgdGhlIHBvaW50cyBvZiBjb250YWN0LCBzbyB0byBzcGVhay4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBlYWNoLCBlc3BlY2lhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgYnVmZmVyIG1lY2hhbmlzbXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nJiMzOTtzIGJvdGhlcmluZyBtZSBhYm91dCBgaW9fcmVjdnpjYC4gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBpdCYjMzk7cyBkaXJlY3RseSBjYWxsaW5nIGBpb19idWZmZXJzX3BlZWtgIG9yIGBpb19idWZmZXJzX3NlbGVjdGAuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgJiMzNDt0aGF0IGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQsJiMzNDsgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCBtZSBtYWtlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGRlZXBlciBkaXZlIHNwZWNpZmljYWxseSBpbnRvIHRoZSBgaW9fcmVjdnpjYCBpbXBsZW1lbnRhdGlvbiB0byB2ZXJpZnkgdGhpcy4gR290dGEgY2xlYXIgdGhhdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVjdnpjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9OTM9ZW51bSBzcl9yZXRyeV9mbGFncyB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExLVxuaW9fdXJpbmcvbmV0LmM6MTEyOnN0cnVjdCBpb19yZWN2emMge1xuaW9fdXJpbmcvbmV0LmMtMTEzLVx0c3RydWN0IGZpbGVcdFx0XHQqZmlsZTtcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI5Ny1cbmlvX3VyaW5nL25ldC5jOjEyOTg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0xMjk5LXtcbmlvX3VyaW5nL25ldC5jOjEzMDA6XHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xuaW9fdXJpbmcvbmV0LmMtMTMwMS1cdHVuc2lnbmVkIGlmcV9pZHg7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTMyNS1cbmlvX3VyaW5nL25ldC5jOjEzMjY6aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtMTMyNy17XG5pb191cmluZy9uZXQuYzoxMzI4Olx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcbmlvX3VyaW5nL25ldC5jLTEzMjktXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpb19yZWN2emMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgaW9fcmVjdnpjYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBmbG93LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHplcm8tY29weSBhc3BlY3RzIGFuZCBob3cgZWZmaWNpZW50bHkgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGRhdGEgdHJhbnNmZXIuIEFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50IGlzc3Vlcz8gTGV0JiMzOTtzIHRyYWNlIHRocm91Z2ggaXQgYW5kIHNwb3QgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiBHb3R0YSBrZWVwIGFuIGV5ZSBvdXQgZm9yIGVkZ2UgY2FzZXMsIHRvbyAtIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZXJyb3JzIGdyYWNlZnVsbHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHdlJiMzOTtyZSBhY3R1YWxseSAqZG9pbmcqIHRoZSB6ZXJvLWNvcHkgbWFnaWMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbmVmZmljaWVuY2llcyBjcmVlcGluZyBpbiB0aGF0IHdlIGNhbiBlbGltaW5hdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzI2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzI2Olx0aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuMTMyNzpcdHtcbjEzMjg6XHRcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG4xMzI5Olx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTMzMDpcdFx0dW5zaWduZWQgaW50IGxlbjtcbjEzMzE6XHRcdGludCByZXQ7XG4xMzMyOlx0XG4xMzMzOlx0XHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVx1MDAzZWZpbGUpO1xuMTMzNDpcdFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcbjEzMzU6XHRcdFx0cmV0dXJuIC1FTk9UU09DSztcbjEzMzY6XHRcbjEzMzc6XHRcdGlmICghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcdTAwMjZcdTAwMjZcbjEzMzg6XHRcdCAgICAoemMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUKSlcbjEzMzk6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4xMzQwOlx0XG4xMzQxOlx0XHRsZW4gPSB6Yy1cdTAwM2VsZW47XG4xMzQyOlx0XHRyZXQgPSBpb196Y3J4X3JlY3YocmVxLCB6Yy1cdTAwM2VpZnEsIHNvY2ssIDAsIGlzc3VlX2ZsYWdzLCBcdTAwMjZ6Yy1cdTAwM2VsZW4pO1xuMTM0MzpcdFx0aWYgKGxlbiBcdTAwMjZcdTAwMjYgemMtXHUwMDNlbGVuID09IDApIHtcbjEzNDQ6XHRcdFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcbjEzNDU6XHRcbjEzNDY6XHRcdFx0cmV0dXJuIElPVV9DT01QTEVURTtcbjEzNDc6XHRcdH1cbjEzNDg6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjPSAwKSBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcbjEzNDk6XHRcdFx0aWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpXG4xMzUwOlx0XHRcdFx0cmV0ID0gLUVJTlRSO1xuMTM1MTpcdFx0XHRpZiAocmV0ID09IElPVV9SRVFVRVVFKVxuMTM1MjpcdFx0XHRcdHJldHVybiBJT1VfUkVRVUVVRTtcbjEzNTM6XHRcbjEzNTQ6XHRcdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4xMzU1Olx0XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbjEzNTY6XHRcdFx0cmV0dXJuIElPVV9DT01QTEVURTtcbjEzNTc6XHRcdH1cbjEzNTg6XHRcdHJldHVybiBJT1VfUkVUUlk7XG4xMzU5Olx0fVxuMTM2MDpcdFxuMTM2MTpcdHZvaWQgaW9fc2VuZF96Y19jbGVhbnVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuMTM2MjpcdHtcbjEzNjM6XHRcdHN0cnVjdCBpb19zcl9tc2cgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4xMzY0Olx0XHRzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppbyA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuMTM2NTpcdFxuMTM2NjpcdFx0aWYgKHJlcV9oYXNfYXN5bmNfZGF0YShyZXEpKVxuMTM2NzpcdFx0XHRpb19uZXRtc2dfaW92ZWNfZnJlZShpbyk7XG4xMzY4Olx0XHRpZiAoemMtXHUwMDNlbm90aWYpIHtcbjEzNjk6XHRcdFx0aW9fbm90aWZfZmx1c2goemMtXHUwMDNlbm90aWYpO1xuMTM3MDpcdFx0XHR6Yy1cdTAwM2Vub3RpZiA9IE5VTEw7XG4xMzcxOlx0XHR9XG4xMzcyOlx0fVxuMTM3MzpcdFxuMTM3NDpcdCNkZWZpbmUgSU9fWkNfRkxBR1NfQ09NTU9OIChJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCB8IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpXG4xMzc1Olx0I2RlZmluZSBJT19aQ19GTEFHU19WQUxJRCAgKElPX1pDX0ZMQUdTX0NPTU1PTiB8IElPUklOR19TRU5EX1pDX1JFUE9SVF9VU0FHRSB8IFxcXG4xMzc2Olx0XHRcdFx0XHRJT1JJTkdfU0VORF9WRUNUT1JJWkVEKVxuMTM3NzpcdFxuMTM3ODpcdGludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbjEzNzk6XHR7XG4xMzgwOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuMTM4MTpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuMTM4MjpcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2c7XG4xMzgzOlx0XHRzdHJ1Y3QgaW9fa2lvY2IgKm5vdGlmO1xuMTM4NDpcdFx0dTY0IHVzZXJfZGF0YTtcbjEzODU6XHRcdGludCByZXQ7XG4xMzg2Olx0XG4xMzg3Olx0XHR6Yy1cdTAwM2Vkb25lX2lvID0gMDtcbjEzODg6XHRcbjEzODk6XHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0Uoc3FlLVx1MDAzZV9fcGFkMlswXSkpKVxuMTM5MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzOTE6XHRcdC8qIHdlIGRvbiYjMzk7dCBzdXBwb3J0IElPU1FFX0NRRV9TS0lQX1NVQ0NFU1MganVzdCB5ZXQgKi9cbjEzOTI6XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0NRRV9TS0lQKVxuMTM5MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzOTQ6XHRcbjEzOTU6XHRcdG5vdGlmID0gemMtXHUwMDNlbm90aWYgPSBpb19hbGxvY19ub3RpZihjdHgpO1xuMTM5NjpcdFx0aWYgKCFub3RpZilcbjEzOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMzk4Olx0XHR1c2VyX2RhdGEgPSBSRUFEX09OQ0Uoc3FlLVx1MDAzZWFkZHIzKTtcbjEzOTk6XHRcdGlmICghdXNlcl9kYXRhKVxuMTQwMDpcdFx0XHR1c2VyX2RhdGEgPSByZXEtXHUwMDNlY3FlLnVzZXJfZGF0YTtcbjE0MDE6XHRcbjE0MDI6XHRcdG5vdGlmLVx1MDAzZWNxZS51c2VyX2RhdGEgPSB1c2VyX2RhdGE7XG4xNDAzOlx0XHRub3RpZi1cdTAwM2VjcWUucmVzID0gMDtcbjE0MDQ6XHRcdG5vdGlmLVx1MDAzZWNxZS5mbGFncyA9IElPUklOR19DUUVfRl9OT1RJRjtcbjE0MDU6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVAgfCBSRVFfRl9QT0xMX05PX0xBWlk7XG4xNDA2Olx0XG4xNDA3Olx0XHR6Yy1cdTAwM2VmbGFncyA9IFJFQURfT05DRShzcWUtXHUwMDNlaW9wcmlvKTtcbjE0MDg6XHRcdGlmICh1bmxpa2VseSh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgfklPX1pDX0ZMQUdTX0NPTU1PTikpIHtcbjE0MDk6XHRcdFx0aWYgKHpjLVx1MDAzZWZsYWdzIFx1MDAyNiB+SU9fWkNfRkxBR1NfVkFMSUQpXG4xNDEwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDExOlx0XHRcdGlmICh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFTkRfWkNfUkVQT1JUX1VTQUdFKSB7XG4xNDEyOlx0XHRcdFx0c3RydWN0IGlvX25vdGlmX2RhdGEgKm5kID0gaW9fbm90aWZfdG9fZGF0YShub3RpZik7XG4xNDEzOlx0XG4xNDE0Olx0XHRcdFx0bmQtXHUwMDNlemNfcmVwb3J0ID0gdHJ1ZTtcbjE0MTU6XHRcdFx0XHRuZC1cdTAwM2V6Y191c2VkID0gZmFsc2U7XG4xNDE2Olx0XHRcdFx0bmQtXHUwMDNlemNfY29waWVkID0gZmFsc2U7XG4xNDE3Olx0XHRcdH1cbjE0MTg6XHRcdH1cbjE0MTk6XHRcbjE0MjA6XHRcdHpjLVx1MDAzZWxlbiA9IFJFQURfT05DRShzcWUtXHUwMDNlbGVuKTtcbjE0MjE6XHRcdHpjLVx1MDAzZW1zZ19mbGFncyA9IFJFQURfT05DRShzcWUtXHUwMDNlbXNnX2ZsYWdzKSB8IE1TR19OT1NJR05BTCB8IE1TR19aRVJPQ09QWTtcbjE0MjI6XHRcdHJlcS1cdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0Uoc3FlLVx1MDAzZWJ1Zl9pbmRleCk7XG4xNDIzOlx0XHRpZiAoemMtXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpXG4xNDI0Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9OT1dBSVQ7XG4xNDI1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJL08gT3BlcmF0aW9ucyBpbiBSZWxhdGlvbiB0byBpb191cmluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGBpb19yZWN2emNgIGlzIG5vdCB1dGlsaXppbmcgYGlvX2J1ZmZlcnNfcGVla2Agb3IgYGlvX2J1ZmZlcnNfc2VsZWN0YC4gVGhhdCBtZWFucyB0aGUgaW50ZXJlc3RpbmcgYXJlYXMgZm9yIGludmVzdGlnYXRpb24gYXJlIHJlYWxseSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYW5kIGBpb19zZW5kbXNnYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHdoZW4gd29ya2luZyB3aXRoIGBpb191cmluZ2AuIGBDT05GSUdfSU9fVVJJTkdgIGlzLCBvZiBjb3Vyc2UsIGEgZ2l2ZW4sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSAtIHRoYXQgc2hvdWxkIGhvbGQgdGhlIGFuc3dlcnMgcmVnYXJkaW5nIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkludmVzdGlnYXRpbmcgdGhlIGlvX3VyaW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBpb191cmluZ2AgaXMgZW5hYmxlZCBieSB0aGUgYENPTkZJR19JT19VUklOR2Agb3B0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBkZWZpbmVkLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTtsbCBzdGFydCB3aXRoIGVpdGhlciBgaW5pdC9LY29uZmlnYCDigJMgdGhhdCYjMzk7cyBhIGNsYXNzaWMgcGxhY2UgZm9yIGZ1bmRhbWVudGFsIG9wdGlvbnMg4oCTIG9yIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHksIGBpb191cmluZy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCB3b3VsZCBsaWtlbHkgcmVzaWRlIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIHN1YnN5c3RlbSBpdHNlbGYuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIGl0cyBkZWZpbml0aW9uLCBhbmQgaG9wZWZ1bGx5IGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE0LVxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM2LVxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5MzgtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkNoZWNraW5nIGBpb191cmluZy9rYnVmLmNgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGBDT05GSUdfSU9fVVJJTkdgIGlzIHByYWN0aWNhbGx5IGFzc3VtZWQgYXQgdGhpcyBwb2ludCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaXMgcGF0Y2ggbGFuZGVkIGluIGBpb191cmluZy9rYnVmLmNgLCBzbyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBidWlsZCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8ganVtcCBpbnRvIGBpb191cmluZy9NYWtlZmlsZWAgYW5kIHF1aWNrbHkgbG9vayBmb3IgYW55dGhpbmcgdGhhdCB0YXJnZXRzIHRoYXQgc3BlY2lmaWMgZmlsZS4gSXQgY291bGQgYmUgYW4gb2J2aW91cyBjb25maWd1cmF0aW9uIGNoZWNrLCBvciBtYXliZSBhIG1vcmUgc3VidGxlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGBpb191cmluZ2AgZmVhdHVyZXMuIFRoZSBNYWtlZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdGhlcmUgaW5mbHVlbmNpbmcgaG93IGBrYnVmLmNgIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tidWYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT03PWVuZGlmXG5pb191cmluZy9NYWtlZmlsZS04LVxuaW9fdXJpbmcvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU9fVVJJTkcpXHRcdCYjNDM7PSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXG5pb191cmluZy9NYWtlZmlsZS0xMC1cdFx0XHRcdFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTM2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVmZmVyIFBlZWsgTGVuZ3RoIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkLCBhbGJlaXQgaW1wb3J0YW50LCBjaGFuZ2UgZm9yIGBpb191cmluZ2AuIEl0IHNlZW1zIHRoaXMgY29kZSBwYXRoIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUgZW5vdWdoOiB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBtYXhpbXVtIGJ1ZmZlciBsZW5ndGggY2hlY2sgd2l0aGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIG1ha2luZyBzdXJlIGBhcmctJmd0O21heF9sZW5gIGlzbiYjMzk7dCBleGNlZWRpbmcgYE1BWF9SV19DT1VOVGAgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCB0aGUgcGVlayBvcGVyYXRpb24uIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZXhjZXNzaXZlbHkgbGFyZ2UgcmVhZHMgb3Igd3JpdGVzLCBndWFyZGluZyBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byB1bmJvdW5kZWQgSU8uIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGNvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgbmF0dXJlIG9mIGBpb191cmluZ2AuCgpUaGUgY29yZSBsb2dpYyBoZXJlIGlzIHByZXR0eSBjbGVhcjogd2UmIzM5O3JlIHVzaW5nIGBtaW5fdGAgdG8gY2xhbXAgYGFyZy0mZ3Q7bWF4X2xlbmAgdG8gYE1BWF9SV19DT1VOVGAuIEFsc28gd29ydGggbm90aW5nIHRoYXQgaWYgYGFyZy0mZ3Q7bWF4X2xlbmAgaXNuJiMzOTt0IHNldCwgdGhlbiB3ZSYjMzk7cmUgbm93IHNldHRpbmcgaXQgdG8gYE1BWF9SV19DT1VOVGAuIFByZXZpb3VzbHkgaXQgd2FzIHNldCB0byBgSU5UX01BWGAuCgpNeSBpbW1lZGlhdGUgZm9jdXMgbm93IHNoaWZ0cyB0byB0aGUgY2FsbGVycyBvZiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBzcGVjaWZpY2FsbHkgYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYW5kIGBpb19zZW5kbXNnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbGVuZ3RoIGNvbnN0cmFpbnQgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBsb2dpYyBpbiB0aG9zZSBmdW5jdGlvbnMuIEFyZSB0aGVyZSBhbnkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCB0aGUgbWF4aW11bSBidWZmZXIgbGVuZ3RoPyBEb2VzIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlIGFueSBhZGp1c3RtZW50cyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXZlbiBpZiBpdCBzZWVtcyBzYWZlIGF0IGZpcnN0IGdsYW5jZT8KCkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2guIEkgc2hvdWxkIGlkZW50aWZ5IGFueSBvdGhlciBjYWxsZXJzIG9mIGBpb19idWZmZXJzX3NlbGVjdGAgb3IgYGlvX2J1ZmZlcnNfcGVla2Agd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgYmVlbiBvdmVybG9va2VkLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gYW5hbHl6ZSB0aGUgY29tcGxldGUgY2FsbCBncmFwaCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgaXMgbG9jYWxpemVkIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19idWZmZXJzX3NlbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9MjUzPXN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0zNDMtXG5pb191cmluZy9rYnVmLmM6MzQ0OmludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmMtMzQ1LVx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9rYnVmLmg9NzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbmlvX3VyaW5nL2tidWYuaC03MS1cdFx0XHRcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcva2J1Zi5oOjcyOmludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmgtNzMtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbi0tXG5pb191cmluZy9uZXQuYz02MDk9c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbi0tXG5pb191cmluZy9uZXQuYy02MzEtXG5pb191cmluZy9uZXQuYzo2MzI6XHRyZXQgPSBpb19idWZmZXJzX3NlbGVjdChyZXEsIFx1MDAyNmFyZywgc2VsLCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuYy02MzMtXHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRm9jdXNpbmcgb24gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19idWZmZXJzX3NlbGVjdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaGVyZS4gVGhlIGltcGxpY2F0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlICpvbmx5KiBjYWxsIHBhdGggdGhhdCBsZWFkcyB0byBgaW9fYnVmZmVyc19zZWxlY3RgIGdvZXMgdGhyb3VnaCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhpcyBpcyBhIGNydWNpYWwgb2JzZXJ2YXRpb24uIEl0IGltbWVkaWF0ZWx5IG5hcnJvd3MgbXkgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zIGludGltYXRlbHkuCgpXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZGVzaWduPyBJcyBgaW9fYnVmZmVyc19zZWxlY3RgIGNvbnNpZGVyZWQgYSBwcml2YXRlIGhlbHBlciBvZiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgb3IgaXMgaXQgcG90ZW50aWFsbHkgbW9yZSBvZiBhIHNoYXJlZCByZXNvdXJjZSwgYnV0IGp1c3QgKnVzZWQqIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/IElmIGl0JiMzOTtzIHRoZSBsYXR0ZXIsIGNvdWxkIHRoZXJlIGJlIGltcGxpY2F0aW9ucyBmb3IgZnV0dXJlIGNvZGUgbW9kaWZpY2F0aW9ucz8gVGhlIHRpZ2h0IGNvdXBsaW5nIHNob3VsZCBicmluZyB1cCBhIGZldyBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlOgoKKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFByb3BhZ2F0aW9uOioqIEhvdyBkb2VzIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGhhbmRsZSBlcnJvcnMgcmV0dXJuZWQgZnJvbSBgaW9fYnVmZmVyc19zZWxlY3RgPyBJcyB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcsIG9yIGlzIGl0IGFzc3VtZWQgdGhhdCBgaW9fYnVmZmVyc19zZWxlY3RgICphbHdheXMqIHN1Y2NlZWRzIHdoZW4gY2FsbGVkIGZyb20gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmA/CiogICAqKlBlcmZvcm1hbmNlIENvbnNpZGVyYXRpb25zOioqIFdoYXQmIzM5O3MgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YD8gSXMgaXQgb3B0aW1pemVkLCBvciBpcyB0aGlzIHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBjb3VsZCBleGlzdD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZnJlcXVlbnQsIGhpZ2gtdm9sdW1lIGNhbGxzPyBBbnkgcmVzb3VyY2UgY29udGVudGlvbiBjb25zaWRlcmF0aW9ucyBoZXJlPwoqICAgKipUZXN0aW5nIGFuZCBEZWJ1Z2dpbmc6KiogVGhpcyBwcm92aWRlcyBhIHNpbXBsaWZpZWQgZW50cnkgcG9pbnQgZm9yIGRlYnVnZ2luZyBgaW9fYnVmZmVyc19zZWxlY3RgLiBJZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgSSBjYW4gZGlyZWN0bHkgZm9jdXMgb24gc2NlbmFyaW9zIGluaXRpYXRlZCB0aHJvdWdoIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGUgY29udHJvbCBmbG93IGlzIHN0cmFpZ2h0Zm9yd2FyZC4KKiAgICoqUG90ZW50aWFsIGZvciBSZWZhY3RvcmluZzoqKiBDb3VsZCB0aGlzIGRlc2lnbiBjcmVhdGUgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZnJhZ2lsaXR5PyBTaG91bGQgYGlvX2J1ZmZlcnNfc2VsZWN0YCBiZSBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGZ1dHVyZT8gV2hhdCB3b3VsZCB0aGF0IGVudGFpbCBmcm9tIGEgdGVzdGluZy92YWxpZGF0aW9uIHBlcnNwZWN0aXZlPwoKSW4gc3VtbWFyeSwgdGhpcyBpcyBhIGNsZWFuLCBjb250YWluZWQgcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgcmVhbGx5IGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiAqaG93KiB0aGVzZSB0d28gYXJlIGxpbmtlZCB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvbiBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIG1haW50YWluYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0zNDQ9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzc5LVxuaW9fdXJpbmcva2J1Zi5jOjM4MDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0zODEtXHRcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTcyPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmgtNzMtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2tidWYuaDo3NDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03NS1cdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTEzOD1zdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0xMTcxLVx0XHRcdGFyZy5tYXhfbGVuID0gbWluX25vdF96ZXJvKGFyZy5tYXhfbGVuLCBzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xuaW9fdXJpbmcvbmV0LmM6MTE3MjpcdFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXHUwMDI2YXJnLCBzZWwpO1xuaW9fdXJpbmcvbmV0LmMtMTE3My1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTQwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGlnZ2luZyBpbnRvIEJ1ZmZlciBJbnRlcmFjdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgYnVmZmVyIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFnYWluLiBJJiMzOTttIHNlZWluZyB0aGF0IG9ubHkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgc2VlbXMgdG8gZGlyZWN0bHkgY2FsbCBgaW9fYnVmZmVyc19wZWVrYC4gQnV0IHRoYXQmIzM5O3MganVzdCB0aGUgcGx1cmFsIHZlcnNpb24gKGBpb19idWZmZXJzYCkuCgpJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gV2hhdCBhYm91dCBgaW9fYnVmZmVyX3NlbGVjdGAgd2l0aCBhICpzaW5ndWxhciogYGJ1ZmZlcmA/IElzIHRoYXQgcmVsYXRlZCB0byB0aGlzIHBlZWsgZnVuY3Rpb24gaW4gc29tZSB3YXk/IE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhIGNvbm5lY3Rpb24gaGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgc2luZ3VsYXIgYGlvX2J1ZmZlcl9zZWxlY3RgIGFjdHVhbGx5IGNhbGxzIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEl0JiMzOTtzIHBvc3NpYmxlIGl0IGlzIGhhbmRsaW5nIGluZGl2aWR1YWwgYnVmZmVycywgcGVyaGFwcyBjaGVja2luZyB0aGVtIGFnYWluc3QgdGhlIHJpbmcgYnVmZmVycyBzb21laG93LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19idWZmZXJfc2VsZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0xOTI9c3RhdGljIHN0cnVjdCBpb19icl9zZWwgaW9fcmluZ19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbi0tXG5pb191cmluZy9rYnVmLmMtMjI5LVxuaW9fdXJpbmcva2J1Zi5jOjIzMDpzdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxuaW9fdXJpbmcva2J1Zi5jLTIzMS1cdFx0XHRcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTYwPXN0cnVjdCBidWZfc2VsX2FyZyB7XG4tLVxuaW9fdXJpbmcva2J1Zi5oLTY5LVxuaW9fdXJpbmcva2J1Zi5oOjcwOnN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG5pb191cmluZy9rYnVmLmgtNzEtXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbi0tXG5pb191cmluZy9uZXQuYz0xMDUxPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA3OC1cbmlvX3VyaW5nL25ldC5jOjEwNzk6XHRcdHNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTA4MC1cdFx0aWYgKCFzZWwuYWRkcilcbi0tXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExOTQtXG5pb191cmluZy9uZXQuYzoxMTk1Olx0XHQqc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNmxlbiwgc3ItXHUwMDNlYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuYy0xMTk2LVx0XHRpZiAoIXNlbC1cdTAwM2VhZGRyKVxuLS1cbmlvX3VyaW5nL3J3LmM9MTEwPXN0YXRpYyBpbnQgX19pb19pbXBvcnRfcndfYnVmZmVyKGludCBkZGlyLCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9ydy5jLTEyMi1cdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbmlvX3VyaW5nL3J3LmM6MTIzOlx0XHQqc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNnNxZV9sZW4sIGlvLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvcncuYy0xMjQtXHRcdGlmICghc2VsLVx1MDAzZWFkZHIpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MzYzPXN0cnVjdCBpb19icl9zZWwgaW9fdXJpbmdfY21kX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTM3NC1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM3NTpcdHJldHVybiBpb19idWZmZXJfc2VsZWN0KHJlcSwgbGVuLCBidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTM3Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBjb2RlLCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVjaXBoZXJpbmcgdGhlIEJ1ZmZlciBTZWxlY3Rpb24gYW5kIFBlZWsgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyB1bnRhbmdsZSB0aGlzLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgc3lzdGVtIHNlbGVjdHMgYW5kICYjMzQ7cGVla3MmIzM0OyBpbnRvIEkvTyBidWZmZXJzLiBJbml0aWFsbHksIEkgdGhvdWdodCBgaW9fYnVmZmVyX3NlbGVjdGAg4oCTIG5vdGljZSB0aGUgc2luZ3VsYXIgJiMzNDtidWZmZXImIzM0OyDigJMgd2FzIGRpcmVjdGx5IHRpZWQgdG8gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCDigJMgdGhlIHBsdXJhbC4gQnV0IGhhbmcgb24sIGl0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgdGhlIHNpbmd1bGFyIGBpb19yaW5nX2J1ZmZlcl9zZWxlY3RgIGZ1bmN0aW9uIGluc3RlYWQuCgpUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhlIHBhdGNoIGlzIG1ha2luZyBjaGFuZ2VzIHRvIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIGFuZCB0aGVzZSBhcmUgdGhlICpwbHVyYWwqLiBTbywgd2UgaGF2ZSBhbiBpbml0aWFsIGRpc2Nvbm5lY3QgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb24gbmFtZXMuCgpOb3csIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgdGhhdCB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGFyZSBhY3R1YWxseSBgaW9fYnVmZmVyc19zZWxlY3RgIChwbHVyYWwpIGFuZCBgaW9fYnVmZmVyc19wZWVrYCAocGx1cmFsKS4gVGhlc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHRoZSBzZW5kL3JlY2VpdmUgcm91dGluZXM6IGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gV2hpY2ggSSByZWNvZ25pemUgYXMgaW50ZXJuYWwgaGVscGVycyB0aGF0IGFyZSBpbiB0dXJuIHVzZWQgYnkgb3VyIGZhbWlsaWFyIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIHJvdXRpbmVzLgoKSG9sZCBvbiBhIHNlYy4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIGdvdCB0aGlzIHJpZ2h0LiBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgaW9fcmVjdm1zZ2AgKmFsc28qIGNhbGxzIGBpb19yZWN2X2J1Zl9zZWxlY3RgPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgaW9fcmVjdm1zZ2AgaW1wbGVtZW50YXRpb24uLi4ganVzdCB0byBiZSBjZXJ0YWluLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gaGF2ZSB0aGF0IGVudGlyZSBjYWxsIGNoYWluIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlY3ZfYnVmX3NlbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTEwNTE9aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMTM3LVxuaW9fdXJpbmcvbmV0LmM6MTEzODpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMzktXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmM9MTIxMD1pbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTEyNDgtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjQ5Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyNTAtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBpb19yZWN2bXNnYCBhbmQgYGlvX3NlbmRtc2dgIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBJL08gcm91dGluZXMgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCwgc3BlY2lmaWNhbGx5IGBpb19yZWN2bXNnYC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gaXQgdXNlZCBgaW9fcmVjdl9idWZfc2VsZWN0YCwgYnV0IEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIGNvcnJlY3Rpb24gaGVyZSAtIGl0IGFjdHVhbGx5IGNhbGxzIGBpb19idWZmZXJfc2VsZWN0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IHRoZSBkaWZmZXJlbmNlIGluIHdoaWNoIGJ1ZmZlciBzZWxlY3Rpb24gbWVjaGFuaXNtIGlzIHVzZWQgY2FuIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJdCBhbHNvIGFmZmVjdHMgdGhlIGZsb3cgb2YgZGF0YSBhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZC4KCk5vdywgdGhhdCBicmluZ3MgdXAgYSBnb29kIHBvaW50LiBJZiBgaW9fcmVjdm1zZ2AgYmVoYXZlcyB0aGlzIHdheSwgd2hhdCBpcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8gc2VuZCBhIG1lc3NhZ2U/IFRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgdGhpcyBhbmFseXNpcyBpcyB0byBjaGVjayBob3cgYGlvX3NlbmRtc2dgIGZ1bmN0aW9ucy4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBzYW1lIHBhdHRlcm4gaG9sZHM7IGlmIGl0IGNhbGxzIGBpb19idWZmZXJfc2VsZWN0YCwgb3Igc29tZSBvdGhlciBzZWxlY3Rpb24gbWV0aG9kLiBEZXRlcm1pbmluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiBjYWxsIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgSS9PIHNjaGVtZSB0aGF0JiMzOTtzIHVzZWQuIFRoaXMgaGFzIHRvIGJlIHVuZGVyc3Rvb2QgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQgb24gaG93IHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG9yIHBlcmZvcm1hbmNlIGFyZSBiZWluZyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2VuZF9zZWxlY3RfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9NTYwPWludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNjA4LVxuaW9fdXJpbmcvbmV0LmM6NjA5OnN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXG5pb191cmluZy9uZXQuYy02MTAtXHRcdFx0XHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nz1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTY5MC1cdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbmlvX3VyaW5nL25ldC5jOjY5MTpcdFx0cmV0ID0gaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHJlcSwgaXNzdWVfZmxhZ3MsIFx1MDAyNnNlbCwga21zZyk7XG5pb191cmluZy9uZXQuYy02OTItXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBpb19zZW5kbXNnYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCBgaW9fc2VuZG1zZ2AgaXNuJiMzOTt0IGNhbGxpbmcgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhpcy4gVGhpcyBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBpc3N1ZXMg4oCTIGFueSBwcm9ibGVtcyByZWxhdGVkIHRvIHRoaXMgbm9uLWNhbGwgd291bGQgbGlrZWx5IHJlc2lkZSB3aXRoaW4gdGhlIGxvZ2ljIG9mIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCB0aGVuLgoKVG8gY29uZmlybSB0aGlzIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvbm5lY3Rpb25zIEkmIzM5O20gbWlzc2luZywgSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBhdWRpdCB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZm9yIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgIGFnYWluLiBUaGV5IHNob3VsZCBiZSB0aGUgb25lcyBpbnRlcmFjdGluZyB3aXRoIHRob3NlIGJ1ZmZlcnMsIGFuZCBhIGRlZXBlciBkaXZlIG1pZ2h0IGlsbHVtaW5hdGUgYW55IHNpZGUgZWZmZWN0cyBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYnJvYWRlciBiZWhhdmlvdXIgb2YgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0yNTM9c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM0My1cbmlvX3VyaW5nL2tidWYuYzozNDQ6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0zNDUtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2tidWYuaD03MD1zdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxuaW9fdXJpbmcva2J1Zi5oLTcxLVx0XHRcdFx0ICB1bnNpZ25lZCBidWZfZ3JvdXAsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9rYnVmLmg6NzI6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03My1cdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTYwOT1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuLS1cbmlvX3VyaW5nL25ldC5jLTYzMS1cbmlvX3VyaW5nL25ldC5jOjYzMjpcdHJldCA9IGlvX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTYzMy1cdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBEZWR1Y3RpdmUgUmVhc29uaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGUga2V5IG9ic2VydmF0aW9uIGhlcmUgaXMgdGhlIGV4cGxpY2l0IG1lbnRpb24gb2YgdGhlIGZ1bmN0aW9uIGBpb19idWZmZXJzX3NlbGVjdGAuIE15IHRob3VnaHQgaXMgdGhhdCBJIG5lZWQgdG8gem9vbSBpbiBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBUaGUgdGV4dCBjbGVhcmx5IHN0YXRlcyB0aGF0IG9ubHkgdGhlIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGZ1bmN0aW9uIGFjdHVhbGx5IG1ha2VzIGEgY2FsbCB0byBgaW9fYnVmZmVyc19zZWxlY3RgLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IEkgc2hvdWxkIGJlZ2luIG15IGludmVzdGlnYXRpb24gYnkgZXhhbWluaW5nIHRoZSBjYWxsIGNoYWluIG9mIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIHRvIHVuZGVyc3RhbmQgd2hhdCBpbnB1dHMgaXQgdXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0zNDQ9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzc5LVxuaW9fdXJpbmcva2J1Zi5jOjM4MDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0zODEtXHRcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTcyPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmgtNzMtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2tidWYuaDo3NDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03NS1cdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTEzOD1zdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0xMTcxLVx0XHRcdGFyZy5tYXhfbGVuID0gbWluX25vdF96ZXJvKGFyZy5tYXhfbGVuLCBzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xuaW9fdXJpbmcvbmV0LmM6MTE3MjpcdFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXHUwMDI2YXJnLCBzZWwpO1xuaW9fdXJpbmcvbmV0LmMtMTE3My1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODA1CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBgaW9fdXJpbmdgIHBhdGNoLiBGcm9tIG15IGFuYWx5c2lzLCBpdCBsb29rcyBsaWtlIG9ubHkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgaXMgY2FsbGluZyBgaW9fYnVmZmVyc19wZWVrYCwgd2hpY2ggbWFrZXMgdGhpbmdzIGVhc2llciB0byB0cmFjay4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMgYXJlIGluZGVlZDogYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGFuZCBgaW9fYnVmZmVyc19wZWVrYC4KCkkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhhdCBib3RoIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgIGFyZSBub3Qgc3RhdGljLCB0aGV5IGFyZSBleHBvcnRlZCBmcm9tIGBpb191cmluZy9rYnVmLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW9fdXJpbmcva2J1Zi5oYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGFyZSBhY2Nlc3NpYmxlIGFuZCBhcmUgdmFsaWQgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIHNjcnV0aW55IGFuZCBmdXp6aW5nLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSBjaGVja2VkLCBhbmQgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0LgoKVG8gc3VtbWFyaXplIG15IGZpbmRpbmdzIHN1Y2NpbmN0bHksIGFuZCB0byBnaXZlIHNvbWUgc3RydWN0dXJlZCBkZXRhaWxzIGZvciB0aGUgZnV6emVyOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBiZWNhdXNlIHRoaXMgaXMgYSBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uIGNoYW5nZQoqICAgKipGb2N1c1N5bWJvbHM6KiogYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgIC0gdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdCB0aGUgY2hhbmdlcwoqICAgKipFbmFibGVDb25maWdzOioqIGBJT19VUklOR2AgLSB0aGF0IGlzIHRoZSBiYXNlIGNvbmZpZyByZXF1aXJlbWVudAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBsaW1pdGluZyB0aGUgbWF4aW11bSBidWZmZXIgbGVuZ3RoIGZldGNoZWQgZnJvbSB0aGUgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gYE1BWF9SV19DT1VOVGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBgaW9fdXJpbmdgIGxvZ2ljLCBwcmltYXJpbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB3aGVyZSByaW5nIGJ1ZmZlcnMgYXJlIGludm9sdmVkLiBUaGlzIGlzIGltcG9ydGFudCB0byB0ZXN0IGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE3OjUzLjc5MDkzNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ2NDU0NTU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19zZW5kXCIsXG4gICAgXCJpb19yZWN2XCIsXG4gICAgXCJpb19idWZmZXJzX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19wZWVrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBleGNlc3NpdmVseSBsYXJnZSBJTyBvcGVyYXRpb24gYnkgY2FwcGluZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBidWZmZXIgcGVla2VkIGZyb20gYSByaW5nIGJ1ZmZlciBpbiBpb191cmluZyB0byBNQVhfUldfQ09VTlQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzZW5kIGFuZCByZWNlaXZlIG9wZXJhdGlvbnMgdGhhdCB1c2UgcHJvdmlkZWQgcmluZyBidWZmZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1My43OTA5NDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDM5NTA3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDA5ZTZmN2MyNTBjOTM0OTM3ZTNjZTE4YmFjMzM2OTM0ZWJiN2NmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDA4OjE3OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xcbmluZGV4IGRlMDEyOWJjZWFiYTMwLi4xY2Y1YmU2MmJiNjU2MyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9rYnVmLmNcXG4rKysgYi9pb191cmluZy9rYnVmLmNcXG5AQCAtMjY2LDYgKzI2Niw5IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiBcXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG4rXFx0LyogTUFYX1JXX0NPVU5UIGlzIHRoZSB1bml2ZXJzYWwgTGludXggcGVyLWNhbGwgSU8gbWF4aW11bSAqL1xcbitcXHRhcmctXFx1MDAzZW1heF9sZW4gPSBtaW5fdChzaXplX3QsIGFyZy1cXHUwMDNlbWF4X2xlbiwgTUFYX1JXX0NPVU5UKTtcXG4rXFxuIFxcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsIGhlYWQsIGJsLVxcdTAwM2VtYXNrKTtcXG4gXFx0aWYgKGFyZy1cXHUwMDNlbWF4X2xlbikge1xcbiBcXHRcXHR1MzIgbGVuID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlbGVuKTtcXG5AQCAtMjk1LDcgKzI5OCw3IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiBcXG4gXFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cXG4gXFx0aWYgKCFhcmctXFx1MDAzZW1heF9sZW4pXFxuLVxcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiA9IElOVF9NQVg7XFxuK1xcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiA9IE1BWF9SV19DT1VOVDtcXG4gXFxuIFxcdHJlcS1cXHUwMDNlYnVmX2luZGV4ID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlYmlkKTtcXG4gXFx0ZG8ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1NC40OTU4NTUzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMzk0MDUyMzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBjYXBwaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGJ1ZmZlciBwZWVrZWQgZnJvbSBhIHJpbmcgYnVmZmVyIGluIGlvX3VyaW5nIHRvIE1BWF9SV19DT1VOVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB0aGF0IHVzZSBwcm92aWRlZCByaW5nIGJ1ZmZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0MDllNmY3YzI1MGM5MzQ5MzdlM2NlMThiYWMzMzY5MzRlYmI3Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwODoxNzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xuaW5kZXggZGUwMTI5YmNlYWJhMzAuLjFjZjViZTYyYmI2NTYzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5jXG4rKysgYi9pb191cmluZy9rYnVmLmNcbkBAIC0yNjYsNiArMjY2LDkgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0LyogTUFYX1JXX0NPVU5UIGlzIHRoZSB1bml2ZXJzYWwgTGludXggcGVyLWNhbGwgSU8gbWF4aW11bSAqL1xuK1x0YXJnLVx1MDAzZW1heF9sZW4gPSBtaW5fdChzaXplX3QsIGFyZy1cdTAwM2VtYXhfbGVuLCBNQVhfUldfQ09VTlQpO1xuK1xuIFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gXHRpZiAoYXJnLVx1MDAzZW1heF9sZW4pIHtcbiBcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbkBAIC0yOTUsNyArMjk4LDcgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXG4gXHQvKiBzZXQgaXQgdG8gbWF4LCBpZiBub3Qgc2V0LCBzbyB3ZSBjYW4gdXNlIGl0IHVuY29uZGl0aW9uYWxseSAqL1xuIFx0aWYgKCFhcmctXHUwMDNlbWF4X2xlbilcbi1cdFx0YXJnLVx1MDAzZW1heF9sZW4gPSBJTlRfTUFYO1xuK1x0XHRhcmctXHUwMDNlbWF4X2xlbiA9IE1BWF9SV19DT1VOVDtcbiBcbiBcdHJlcS1cdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0UoYnVmLVx1MDAzZWJpZCk7XG4gXHRkbyB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1NC40OTU4NTc1NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE4MjU0MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIGFzIEkgc2VlIHRoZW06XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIGlvX3VyaW5nIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdHkqKlxuXG5SaWdodCwgc28gd2UndmUgZ290IGEgcGF0Y2ggbW9kaWZ5aW5nIGBpb191cmluZy9rYnVmLmNgLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBpbnRyb2R1Y2luZyBhIGNhcCBvbiBgYXJnLVx1MDAzZW1heF9sZW5gLiBUaGlzIGNhcCBpcyBzZXQgdG8gYE1BWF9SV19DT1VOVGAsIHdoaWNoIEkgYXNzdW1lIGlzIHNvbWUgZGVmaW5lZCBjb25zdGFudC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCB0aGlzIGlzICpmdW5jdGlvbmFsKiBjaGFuZ2Ugd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gQW5kIGFzIHdlIGFsbCBrbm93LCBgaW9fdXJpbmdgIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGR1ZSB0byBpdHMgY29tcGxleCBkZXNpZ24gYW5kIHBvdGVudGlhbCBmb3Igc3VidGxlIGNvbmN1cnJlbmN5IGlzc3Vlcywgc28gYW55IGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUgZGVzZXJ2ZXMgZXh0cmEgc2NydXRpbnkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCBjb2RlOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYXAgb24gYG1heF9sZW5gLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHNpZGUtZWZmZWN0cywgcmVzb3VyY2UgZXhoYXVzdGlvbiBjb25kaXRpb25zLCBvciBzdWJ0bGUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZy5cblxuQmV5b25kIHRoYXQsIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4uIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGNhbGwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYC4gVGhvc2UgYXJlIHRoZSBhcmVhcyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGltcGFjdCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgSSBzaG91bGQgZm9jdXMgbXkgaW4tZGVwdGggYW5hbHlzaXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCBhbmQgaG93IHRoZSBjYXBwZWQgYG1heF9sZW5gIG1pZ2h0IHByb3BhZ2F0ZSBvciBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciB1cCB0aGUgc3RhY2suIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE3OjU4LjgxNDExNDk1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUwMzE2MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmluZ19idWZmZXJzX3BlZWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0yNTItXFxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMjU0LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzQ0PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzU1LVxcdGlmIChzZWwtXFx1MDAzZWJ1Zl9saXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcXG5pb191cmluZy9rYnVmLmM6MzU2OlxcdFxcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9rYnVmLmMtMzU3LVxcdFxcdC8qXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzgwPWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM5My1cXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcbmlvX3VyaW5nL2tidWYuYzozOTQ6XFx0XFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcXG5pb191cmluZy9rYnVmLmMtMzk1LVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1OS4wMjkxNTM5NzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgwODI5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSS9PIFJpbmcgQnVmZmVyIFBlZWsgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gSXQncyBjYWxsZWQgYnkgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBoaWVyYXJjaHkgdXB3YXJkcy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgKnRob3NlKiB0d28gZnVuY3Rpb25zLCBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCwgYXJlIGNhbGxlZC4gS25vd2luZyB0aGVpciBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgZml0cyBpbnRvIHRoZSBvdmVyYWxsIEkvTyBmbG93LiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIEkvTyByaW5nIGJ1ZmZlciBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjAyLjkwOTk4NjMwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1MzYxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yNTM9c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzQzLVxcbmlvX3VyaW5nL2tidWYuYzozNDQ6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMzQ1LVxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTcwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTcxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaDo3MjppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03My1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy9uZXQuYz02MDk9c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTYzMS1cXG5pb191cmluZy9uZXQuYzo2MzI6XFx0cmV0ID0gaW9fYnVmZmVyc19zZWxlY3QocmVxLCBcXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuYy02MzMtXFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODowMy4wNjk1Mjg2NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDc4MzM2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIElPX1VSaW5nIE5ldHdvcmsgU3RhY2sqKlxuXG5BbHJpZ2h0LCBzbyBgaW9fYnVmZmVyc19zZWxlY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGF0IG1lYW5zIHdlJ3JlIGluIHRoZSB0aGljayBvZiB0aGluZ3Mgd2l0aGluIHRoZSBgaW9fdXJpbmcvbmV0LmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbmV0d29yayBJL08gb3BlcmF0aW9ucyBhcmUgaGFwcGVuaW5nLCBvciBhdCBsZWFzdCwgdGhlIHNlbGVjdGlvbiBtZWNoYW5pc21zIGZvciB0aGVtLiBUaGlzIGlzIGludGVyZXN0aW5nLCBnaXZlbiBob3cgY3JpdGljYWwgdGhpcyBpcyBmb3IgcGVyZm9ybWFuY2UuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlJ3JlIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggYnVmZmVycyB3ZSdyZSBnb2luZyB0byBzZW5kIG92ZXIgdGhlIG5ldHdvcmsuIE5vdywgd2hhdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIHdoYXQgZGF0YSBpcyBhY3R1YWxseSBiZWluZyAqY29uc2lkZXJlZCogZm9yIHNlbmRpbmcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIExldCdzIGRlbHZlIGluIGFuZCBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBkYXRhIGl0c2VsZiwgYW5kIGhvdyBpdCBpcyBpbnNwZWN0ZWQsIGJ5IHRha2luZyBhIGxvb2sgYXQgaG93IGBpb19idWZmZXJzX3BlZWtgIGZhY3RvcnMgaW50byB0aGlzIHByb2Nlc3MuIFRoaXMgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBuZXh0IHN0ZXAg4oCTIHVuZGVyc3RhbmQgdGhlIGluc3BlY3Rpb24gcHJvY2VzcyBvZiB0aGUgSU8gYnVmZmVycy4gTGV0J3Mgc2VlIGhvdyBgaW9fYnVmZmVyc19wZWVrYCBjb21lcyBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODowNy4xNDc4Njc4MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODM2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2J1ZmZlcnNfcGVla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTM0ND1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM3OS1cXG5pb191cmluZy9rYnVmLmM6MzgwOmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuYy0zODEtXFx0XFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD03Mj1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03My1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcva2J1Zi5oOjc0OmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03NS1cXHRcXHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTExMzg9c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTcxLVxcdFxcdFxcdGFyZy5tYXhfbGVuID0gbWluX25vdF96ZXJvKGFyZy5tYXhfbGVuLCBzci1cXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcXG5pb191cmluZy9uZXQuYzoxMTcyOlxcdFxcdHJldCA9IGlvX2J1ZmZlcnNfcGVlayhyZXEsIFxcdTAwMjZhcmcsIHNlbCk7XFxuaW9fdXJpbmcvbmV0LmMtMTE3My1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjA3LjI2MjcwOTI2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjUwMzkwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGlvX3VyaW5nIE5ldHdvcmsgU3RhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBkb3duIHRoaXMgYGlvX2J1ZmZlcnNfcGVla2AgZnVuY3Rpb24uIFRoZSBjb2RlIHRlbGxzIG1lIGl0J3MgY2FsbGVkIGJ5IGBpb19yZWN2X2J1Zl9zZWxlY3RgIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIFRvIHJlYWxseSBnZXQgYSBncmFzcCBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciwgSSd2ZSBnb3QgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluICpvdXR3YXJkKiBmcm9tIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBXaGVyZSBlbHNlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyBpbnZva2VkPyBBbmQgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8gZG8gdGhlIHNhbWUgZm9yIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaG9zZSBhcmUgcHJvYmFibHkgdGhlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSBzdXNwZWN0IHRoYXQgdW5kZXJzdGFuZGluZyB0aGVpciBwYXJlbnQgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBuZXR3b3JraW5nIGlzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjExLjAyNzc1MTI5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NTMwNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjQ4LVxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbmlvX3VyaW5nL25ldC5jOjEyNDk6XFx0XFx0cmV0ID0gaW9fcmVjdl9idWZfc2VsZWN0KHJlcSwga21zZywgXFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTEyNTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjExLjI2NzI4OTczNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgxMjczNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgSS9PIEJ1ZmZlcmluZyoqXG5cbk9rYXksIHNvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBpb19yZWN2YC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2UncmUgaGFuZGxpbmcgcmVjZWl2ZSBidWZmZXJzIGluIHRoZSBpbnB1dCBwYXRoLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhhdCBwaWVjZS4gQnV0IEknbSBzdWRkZW5seSBjdXJpb3VzOiB3aGF0J3MgdGhlIGFuYWxvZ291cyBmdW5jdGlvbiBpbiB0aGUgc2VuZGluZyBwYXRoPyBJcyB0aGVyZSBhIGZ1bmN0aW9uIGNvbXBhcmFibGUgdG8gYGlvX3JlY3ZfYnVmX3NlbGVjdGAgZm9yIHNlbmQgYnVmZmVycz8gU29tZXRoaW5nIGxpa2UgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmA/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGEgcGFyYWxsZWwgZXhpc3RzIGFuZCwgaWYgc28sIHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUgZm9yIG91ciBvdmVyYWxsIGJ1ZmZlciBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdCBtaWdodCByZXZlYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHNlbmQgcGF0aCBhbmQgd2hhdCBpdCdzIGRvaW5nIGluIHRlcm1zIG9mIGJ1ZmZlciBzZWxlY3Rpb24gYW5kIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjE0LjY0ODU2NjA2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMDc1MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NlbmRfc2VsZWN0X2J1ZmZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NTYwPWludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02MDgtXFxuaW9fdXJpbmcvbmV0LmM6NjA5OnN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuaW9fdXJpbmcvbmV0LmMtNjEwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTY5MC1cXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuaW9fdXJpbmcvbmV0LmM6NjkxOlxcdFxcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcXHUwMDI2c2VsLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy02OTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MTQuODI4NjQ3NjA5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTcyMDkzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgSS9PIFJpbmcgQnVmZmVyIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgYGlvX3JlY3ZgIGFuZCBgaW9fc2VuZGAganVtcCBvdXQgYXQgbWUgYXMgdGhlIG9idmlvdXMgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gVGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlLCByaWdodD8gSXQncyB3aGVyZSB0aGUgZGF0YSBzdGFydHMgZmxvd2luZy4gRGVmaW5pdGVseSBoaWdoIHByaW9yaXR5LlxuXG5JIHNlZSBhIHBhdGNoIHRoYXQgbGltaXRzIGBhcmctXHUwMDNlbWF4X2xlbmAgdG8gYE1BWF9SV19DT1VOVGAgd2l0aGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEludGVyZXN0aW5nLiBUaGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbnN0cmFpbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhhdCBsaW1pdC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgaW9fcmVjdm1zZ2AgYW5kIGBpb19zZW5kbXNnYCBjYWxsIGVpdGhlciBgaW9fcmVjdl9idWZfc2VsZWN0YCBvciBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhvc2UgYXJlIHRoZSBuZXh0IGxldmVsIGRvd24gdGhlIHN0YWNrIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgYmVoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjE5LjMyNTg1OTkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDY4OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjQ4LVxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbmlvX3VyaW5nL25ldC5jOjEyNDk6XFx0XFx0cmV0ID0gaW9fcmVjdl9idWZfc2VsZWN0KHJlcSwga21zZywgXFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTEyNTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjE5LjUzMDkzMzY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzUxNTIzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW9fcmVjdm1zZ2AgSW1wbGVtZW50YXRpb24qKlxuXG5XYWl0IGEgc2Vjb25kLCBJIHRob3VnaHQgYGlvX3JlY3Ztc2dgIGhhZCBhIGRpcmVjdCBjYWxsIHRvIGBpb19yZWN2X2J1Zl9zZWxlY3RgPyBUaGF0IGRvZXNuJ3QgZmVlbCByaWdodC4gT2theSwgdGltZSB0byBkb3VibGUtY2hlY2suIExldCBtZSBwdWxsIHVwIGBpb191cmluZy9uZXQuY2AgYW5kIGRpZyBpbnRvIHRoZSBgaW9fcmVjdm1zZ2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgZXhhY3RseSBob3cgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIG1lc3NhZ2VzIGFuZCBidWZmZXIgc2VsZWN0aW9uLiBUaGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc3VidGxlIEknbSBtaXNzaW5nIGluIHRoZSBpbnRlcmFjdGlvbiB0aGVyZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBuZXR3b3JrIEkvTyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBwcm9jZXNzIGFsaWducyB3aXRoIHdoYXQncyBhY3R1YWxseSBjb2RlZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODoyNi4zMDYwODg2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5Njg4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMDUxPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTM3LVxcbmlvX3VyaW5nL25ldC5jOjExMzg6c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMTA9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNDgtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTI0OTpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTI1MC1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MjYuNDI1NzgyOTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDEzMjY5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgaW9fcmVjdm1zZ2AuLi4gdGhhdCdzIGp1c3QgYSBiaXQgb2YgYSByZWQgaGVycmluZy4gSXQncyBvYnZpb3VzbHkganVzdCB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBtZWFucyBpdCBzaG93ZWQgdXAgYXMgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBUaGF0J3Mgbm90IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBkaWcgaW50byB0aGUgY29yZSBJL08gZnVuY3Rpb25zLiBNeSBmb2N1cyBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdW5kZXJzdGFuZGluZyBgaW9fcmVjdmAgYW5kIGBpb19zZW5kYC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBsb3ctbGV2ZWwgY2FsbHMgbWlnaHQgaW50ZXJhY3QsIHdoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGxvb2tzIGxpa2UsIGFuZCBpZiB0aGVyZSdzIGFueSBvYnZpb3VzIHBsYWNlIHdoZXJlIGFuIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSBpcyBwcmVzZW50aW5nIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjI5LjM2NzExMjU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwMTA2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz05Mz1lbnVtIHNyX3JldHJ5X2ZsYWdzIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExMS1cXG5pb191cmluZy9uZXQuYzoxMTI6c3RydWN0IGlvX3JlY3Z6YyB7XFxuaW9fdXJpbmcvbmV0LmMtMTEzLVxcdHN0cnVjdCBmaWxlXFx0XFx0XFx0KmZpbGU7XFxuLS1cXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTczMy1cXG5pb191cmluZy9uZXQuYzo3MzQ6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNzM1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc1Ny1cXG5pb191cmluZy9uZXQuYzo3NTg6c3RhdGljIGludCBpb19yZWN2bXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTc1OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYy03NzMtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjc3NDpcXHRyZXR1cm4gaW9fcmVjdm1zZ19tc2hvdF9wcmVwKHJlcSwgaW9tc2csIG1zZy5tc2dfbmFtZWxlbixcXG5pb191cmluZy9uZXQuYy03NzUtXFx0XFx0XFx0XFx0XFx0bXNnLm1zZ19jb250cm9sbGVuKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc3Ny1cXG5pb191cmluZy9uZXQuYzo3Nzg6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtNzc5LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTgwNS1cXG5pb191cmluZy9uZXQuYzo4MDY6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfY29weV9oZHIocmVxLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy04MDctfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODExLVxcbmlvX3VyaW5nL25ldC5jOjgxMjppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtODEzLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg3MC1cXHRzci1cXHUwMDNlbnJfbXVsdGlzaG90X2xvb3BzID0gMDtcXG5pb191cmluZy9uZXQuYzo4NzE6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xcbmlvX3VyaW5nL25ldC5jLTg3Mi19XFxuLS1cXG5pb191cmluZy9uZXQuYy04NzgtLypcXG5pb191cmluZy9uZXQuYzo4Nzk6ICogRmluaXNoZXMgaW9fcmVjdiBhbmQgaW9fcmVjdm1zZy5cXG5pb191cmluZy9uZXQuYy04ODAtICpcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg4My0gKi9cXG5pb191cmluZy9uZXQuYzo4ODQ6c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTg4NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy05NjYtXFxuaW9fdXJpbmcvbmV0LmM6OTY3OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTk2OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1ZixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk5MS1cXG5pb191cmluZy9uZXQuYzo5OTI6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XFxuaW9fdXJpbmcvbmV0LmMtOTkzLVxcdHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCBtc2c7XFxuLS1cXG5pb191cmluZy9uZXQuYy05OTYtXFxuaW9fdXJpbmcvbmV0LmM6OTk3OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19tdWx0aXNob3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlvX3NyX21zZyAqaW8sXFxuaW9fdXJpbmcvbmV0LmMtOTk4LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDAyLVxcdGludCBjb3B5X2xlbjtcXG5pb191cmluZy9uZXQuYzoxMDAzOlxcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xcbmlvX3VyaW5nL25ldC5jLTEwMDQtXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDM5LVxcdC8qIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGdhcCBiZXR3ZWVuIGhkciBhbmQgc29ja2FkZHJfc3RvcmFnZSAqL1xcbmlvX3VyaW5nL25ldC5jOjEwNDA6XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XFxuaW9fdXJpbmcvbmV0LmMtMTA0MS1cXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwNTAtXFxuaW9fdXJpbmcvbmV0LmM6MTA1MTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTEwNTIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTA4My1cXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xcbmlvX3VyaW5nL25ldC5jOjEwODQ6XFx0XFx0XFx0cmV0ID0gaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChrbXNnLCBzciwgXFx1MDAyNnNlbC5hZGRyLCBcXHUwMDI2bGVuKTtcXG5pb191cmluZy9uZXQuYy0xMDg1LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwOTYtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcXG5pb191cmluZy9uZXQuYzoxMDk3OlxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG5pb191cmluZy9uZXQuYy0xMDk4LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2hvdF9maW5pc2hlZCk7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTMxLVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTEzMjpcXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcXG5pb191cmluZy9uZXQuYy0xMTMzLVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjA5LVxcbmlvX3VyaW5nL25ldC5jOjEyMTA6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMjExLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNDgtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTI0OTpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTI1MC1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTEtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjkyOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbmlvX3VyaW5nL25ldC5jLTEyOTMtXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjk3LVxcbmlvX3VyaW5nL25ldC5jOjEyOTg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtMTI5OS17XFxuaW9fdXJpbmcvbmV0LmM6MTMwMDpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEzMDEtXFx0dW5zaWduZWQgaWZxX2lkeDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEzMjUtXFxuaW9fdXJpbmcvbmV0LmM6MTMyNjppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTMyNy17XFxuaW9fdXJpbmcvbmV0LmM6MTMyODpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEzMjktXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MjkuNTEzMTM0NTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODg0MDg1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgQ29yZSBJL08gRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYCwgYGlvX3NlbmRgLCBgaW9fc2VuZG1zZ2AsIGFuZCBgaW9fcmVjdnpjYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIEkvTyBvcGVyYXRpb25zIGhlcmUuIFRoZXNlIHNlZW0gbGlrZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBkYXRhIGZsb3cgYmVnaW5zLCB0aGUgcG9pbnRzIG9mIGNvbnRhY3QsIHNvIHRvIHNwZWFrLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGVhY2gsIGVzcGVjaWFsbHkgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBidWZmZXIgbWVjaGFuaXNtcy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLnNvbWV0aGluZydzIGJvdGhlcmluZyBtZSBhYm91dCBgaW9fcmVjdnpjYC4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IGl0J3MgZGlyZWN0bHkgY2FsbGluZyBgaW9fYnVmZmVyc19wZWVrYCBvciBgaW9fYnVmZmVyc19zZWxlY3RgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwidGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQsXCIgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCBtZSBtYWtlIHN1cmUuIEknbSBnb2luZyB0byB0YWtlIGEgZGVlcGVyIGRpdmUgc3BlY2lmaWNhbGx5IGludG8gdGhlIGBpb19yZWN2emNgIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGlzLiBHb3R0YSBjbGVhciB0aGF0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MzMuMzAxNTQ1NzY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTI3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVjdnpjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTkzPWVudW0gc3JfcmV0cnlfZmxhZ3Mge1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExLVxcbmlvX3VyaW5nL25ldC5jOjExMjpzdHJ1Y3QgaW9fcmVjdnpjIHtcXG5pb191cmluZy9uZXQuYy0xMTMtXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqZmlsZTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMTA9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTctXFxuaW9fdXJpbmcvbmV0LmM6MTI5ODppbnQgaW9fcmVjdnpjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9uZXQuYy0xMjk5LXtcXG5pb191cmluZy9uZXQuYzoxMzAwOlxcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XFxuaW9fdXJpbmcvbmV0LmMtMTMwMS1cXHR1bnNpZ25lZCBpZnFfaWR4O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTMyNS1cXG5pb191cmluZy9uZXQuYzoxMzI2OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMzI3LXtcXG5pb191cmluZy9uZXQuYzoxMzI4OlxcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XFxuaW9fdXJpbmcvbmV0LmMtMTMyOS1cXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODozMy40MDk3MDUwNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMzUxMTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBpb19yZWN2emMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBpb19yZWN2emNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGUgZmxvdywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHplcm8tY29weSBhc3BlY3RzIGFuZCBob3cgZWZmaWNpZW50bHkgaXQncyBoYW5kbGluZyB0aGUgZGF0YSB0cmFuc2Zlci4gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgaXNzdWVzPyBMZXQncyB0cmFjZSB0aHJvdWdoIGl0IGFuZCBzcG90IGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci4gR290dGEga2VlcCBhbiBleWUgb3V0IGZvciBlZGdlIGNhc2VzLCB0b28gLSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgd2UncmUgYWN0dWFsbHkgKmRvaW5nKiB0aGUgemVyby1jb3B5IG1hZ2ljLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW5lZmZpY2llbmNpZXMgY3JlZXBpbmcgaW4gdGhhdCB3ZSBjYW4gZWxpbWluYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MzYuNjMzMjE5NjE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzI2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMyNjpcXHRpbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuMTMyNzpcXHR7XFxuMTMyODpcXHRcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbjEzMjk6XFx0XFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4xMzMwOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuMTMzMTpcXHRcXHRpbnQgcmV0O1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRcXHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVxcdTAwM2VmaWxlKTtcXG4xMzM0OlxcdFxcdGlmICh1bmxpa2VseSghc29jaykpXFxuMTMzNTpcXHRcXHRcXHRyZXR1cm4gLUVOT1RTT0NLO1xcbjEzMzY6XFx0XFxuMTMzNzpcXHRcXHRpZiAoIShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcXHUwMDI2XFx1MDAyNlxcbjEzMzg6XFx0XFx0ICAgICh6Yy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCkpXFxuMTMzOTpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4xMzQwOlxcdFxcbjEzNDE6XFx0XFx0bGVuID0gemMtXFx1MDAzZWxlbjtcXG4xMzQyOlxcdFxcdHJldCA9IGlvX3pjcnhfcmVjdihyZXEsIHpjLVxcdTAwM2VpZnEsIHNvY2ssIDAsIGlzc3VlX2ZsYWdzLCBcXHUwMDI2emMtXFx1MDAzZWxlbik7XFxuMTM0MzpcXHRcXHRpZiAobGVuIFxcdTAwMjZcXHUwMDI2IHpjLVxcdTAwM2VsZW4gPT0gMCkge1xcbjEzNDQ6XFx0XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcXG4xMzQ1OlxcdFxcbjEzNDY6XFx0XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4xMzQ3OlxcdFxcdH1cXG4xMzQ4OlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYz0gMCkgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcXG4xMzQ5OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKVxcbjEzNTA6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjEzNTE6XFx0XFx0XFx0aWYgKHJldCA9PSBJT1VfUkVRVUVVRSlcXG4xMzUyOlxcdFxcdFxcdFxcdHJldHVybiBJT1VfUkVRVUVVRTtcXG4xMzUzOlxcdFxcbjEzNTQ6XFx0XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuMTM1NTpcXHRcXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuMTM1NjpcXHRcXHRcXHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xcbjEzNTc6XFx0XFx0fVxcbjEzNTg6XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4xMzU5OlxcdH1cXG4xMzYwOlxcdFxcbjEzNjE6XFx0dm9pZCBpb19zZW5kX3pjX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuMTM2MjpcXHR7XFxuMTM2MzpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbjEzNjQ6XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW8gPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuMTM2NTpcXHRcXG4xMzY2OlxcdFxcdGlmIChyZXFfaGFzX2FzeW5jX2RhdGEocmVxKSlcXG4xMzY3OlxcdFxcdFxcdGlvX25ldG1zZ19pb3ZlY19mcmVlKGlvKTtcXG4xMzY4OlxcdFxcdGlmICh6Yy1cXHUwMDNlbm90aWYpIHtcXG4xMzY5OlxcdFxcdFxcdGlvX25vdGlmX2ZsdXNoKHpjLVxcdTAwM2Vub3RpZik7XFxuMTM3MDpcXHRcXHRcXHR6Yy1cXHUwMDNlbm90aWYgPSBOVUxMO1xcbjEzNzE6XFx0XFx0fVxcbjEzNzI6XFx0fVxcbjEzNzM6XFx0XFxuMTM3NDpcXHQjZGVmaW5lIElPX1pDX0ZMQUdTX0NPTU1PTiAoSU9SSU5HX1JFQ1ZTRU5EX1BPTExfRklSU1QgfCBJT1JJTkdfUkVDVlNFTkRfRklYRURfQlVGKVxcbjEzNzU6XFx0I2RlZmluZSBJT19aQ19GTEFHU19WQUxJRCAgKElPX1pDX0ZMQUdTX0NPTU1PTiB8IElPUklOR19TRU5EX1pDX1JFUE9SVF9VU0FHRSB8IFxcXFxcXG4xMzc2OlxcdFxcdFxcdFxcdFxcdElPUklOR19TRU5EX1ZFQ1RPUklaRUQpXFxuMTM3NzpcXHRcXG4xMzc4OlxcdGludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4xMzc5OlxcdHtcXG4xMzgwOlxcdFxcdHN0cnVjdCBpb19zcl9tc2cgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XFxuMTM4MTpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbjEzODI6XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2c7XFxuMTM4MzpcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKm5vdGlmO1xcbjEzODQ6XFx0XFx0dTY0IHVzZXJfZGF0YTtcXG4xMzg1OlxcdFxcdGludCByZXQ7XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdHpjLVxcdTAwM2Vkb25lX2lvID0gMDtcXG4xMzg4OlxcdFxcbjEzODk6XFx0XFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShzcWUtXFx1MDAzZV9fcGFkMlswXSkpKVxcbjEzOTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5MTpcXHRcXHQvKiB3ZSBkb24ndCBzdXBwb3J0IElPU1FFX0NRRV9TS0lQX1NVQ0NFU1MganVzdCB5ZXQgKi9cXG4xMzkyOlxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQ1FFX1NLSVApXFxuMTM5MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzk0OlxcdFxcbjEzOTU6XFx0XFx0bm90aWYgPSB6Yy1cXHUwMDNlbm90aWYgPSBpb19hbGxvY19ub3RpZihjdHgpO1xcbjEzOTY6XFx0XFx0aWYgKCFub3RpZilcXG4xMzk3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEzOTg6XFx0XFx0dXNlcl9kYXRhID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlYWRkcjMpO1xcbjEzOTk6XFx0XFx0aWYgKCF1c2VyX2RhdGEpXFxuMTQwMDpcXHRcXHRcXHR1c2VyX2RhdGEgPSByZXEtXFx1MDAzZWNxZS51c2VyX2RhdGE7XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdG5vdGlmLVxcdTAwM2VjcWUudXNlcl9kYXRhID0gdXNlcl9kYXRhO1xcbjE0MDM6XFx0XFx0bm90aWYtXFx1MDAzZWNxZS5yZXMgPSAwO1xcbjE0MDQ6XFx0XFx0bm90aWYtXFx1MDAzZWNxZS5mbGFncyA9IElPUklOR19DUUVfRl9OT1RJRjtcXG4xNDA1OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfTkVFRF9DTEVBTlVQIHwgUkVRX0ZfUE9MTF9OT19MQVpZO1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHR6Yy1cXHUwMDNlZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2Vpb3ByaW8pO1xcbjE0MDg6XFx0XFx0aWYgKHVubGlrZWx5KHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JT19aQ19GTEFHU19DT01NT04pKSB7XFxuMTQwOTpcXHRcXHRcXHRpZiAoemMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfklPX1pDX0ZMQUdTX1ZBTElEKVxcbjE0MTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQxMTpcXHRcXHRcXHRpZiAoemMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFTkRfWkNfUkVQT1JUX1VTQUdFKSB7XFxuMTQxMjpcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fbm90aWZfZGF0YSAqbmQgPSBpb19ub3RpZl90b19kYXRhKG5vdGlmKTtcXG4xNDEzOlxcdFxcbjE0MTQ6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXpjX3JlcG9ydCA9IHRydWU7XFxuMTQxNTpcXHRcXHRcXHRcXHRuZC1cXHUwMDNlemNfdXNlZCA9IGZhbHNlO1xcbjE0MTY6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXpjX2NvcGllZCA9IGZhbHNlO1xcbjE0MTc6XFx0XFx0XFx0fVxcbjE0MTg6XFx0XFx0fVxcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHR6Yy1cXHUwMDNlbGVuID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlbGVuKTtcXG4xNDIxOlxcdFxcdHpjLVxcdTAwM2Vtc2dfZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2Vtc2dfZmxhZ3MpIHwgTVNHX05PU0lHTkFMIHwgTVNHX1pFUk9DT1BZO1xcbjE0MjI6XFx0XFx0cmVxLVxcdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VidWZfaW5kZXgpO1xcbjE0MjM6XFx0XFx0aWYgKHpjLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpXFxuMTQyNDpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX05PV0FJVDtcXG4xNDI1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODozNi42MzM0MDk3NDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1Mjk1MDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSS9PIE9wZXJhdGlvbnMgaW4gUmVsYXRpb24gdG8gaW9fdXJpbmcqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGBpb19yZWN2emNgIGlzIG5vdCB1dGlsaXppbmcgYGlvX2J1ZmZlcnNfcGVla2Agb3IgYGlvX2J1ZmZlcnNfc2VsZWN0YC4gVGhhdCBtZWFucyB0aGUgaW50ZXJlc3RpbmcgYXJlYXMgZm9yIGludmVzdGlnYXRpb24gYXJlIHJlYWxseSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYW5kIGBpb19zZW5kbXNnYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgd2hlbiB3b3JraW5nIHdpdGggYGlvX3VyaW5nYC4gYENPTkZJR19JT19VUklOR2AgaXMsIG9mIGNvdXJzZSwgYSBnaXZlbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUgLSB0aGF0IHNob3VsZCBob2xkIHRoZSBhbnN3ZXJzIHJlZ2FyZGluZyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjQwLjE4NjM2NDE2MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjgxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjQwLjMzNzA1MTM4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMxOTQyNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBpb191cmluZyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBpb191cmluZ2AgaXMgZW5hYmxlZCBieSB0aGUgYENPTkZJR19JT19VUklOR2Agb3B0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBkZWZpbmVkLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBJJ2xsIHN0YXJ0IHdpdGggZWl0aGVyIGBpbml0L0tjb25maWdgIOKAkyB0aGF0J3MgYSBjbGFzc2ljIHBsYWNlIGZvciBmdW5kYW1lbnRhbCBvcHRpb25zIOKAkyBvciBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCBgaW9fdXJpbmcvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBpdCB3b3VsZCBsaWtlbHkgcmVzaWRlIGlmIGl0J3MgcmVsYXRlZCB0byB0aGUgc3Vic3lzdGVtIGl0c2VsZi4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgaXRzIGRlZmluaXRpb24sIGFuZCBob3BlZnVsbHkgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODo0NC41Njg5OTc5NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODMzNzE0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODo0OC44NTIzNzk4NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzc5Nzg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQ2hlY2tpbmcgYGlvX3VyaW5nL2tidWYuY2AgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgQ09ORklHX0lPX1VSSU5HYCBpcyBwcmFjdGljYWxseSBhc3N1bWVkIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaXMgcGF0Y2ggbGFuZGVkIGluIGBpb191cmluZy9rYnVmLmNgLCBzbyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBidWlsZCBzeXN0ZW0uIEknbGwgbmVlZCB0byBqdW1wIGludG8gYGlvX3VyaW5nL01ha2VmaWxlYCBhbmQgcXVpY2tseSBsb29rIGZvciBhbnl0aGluZyB0aGF0IHRhcmdldHMgdGhhdCBzcGVjaWZpYyBmaWxlLiBJdCBjb3VsZCBiZSBhbiBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gY2hlY2ssIG9yIG1heWJlIGEgbW9yZSBzdWJ0bGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgYGlvX3VyaW5nYCBmZWF0dXJlcy4gVGhlIE1ha2VmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdGhlcmUgaW5mbHVlbmNpbmcgaG93IGBrYnVmLmNgIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6NTMuMDY2MTgwMTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTcxNjkxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYnVmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL01ha2VmaWxlPTc9ZW5kaWZcXG5pb191cmluZy9NYWtlZmlsZS04LVxcbmlvX3VyaW5nL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbmlvX3VyaW5nL01ha2VmaWxlLTEwLVxcdFxcdFxcdFxcdFxcdHRjdHgubyBmaWxldGFibGUubyBydy5vIHBvbGwubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjUzLjY0MTkwNTYwM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTk5ODc4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVmZmVyIFBlZWsgTGVuZ3RoIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGFsYmVpdCBpbXBvcnRhbnQsIGNoYW5nZSBmb3IgYGlvX3VyaW5nYC4gSXQgc2VlbXMgdGhpcyBjb2RlIHBhdGggaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUgZW5vdWdoOiB3ZSdyZSBpbnRyb2R1Y2luZyBhIG1heGltdW0gYnVmZmVyIGxlbmd0aCBjaGVjayB3aXRoaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYC4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBtYWtpbmcgc3VyZSBgYXJnLVx1MDAzZW1heF9sZW5gIGlzbid0IGV4Y2VlZGluZyBgTUFYX1JXX0NPVU5UYCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSBwZWVrIG9wZXJhdGlvbi4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBleGNlc3NpdmVseSBsYXJnZSByZWFkcyBvciB3cml0ZXMsIGd1YXJkaW5nIGFnYWluc3QgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIHVuYm91bmRlZCBJTy4gVGhpcyBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgY29uc2lkZXJpbmcgdGhlIGxvdy1sZXZlbCBuYXR1cmUgb2YgYGlvX3VyaW5nYC5cblxuVGhlIGNvcmUgbG9naWMgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHdlJ3JlIHVzaW5nIGBtaW5fdGAgdG8gY2xhbXAgYGFyZy1cdTAwM2VtYXhfbGVuYCB0byBgTUFYX1JXX0NPVU5UYC4gQWxzbyB3b3J0aCBub3RpbmcgdGhhdCBpZiBgYXJnLVx1MDAzZW1heF9sZW5gIGlzbid0IHNldCwgdGhlbiB3ZSdyZSBub3cgc2V0dGluZyBpdCB0byBgTUFYX1JXX0NPVU5UYC4gUHJldmlvdXNseSBpdCB3YXMgc2V0IHRvIGBJTlRfTUFYYC5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIG5vdyBzaGlmdHMgdG8gdGhlIGNhbGxlcnMgb2YgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgc3BlY2lmaWNhbGx5IGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fc2VuZGAsIGFuZCBgaW9fc2VuZG1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGxlbmd0aCBjb25zdHJhaW50IGludGVyYWN0cyB3aXRoIHRoZSBoaWdoZXItbGV2ZWwgbG9naWMgaW4gdGhvc2UgZnVuY3Rpb25zLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIG1heGltdW0gYnVmZmVyIGxlbmd0aD8gRG9lcyB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZSBhbnkgYWRqdXN0bWVudHMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGV2ZW4gaWYgaXQgc2VlbXMgc2FmZSBhdCBmaXJzdCBnbGFuY2U/XG5cbkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2guIEkgc2hvdWxkIGlkZW50aWZ5IGFueSBvdGhlciBjYWxsZXJzIG9mIGBpb19idWZmZXJzX3NlbGVjdGAgb3IgYGlvX2J1ZmZlcnNfcGVla2Agd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgYmVlbiBvdmVybG9va2VkLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byBhbmFseXplIHRoZSBjb21wbGV0ZSBjYWxsIGdyYXBoIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MDMuNjQxNzg3OTE4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3ODI4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yNTM9c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzQzLVxcbmlvX3VyaW5nL2tidWYuYzozNDQ6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMzQ1LVxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTcwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTcxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaDo3MjppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03My1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy9uZXQuYz02MDk9c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTYzMS1cXG5pb191cmluZy9uZXQuYzo2MzI6XFx0cmV0ID0gaW9fYnVmZmVyc19zZWxlY3QocmVxLCBcXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuYy02MzMtXFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTowMy44MzY1NzY5ODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwOTAzNjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fYnVmZmVyc19zZWxlY3RgKipcblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBoZXJlLiBUaGUgaW1wbGljYXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgKm9ubHkqIGNhbGwgcGF0aCB0aGF0IGxlYWRzIHRvIGBpb19idWZmZXJzX3NlbGVjdGAgZ29lcyB0aHJvdWdoIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGlzIGlzIGEgY3J1Y2lhbCBvYnNlcnZhdGlvbi4gSXQgaW1tZWRpYXRlbHkgbmFycm93cyBteSBmb2N1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMgaW50aW1hdGVseS5cblxuV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbj8gSXMgYGlvX2J1ZmZlcnNfc2VsZWN0YCBjb25zaWRlcmVkIGEgcHJpdmF0ZSBoZWxwZXIgb2YgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAsIG9yIGlzIGl0IHBvdGVudGlhbGx5IG1vcmUgb2YgYSBzaGFyZWQgcmVzb3VyY2UsIGJ1dCBqdXN0ICp1c2VkKiBleGNsdXNpdmVseSBieSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBJZiBpdCdzIHRoZSBsYXR0ZXIsIGNvdWxkIHRoZXJlIGJlIGltcGxpY2F0aW9ucyBmb3IgZnV0dXJlIGNvZGUgbW9kaWZpY2F0aW9ucz8gVGhlIHRpZ2h0IGNvdXBsaW5nIHNob3VsZCBicmluZyB1cCBhIGZldyBjb25zaWRlcmF0aW9ucy5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFByb3BhZ2F0aW9uOioqIEhvdyBkb2VzIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGhhbmRsZSBlcnJvcnMgcmV0dXJuZWQgZnJvbSBgaW9fYnVmZmVyc19zZWxlY3RgPyBJcyB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcsIG9yIGlzIGl0IGFzc3VtZWQgdGhhdCBgaW9fYnVmZmVyc19zZWxlY3RgICphbHdheXMqIHN1Y2NlZWRzIHdoZW4gY2FsbGVkIGZyb20gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmA/XG4qICAgKipQZXJmb3JtYW5jZSBDb25zaWRlcmF0aW9uczoqKiBXaGF0J3MgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YD8gSXMgaXQgb3B0aW1pemVkLCBvciBpcyB0aGlzIHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBjb3VsZCBleGlzdD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZnJlcXVlbnQsIGhpZ2gtdm9sdW1lIGNhbGxzPyBBbnkgcmVzb3VyY2UgY29udGVudGlvbiBjb25zaWRlcmF0aW9ucyBoZXJlP1xuKiAgICoqVGVzdGluZyBhbmQgRGVidWdnaW5nOioqIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIGVudHJ5IHBvaW50IGZvciBkZWJ1Z2dpbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YC4gSWYgdGhlcmUncyBhbiBpc3N1ZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgSSBjYW4gZGlyZWN0bHkgZm9jdXMgb24gc2NlbmFyaW9zIGluaXRpYXRlZCB0aHJvdWdoIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGUgY29udHJvbCBmbG93IGlzIHN0cmFpZ2h0Zm9yd2FyZC5cbiogICAqKlBvdGVudGlhbCBmb3IgUmVmYWN0b3Jpbmc6KiogQ291bGQgdGhpcyBkZXNpZ24gY3JlYXRlIGEgcG90ZW50aWFsIHBvaW50IG9mIGZyYWdpbGl0eT8gU2hvdWxkIGBpb19idWZmZXJzX3NlbGVjdGAgYmUgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBmdXR1cmU/IFdoYXQgd291bGQgdGhhdCBlbnRhaWwgZnJvbSBhIHRlc3RpbmcvdmFsaWRhdGlvbiBwZXJzcGVjdGl2ZT9cblxuSW4gc3VtbWFyeSwgdGhpcyBpcyBhIGNsZWFuLCBjb250YWluZWQgcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgcmVhbGx5IGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiAqaG93KiB0aGVzZSB0d28gYXJlIGxpbmtlZCB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvbiBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIG1haW50YWluYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTowOC4yNDU2MTgzNDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjk4OTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19idWZmZXJzX3BlZWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0zNDQ9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zNzktXFxuaW9fdXJpbmcva2J1Zi5jOjM4MDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMzgxLVxcdFxcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9NzI9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmgtNzMtXFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaDo3NDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmgtNzUtXFx0XFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE3MS1cXHRcXHRcXHRhcmcubWF4X2xlbiA9IG1pbl9ub3RfemVybyhhcmcubWF4X2xlbiwgc3ItXFx1MDAzZW1zaG90X3RvdGFsX2xlbik7XFxuaW9fdXJpbmcvbmV0LmM6MTE3MjpcXHRcXHRyZXQgPSBpb19idWZmZXJzX3BlZWsocmVxLCBcXHUwMDI2YXJnLCBzZWwpO1xcbmlvX3VyaW5nL25ldC5jLTExNzMtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTowOC4zOTg2MTM4NDdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODIzOTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGlnZ2luZyBpbnRvIEJ1ZmZlciBJbnRlcmFjdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGJ1ZmZlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhZ2Fpbi4gSSdtIHNlZWluZyB0aGF0IG9ubHkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgc2VlbXMgdG8gZGlyZWN0bHkgY2FsbCBgaW9fYnVmZmVyc19wZWVrYC4gQnV0IHRoYXQncyBqdXN0IHRoZSBwbHVyYWwgdmVyc2lvbiAoYGlvX2J1ZmZlcnNgKS5cblxuSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIFdoYXQgYWJvdXQgYGlvX2J1ZmZlcl9zZWxlY3RgIHdpdGggYSAqc2luZ3VsYXIqIGBidWZmZXJgPyBJcyB0aGF0IHJlbGF0ZWQgdG8gdGhpcyBwZWVrIGZ1bmN0aW9uIGluIHNvbWUgd2F5PyBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBjb25uZWN0aW9uIGhlcmUuIExldCdzIHNlZSBpZiB0aGUgc2luZ3VsYXIgYGlvX2J1ZmZlcl9zZWxlY3RgIGFjdHVhbGx5IGNhbGxzIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEl0J3MgcG9zc2libGUgaXQgaXMgaGFuZGxpbmcgaW5kaXZpZHVhbCBidWZmZXJzLCBwZXJoYXBzIGNoZWNraW5nIHRoZW0gYWdhaW5zdCB0aGUgcmluZyBidWZmZXJzIHNvbWVob3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOToxMS44MTY4NTY0NjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY4MTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19idWZmZXJfc2VsZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9MTkyPXN0YXRpYyBzdHJ1Y3QgaW9fYnJfc2VsIGlvX3JpbmdfYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMjI5LVxcbmlvX3VyaW5nL2tidWYuYzoyMzA6c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG5pb191cmluZy9rYnVmLmMtMjMxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9NjA9c3RydWN0IGJ1Zl9zZWxfYXJnIHtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC02OS1cXG5pb191cmluZy9rYnVmLmg6NzA6c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG5pb191cmluZy9rYnVmLmgtNzEtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBidWZfZ3JvdXAsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMDUxPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDc4LVxcbmlvX3VyaW5nL25ldC5jOjEwNzk6XFx0XFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFxcdTAwMjZsZW4sIHNyLVxcdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuYy0xMDgwLVxcdFxcdGlmICghc2VsLmFkZHIpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE5NC1cXG5pb191cmluZy9uZXQuYzoxMTk1OlxcdFxcdCpzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXFx1MDAyNmxlbiwgc3ItXFx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTExOTYtXFx0XFx0aWYgKCFzZWwtXFx1MDAzZWFkZHIpXFxuLS1cXG5pb191cmluZy9ydy5jPTExMD1zdGF0aWMgaW50IF9faW9faW1wb3J0X3J3X2J1ZmZlcihpbnQgZGRpciwgc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9ydy5jLTEyMi1cXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuaW9fdXJpbmcvcncuYzoxMjM6XFx0XFx0KnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcXHUwMDI2c3FlX2xlbiwgaW8tXFx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL3J3LmMtMTI0LVxcdFxcdGlmICghc2VsLVxcdTAwM2VhZGRyKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MzYzPXN0cnVjdCBpb19icl9zZWwgaW9fdXJpbmdfY21kX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzc0LVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM3NTpcXHRyZXR1cm4gaW9fYnVmZmVyX3NlbGVjdChyZXEsIGxlbiwgYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MTEuOTg1NTQ2NjMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzQ1OTIyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBjb2RlLCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWNpcGhlcmluZyB0aGUgQnVmZmVyIFNlbGVjdGlvbiBhbmQgUGVlayBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyB1bnRhbmdsZSB0aGlzLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgc3lzdGVtIHNlbGVjdHMgYW5kIFwicGVla3NcIiBpbnRvIEkvTyBidWZmZXJzLiBJbml0aWFsbHksIEkgdGhvdWdodCBgaW9fYnVmZmVyX3NlbGVjdGAg4oCTIG5vdGljZSB0aGUgc2luZ3VsYXIgXCJidWZmZXJcIiDigJMgd2FzIGRpcmVjdGx5IHRpZWQgdG8gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCDigJMgdGhlIHBsdXJhbC4gQnV0IGhhbmcgb24sIGl0J3MgYWN0dWFsbHkgY2FsbGluZyB0aGUgc2luZ3VsYXIgYGlvX3JpbmdfYnVmZmVyX3NlbGVjdGAgZnVuY3Rpb24gaW5zdGVhZC5cblxuVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlcyB0byBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBhbmQgdGhlc2UgYXJlIHRoZSAqcGx1cmFsKi4gU28sIHdlIGhhdmUgYW4gaW5pdGlhbCBkaXNjb25uZWN0IGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9uIG5hbWVzLlxuXG5Ob3csIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgdGhhdCB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGFyZSBhY3R1YWxseSBgaW9fYnVmZmVyc19zZWxlY3RgIChwbHVyYWwpIGFuZCBgaW9fYnVmZmVyc19wZWVrYCAocGx1cmFsKS4gVGhlc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHRoZSBzZW5kL3JlY2VpdmUgcm91dGluZXM6IGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gV2hpY2ggSSByZWNvZ25pemUgYXMgaW50ZXJuYWwgaGVscGVycyB0aGF0IGFyZSBpbiB0dXJuIHVzZWQgYnkgb3VyIGZhbWlsaWFyIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIHJvdXRpbmVzLlxuXG5Ib2xkIG9uIGEgc2VjLi4uIEkgbmVlZCB0byBiZSBzdXJlIEkgZ290IHRoaXMgcmlnaHQuIEkgdGhpbmsgSSByZW1lbWJlciB0aGF0IGBpb19yZWN2bXNnYCAqYWxzbyogY2FsbHMgYGlvX3JlY3ZfYnVmX3NlbGVjdGA/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBpb19yZWN2bXNnYCBpbXBsZW1lbnRhdGlvbi4uLiBqdXN0IHRvIGJlIGNlcnRhaW4uIEl0J3MgaW1wb3J0YW50IHRvIGhhdmUgdGhhdCBlbnRpcmUgY2FsbCBjaGFpbiBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOToxNi4yNjAxNDE3MDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQxNDM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWN2X2J1Zl9zZWxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjQ4LVxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbmlvX3VyaW5nL25ldC5jOjEyNDk6XFx0XFx0cmV0ID0gaW9fcmVjdl9idWZfc2VsZWN0KHJlcSwga21zZywgXFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTEyNTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE5OjE2LjUwMDU2MjE0OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODk5NTQzMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGlvX3JlY3Ztc2dgIGFuZCBgaW9fc2VuZG1zZ2AgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBJL08gcm91dGluZXMgd2UncmUgd29ya2luZyB3aXRoLCBzcGVjaWZpY2FsbHkgYGlvX3JlY3Ztc2dgLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiBpdCB1c2VkIGBpb19yZWN2X2J1Zl9zZWxlY3RgLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgY29ycmVjdGlvbiBoZXJlIC0gaXQgYWN0dWFsbHkgY2FsbHMgYGlvX2J1ZmZlcl9zZWxlY3RgLiBUaGF0J3MgaW1wb3J0YW50OyB0aGUgZGlmZmVyZW5jZSBpbiB3aGljaCBidWZmZXIgc2VsZWN0aW9uIG1lY2hhbmlzbSBpcyB1c2VkIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIHRoZSBmbG93IG9mIGRhdGEgYW5kIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuXG5cbk5vdywgdGhhdCBicmluZ3MgdXAgYSBnb29kIHBvaW50LiBJZiBgaW9fcmVjdm1zZ2AgYmVoYXZlcyB0aGlzIHdheSwgd2hhdCBpcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8gc2VuZCBhIG1lc3NhZ2U/IFRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgdGhpcyBhbmFseXNpcyBpcyB0byBjaGVjayBob3cgYGlvX3NlbmRtc2dgIGZ1bmN0aW9ucy4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBzYW1lIHBhdHRlcm4gaG9sZHM7IGlmIGl0IGNhbGxzIGBpb19idWZmZXJfc2VsZWN0YCwgb3Igc29tZSBvdGhlciBzZWxlY3Rpb24gbWV0aG9kLiBEZXRlcm1pbmluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiBjYWxsIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgSS9PIHNjaGVtZSB0aGF0J3MgdXNlZC4gVGhpcyBoYXMgdG8gYmUgdW5kZXJzdG9vZCBiZWZvcmUgSSBjYW4gbWFrZSBhIGp1ZGdlbWVudCBvbiBob3cgdGhlIHN5c3RlbSdzIG1lbW9yeSBvciBwZXJmb3JtYW5jZSBhcmUgYmVpbmcgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MjQuNDAwMTA5NjE1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ2OTI0NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTU2MD1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjA4LVxcbmlvX3VyaW5nL25ldC5jOjYwOTpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbmlvX3VyaW5nL25ldC5jLTYxMC1cXHRcXHRcXHRcXHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjU3PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02OTAtXFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xcbmlvX3VyaW5nL25ldC5jOjY5MTpcXHRcXHRyZXQgPSBpb19zZW5kX3NlbGVjdF9idWZmZXIocmVxLCBpc3N1ZV9mbGFncywgXFx1MDAyNnNlbCwga21zZyk7XFxuaW9fdXJpbmcvbmV0LmMtNjkyLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE5OjI0LjYzNDgwNzUyOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQzMTgxMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGlvX3NlbmRtc2dgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCBgaW9fc2VuZG1zZ2AgaXNuJ3QgY2FsbGluZyBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzLiBUaGlzIG5hcnJvd3MgZG93biB0aGUgcG90ZW50aWFsIGlzc3VlcyDigJMgYW55IHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhpcyBub24tY2FsbCB3b3VsZCBsaWtlbHkgcmVzaWRlIHdpdGhpbiB0aGUgbG9naWMgb2YgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMsIHRoZW4uXG5cblRvIGNvbmZpcm0gdGhpcyBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNvbm5lY3Rpb25zIEknbSBtaXNzaW5nLCBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgYXVkaXQgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGZvciBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCBhZ2Fpbi4gVGhleSBzaG91bGQgYmUgdGhlIG9uZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aG9zZSBidWZmZXJzLCBhbmQgYSBkZWVwZXIgZGl2ZSBtaWdodCBpbGx1bWluYXRlIGFueSBzaWRlIGVmZmVjdHMgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGJyb2FkZXIgYmVoYXZpb3VyIG9mIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE5OjI3Ljg3Nzk5MTcxMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzUzMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9MjUzPXN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM0My1cXG5pb191cmluZy9rYnVmLmM6MzQ0OmludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5jLTM0NS1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD03MD1zdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbmlvX3VyaW5nL2tidWYuaC03MS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9rYnVmLmg6NzI6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmgtNzMtXFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjA5PXN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuLS1cXG5pb191cmluZy9uZXQuYy02MzEtXFxuaW9fdXJpbmcvbmV0LmM6NjMyOlxcdHJldCA9IGlvX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXFx1MDAyNmFyZywgc2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtNjMzLVxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MjguMDQ5NzQ5Njg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDI3MTUzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBEZWR1Y3RpdmUgUmVhc29uaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhlIGtleSBvYnNlcnZhdGlvbiBoZXJlIGlzIHRoZSBleHBsaWNpdCBtZW50aW9uIG9mIHRoZSBmdW5jdGlvbiBgaW9fYnVmZmVyc19zZWxlY3RgLiBNeSB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhlIHRleHQgY2xlYXJseSBzdGF0ZXMgdGhhdCBvbmx5IHRoZSBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCBmdW5jdGlvbiBhY3R1YWxseSBtYWtlcyBhIGNhbGwgdG8gYGlvX2J1ZmZlcnNfc2VsZWN0YC4gVGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBJIHNob3VsZCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIGJ5IGV4YW1pbmluZyB0aGUgY2FsbCBjaGFpbiBvZiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCB0byB1bmRlcnN0YW5kIHdoYXQgaW5wdXRzIGl0IHVzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTgyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MzEuMTUyNDY3ODg1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgwNjAxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fYnVmZmVyc19wZWVrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9MzQ0PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzc5LVxcbmlvX3VyaW5nL2tidWYuYzozODA6aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5jLTM4MS1cXHRcXHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTcyPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5oLTczLVxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9rYnVmLmg6NzQ6aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5oLTc1LVxcdFxcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTEzOD1zdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExNzEtXFx0XFx0XFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oYXJnLm1heF9sZW4sIHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xcbmlvX3VyaW5nL25ldC5jOjExNzI6XFx0XFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXFx1MDAyNmFyZywgc2VsKTtcXG5pb191cmluZy9uZXQuYy0xMTczLVxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MzEuMzEwNTMzNjExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MTQyNDU2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIGBpb191cmluZ2AgcGF0Y2guIEZyb20gbXkgYW5hbHlzaXMsIGl0IGxvb2tzIGxpa2Ugb25seSBgaW9fcmVjdl9idWZfc2VsZWN0YCBpcyBjYWxsaW5nIGBpb19idWZmZXJzX3BlZWtgLCB3aGljaCBtYWtlcyB0aGluZ3MgZWFzaWVyIHRvIHRyYWNrLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIGFyZSBpbmRlZWQ6IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AuXG5cbkkndmUgYWxzbyB2ZXJpZmllZCB0aGF0IGJvdGggYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AgYXJlIG5vdCBzdGF0aWMsIHRoZXkgYXJlIGV4cG9ydGVkIGZyb20gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGRlY2xhcmVkIGluIGBpb191cmluZy9rYnVmLmhgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIHRoZXkgYXJlIGFjY2Vzc2libGUgYW5kIGFyZSB2YWxpZCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkgYW5kIGZ1enppbmcuXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgY2hlY2tlZCwgYW5kIGBDT05GSUdfSU9fVVJJTkdgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dC5cblxuVG8gc3VtbWFyaXplIG15IGZpbmRpbmdzIHN1Y2NpbmN0bHksIGFuZCB0byBnaXZlIHNvbWUgc3RydWN0dXJlZCBkZXRhaWxzIGZvciB0aGUgZnV6emVyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIGJlY2F1c2UgdGhpcyBpcyBhIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb24gY2hhbmdlXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgIC0gdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdCB0aGUgY2hhbmdlc1xuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSU9fVVJJTkdgIC0gdGhhdCBpcyB0aGUgYmFzZSBjb25maWcgcmVxdWlyZW1lbnRcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGxpbWl0aW5nIHRoZSBtYXhpbXVtIGJ1ZmZlciBsZW5ndGggZmV0Y2hlZCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBpbiBpb191cmluZyB0byBgTUFYX1JXX0NPVU5UYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGBpb191cmluZ2AgbG9naWMsIHByaW1hcmlseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHdoZXJlIHJpbmcgYnVmZmVycyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHRlc3QgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODA1LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTozOC4yMjQ3ODMzMjdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1OTExMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fc2VuZFwiLFxuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBjYXBwaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGJ1ZmZlciBwZWVrZWQgZnJvbSBhIHJpbmcgYnVmZmVyIGluIGlvX3VyaW5nIHRvIE1BWF9SV19DT1VOVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB0aGF0IHVzZSBwcm92aWRlZCByaW5nIGJ1ZmZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 07:39:06 +0000 UTC FinishedAt: 2026-07-27 08:19:40 +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": "1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "8d1eb236-4676-4f3e-8a6e-577bcc9437d2" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_send", "io_recv", "io_buffers_select", "io_buffers_peek" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fc2VuZCYjMzQ7LAogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBjYXBwaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGJ1ZmZlciBwZWVrZWQgZnJvbSBhIHJpbmcgYnVmZmVyIGluIGlvX3VyaW5nIHRvIE1BWF9SV19DT1VOVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB0aGF0IHVzZSBwcm92aWRlZCByaW5nIGJ1ZmZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNDA5ZTZmN2MyNTBjOTM0OTM3ZTNjZTE4YmFjMzM2OTM0ZWJiN2NmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDg6MTc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXG5pbmRleCBkZTAxMjliY2VhYmEzMC4uMWNmNWJlNjJiYjY1NjMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTI2Niw2ICYjNDM7MjY2LDkgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuJiM0MztcdC8qIE1BWF9SV19DT1VOVCBpcyB0aGUgdW5pdmVyc2FsIExpbnV4IHBlci1jYWxsIElPIG1heGltdW0gKi9cbiYjNDM7XHRhcmctXHUwMDNlbWF4X2xlbiA9IG1pbl90KHNpemVfdCwgYXJnLVx1MDAzZW1heF9sZW4sIE1BWF9SV19DT1VOVCk7XG4mIzQzO1xuIFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gXHRpZiAoYXJnLVx1MDAzZW1heF9sZW4pIHtcbiBcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbkBAIC0yOTUsNyAmIzQzOzI5OCw3IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFxuIFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cbiBcdGlmICghYXJnLVx1MDAzZW1heF9sZW4pXG4tXHRcdGFyZy1cdTAwM2VtYXhfbGVuID0gSU5UX01BWDtcbiYjNDM7XHRcdGFyZy1cdTAwM2VtYXhfbGVuID0gTUFYX1JXX0NPVU5UO1xuIFxuIFx0cmVxLVx1MDAzZWJ1Zl9pbmRleCA9IFJFQURfT05DRShidWYtXHUwMDNlYmlkKTtcbiBcdGRvIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE0MDllNmY3YzI1MGM5MzQ5MzdlM2NlMThiYWMzMzY5MzRlYmI3Y2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwODoxNzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuYwppbmRleCBkZTAxMjliY2VhYmEzMC4uMWNmNWJlNjJiYjY1NjMgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2tidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9rYnVmLmMKQEAgLTI2Niw2ICYjNDM7MjY2LDkgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsCiAJaWYgKHVubGlrZWx5KCFucl9hdmFpbCkpCiAJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwkvKiBNQVhfUldfQ09VTlQgaXMgdGhlIHVuaXZlcnNhbCBMaW51eCBwZXItY2FsbCBJTyBtYXhpbXVtICovCiYjNDM7CWFyZy0mZ3Q7bWF4X2xlbiA9IG1pbl90KHNpemVfdCwgYXJnLSZndDttYXhfbGVuLCBNQVhfUldfQ09VTlQpOwomIzQzOwogCWJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsIGhlYWQsIGJsLSZndDttYXNrKTsKIAlpZiAoYXJnLSZndDttYXhfbGVuKSB7CiAJCXUzMiBsZW4gPSBSRUFEX09OQ0UoYnVmLSZndDtsZW4pOwpAQCAtMjk1LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAogCS8qIHNldCBpdCB0byBtYXgsIGlmIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgaXQgdW5jb25kaXRpb25hbGx5ICovCiAJaWYgKCFhcmctJmd0O21heF9sZW4pCi0JCWFyZy0mZ3Q7bWF4X2xlbiA9IElOVF9NQVg7CiYjNDM7CQlhcmctJmd0O21heF9sZW4gPSBNQVhfUldfQ09VTlQ7CiAKIAlyZXEtJmd0O2J1Zl9pbmRleCA9IFJFQURfT05DRShidWYtJmd0O2JpZCk7CiAJZG8gewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIGFzIEkgc2VlIHRoZW06CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBpb191cmluZyBTZWN1cml0eSBWdWxuZXJhYmlsaXR5KioKClJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggbW9kaWZ5aW5nIGBpb191cmluZy9rYnVmLmNgLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBpbnRyb2R1Y2luZyBhIGNhcCBvbiBgYXJnLSZndDttYXhfbGVuYC4gVGhpcyBjYXAgaXMgc2V0IHRvIGBNQVhfUldfQ09VTlRgLCB3aGljaCBJIGFzc3VtZSBpcyBzb21lIGRlZmluZWQgY29uc3RhbnQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhpcyBpcyAqZnVuY3Rpb25hbCogY2hhbmdlIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIEFuZCBhcyB3ZSBhbGwga25vdywgYGlvX3VyaW5nYCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBkdWUgdG8gaXRzIGNvbXBsZXggZGVzaWduIGFuZCBwb3RlbnRpYWwgZm9yIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHNvIGFueSBmdW5jdGlvbmFsIGNoYW5nZSBoZXJlIGRlc2VydmVzIGV4dHJhIHNjcnV0aW55LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGFmZmVjdGVkIGNvZGU6IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNhcCBvbiBgbWF4X2xlbmAsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHNpZGUtZWZmZWN0cywgcmVzb3VyY2UgZXhoYXVzdGlvbiBjb25kaXRpb25zLCBvciBzdWJ0bGUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZy4KCkJleW9uZCB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGNhbGwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYC4gVGhvc2UgYXJlIHRoZSBhcmVhcyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGltcGFjdCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgSSBzaG91bGQgZm9jdXMgbXkgaW4tZGVwdGggYW5hbHlzaXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCwgYW5kIGhvdyB0aGUgY2FwcGVkIGBtYXhfbGVuYCBtaWdodCBwcm9wYWdhdGUgb3IgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgdXAgdGhlIHN0YWNrLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yaW5nX2J1ZmZlcnNfcGVlayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9MjMwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTI1Mi1cbmlvX3VyaW5nL2tidWYuYzoyNTM6c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmMtMjU0LVx0XHRcdFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmM9MzQ0PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM1NS1cdGlmIChzZWwtXHUwMDNlYnVmX2xpc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcbmlvX3VyaW5nL2tidWYuYzozNTY6XHRcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuaW9fdXJpbmcva2J1Zi5jLTM1Ny1cdFx0Lypcbi0tXG5pb191cmluZy9rYnVmLmM9MzgwPWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0zOTMtXHRpZiAoYmwtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcbmlvX3VyaW5nL2tidWYuYzozOTQ6XHRcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBibCk7XG5pb191cmluZy9rYnVmLmMtMzk1LVx0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkvTyBSaW5nIEJ1ZmZlciBQZWVrIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgaGllcmFyY2h5IHVwd2FyZHMuIEkgbmVlZCB0byBrbm93IHdoZXJlICp0aG9zZSogdHdvIGZ1bmN0aW9ucywgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AsIGFyZSBjYWxsZWQuIEtub3dpbmcgdGhlaXIgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBJL08gZmxvdy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBJL08gcmluZyBidWZmZXIgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzQzLVxuaW9fdXJpbmcva2J1Zi5jOjM0NDppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5jLTM0NS1cdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTcwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG5pb191cmluZy9rYnVmLmgtNzEtXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2tidWYuaDo3MjppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5oLTczLVx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9NjA5PXN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXG4tLVxuaW9fdXJpbmcvbmV0LmMtNjMxLVxuaW9fdXJpbmcvbmV0LmM6NjMyOlx0cmV0ID0gaW9fYnVmZmVyc19zZWxlY3QocmVxLCBcdTAwMjZhcmcsIHNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtNjMzLVx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIElPX1VSaW5nIE5ldHdvcmsgU3RhY2sqKgoKQWxyaWdodCwgc28gYGlvX2J1ZmZlcnNfc2VsZWN0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIHRoaWNrIG9mIHRoaW5ncyB3aXRoaW4gdGhlIGBpb191cmluZy9uZXQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBuZXR3b3JrIEkvTyBvcGVyYXRpb25zIGFyZSBoYXBwZW5pbmcsIG9yIGF0IGxlYXN0LCB0aGUgc2VsZWN0aW9uIG1lY2hhbmlzbXMgZm9yIHRoZW0uIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGdpdmVuIGhvdyBjcml0aWNhbCB0aGlzIGlzIGZvciBwZXJmb3JtYW5jZS4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlJiMzOTtyZSBtYWtpbmcgZGVjaXNpb25zIGFib3V0IHdoaWNoIGJ1ZmZlcnMgd2UmIzM5O3JlIGdvaW5nIHRvIHNlbmQgb3ZlciB0aGUgbmV0d29yay4gTm93LCB3aGF0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIHdoYXQgZGF0YSBpcyBhY3R1YWxseSBiZWluZyAqY29uc2lkZXJlZCogZm9yIHNlbmRpbmcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgZGF0YSBpdHNlbGYsIGFuZCBob3cgaXQgaXMgaW5zcGVjdGVkLCBieSB0YWtpbmcgYSBsb29rIGF0IGhvdyBgaW9fYnVmZmVyc19wZWVrYCBmYWN0b3JzIGludG8gdGhpcyBwcm9jZXNzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgbmV4dCBzdGVwIOKAkyB1bmRlcnN0YW5kIHRoZSBpbnNwZWN0aW9uIHByb2Nlc3Mgb2YgdGhlIElPIGJ1ZmZlcnMuIExldCYjMzk7cyBzZWUgaG93IGBpb19idWZmZXJzX3BlZWtgIGNvbWVzIGludG8gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19idWZmZXJzX3BlZWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTM0ND1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0zNzktXG5pb191cmluZy9rYnVmLmM6MzgwOmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5jLTM4MS1cdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcbi0tXG5pb191cmluZy9rYnVmLmg9NzI9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03My1cdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcva2J1Zi5oOjc0OmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuaW9fdXJpbmcva2J1Zi5oLTc1LVx0XHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcbi0tXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExNzEtXHRcdFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oYXJnLm1heF9sZW4sIHNyLVx1MDAzZW1zaG90X3RvdGFsX2xlbik7XG5pb191cmluZy9uZXQuYzoxMTcyOlx0XHRyZXQgPSBpb19idWZmZXJzX3BlZWsocmVxLCBcdTAwMjZhcmcsIHNlbCk7XG5pb191cmluZy9uZXQuYy0xMTczLVx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgaW9fdXJpbmcgTmV0d29yayBTdGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgZG93biB0aGlzIGBpb19idWZmZXJzX3BlZWtgIGZ1bmN0aW9uLiBUaGUgY29kZSB0ZWxscyBtZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgd2l0aGluIGBpb191cmluZy9uZXQuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIFRvIHJlYWxseSBnZXQgYSBncmFzcCBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciwgSSYjMzk7dmUgZ290IHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiAqb3V0d2FyZCogZnJvbSBgaW9fcmVjdl9idWZfc2VsZWN0YC4gV2hlcmUgZWxzZSBpcyB0aGlzIGZ1bmN0aW9uIGdldHRpbmcgaW52b2tlZD8gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3IgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAuIFRob3NlIGFyZSBwcm9iYWJseSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLiBJIHN1c3BlY3QgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZWlyIHBhcmVudCBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBncmFzcCBvZiBob3cgdGhlIG5ldHdvcmtpbmcgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMzctXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI0OC1cdFx0c2VsLnZhbCA9IHNyLVx1MDAzZWxlbjtcbmlvX3VyaW5nL25ldC5jOjEyNDk6XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTI1MC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBJL08gQnVmZmVyaW5nKioKCk9rYXksIHNvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBpb19yZWN2YC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgYW5kIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJiMzOTtyZSBoYW5kbGluZyByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlIGlucHV0IHBhdGguIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhhdCBwaWVjZS4gQnV0IEkmIzM5O20gc3VkZGVubHkgY3VyaW91czogd2hhdCYjMzk7cyB0aGUgYW5hbG9nb3VzIGZ1bmN0aW9uIGluIHRoZSBzZW5kaW5nIHBhdGg/IElzIHRoZXJlIGEgZnVuY3Rpb24gY29tcGFyYWJsZSB0byBgaW9fcmVjdl9idWZfc2VsZWN0YCBmb3Igc2VuZCBidWZmZXJzPyBTb21ldGhpbmcgbGlrZSBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJhbGxlbCBleGlzdHMgYW5kLCBpZiBzbywgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZSBmb3Igb3VyIG92ZXJhbGwgYnVmZmVyIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0IG1pZ2h0IHJldmVhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgc2VuZCBwYXRoIGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIGluIHRlcm1zIG9mIGJ1ZmZlciBzZWxlY3Rpb24gYW5kIGF2YWlsYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2VuZF9zZWxlY3RfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTU2MD1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTYwOC1cbmlvX3VyaW5nL25ldC5jOjYwOTpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtNjEwLVx0XHRcdFx0IHN0cnVjdCBpb19icl9zZWwgKnNlbCwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZylcbi0tXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy02OTAtXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG5pb191cmluZy9uZXQuYzo2OTE6XHRcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcdTAwMjZzZWwsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtNjkyLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEkvTyBSaW5nIEJ1ZmZlciBJbnRlcmZhY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgYGlvX3JlY3ZgIGFuZCBgaW9fc2VuZGAganVtcCBvdXQgYXQgbWUgYXMgdGhlIG9idmlvdXMgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gVGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlLCByaWdodD8gSXQmIzM5O3Mgd2hlcmUgdGhlIGRhdGEgc3RhcnRzIGZsb3dpbmcuIERlZmluaXRlbHkgaGlnaCBwcmlvcml0eS4KCkkgc2VlIGEgcGF0Y2ggdGhhdCBsaW1pdHMgYGFyZy0mZ3Q7bWF4X2xlbmAgdG8gYE1BWF9SV19DT1VOVGAgd2l0aGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEludGVyZXN0aW5nLiBUaGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbnN0cmFpbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhhdCBsaW1pdC4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGBpb19yZWN2bXNnYCBhbmQgYGlvX3NlbmRtc2dgIGNhbGwgZWl0aGVyIGBpb19yZWN2X2J1Zl9zZWxlY3RgIG9yIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaG9zZSBhcmUgdGhlIG5leHQgbGV2ZWwgZG93biB0aGUgc3RhY2sgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgYmVoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMzctXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI0OC1cdFx0c2VsLnZhbCA9IHNyLVx1MDAzZWxlbjtcbmlvX3VyaW5nL25ldC5jOjEyNDk6XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTI1MC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fcmVjdm1zZ2AgSW1wbGVtZW50YXRpb24qKgoKV2FpdCBhIHNlY29uZCwgSSB0aG91Z2h0IGBpb19yZWN2bXNnYCBoYWQgYSBkaXJlY3QgY2FsbCB0byBgaW9fcmVjdl9idWZfc2VsZWN0YD8gVGhhdCBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjay4gTGV0IG1lIHB1bGwgdXAgYGlvX3VyaW5nL25ldC5jYCBhbmQgZGlnIGludG8gdGhlIGBpb19yZWN2bXNnYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgaW5jb21pbmcgbWVzc2FnZXMgYW5kIGJ1ZmZlciBzZWxlY3Rpb24uIFRoZXJlIGNvdWxkIGJlIHNvbWV0aGluZyBzdWJ0bGUgSSYjMzk7bSBtaXNzaW5nIGluIHRoZSBpbnRlcmFjdGlvbiB0aGVyZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBuZXR3b3JrIEkvTyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBwcm9jZXNzIGFsaWducyB3aXRoIHdoYXQmIzM5O3MgYWN0dWFsbHkgY29kZWQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTExMzctXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI0OC1cdFx0c2VsLnZhbCA9IHNyLVx1MDAzZWxlbjtcbmlvX3VyaW5nL25ldC5jOjEyNDk6XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTI1MC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ29udGV4dCoqCgpSaWdodCwgc28gYGlvX3JlY3Ztc2dgLi4uIHRoYXQmIzM5O3MganVzdCBhIGJpdCBvZiBhIHJlZCBoZXJyaW5nLiBJdCYjMzk7cyBvYnZpb3VzbHkganVzdCB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBtZWFucyBpdCBzaG93ZWQgdXAgYXMgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBUaGF0JiMzOTtzIG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29yZSBJL08gZnVuY3Rpb25zLiBNeSBmb2N1cyBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdW5kZXJzdGFuZGluZyBgaW9fcmVjdmAgYW5kIGBpb19zZW5kYC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGNhbGxzIG1pZ2h0IGludGVyYWN0LCB3aGF0IHRoZSBlcnJvciBoYW5kbGluZyBsb29rcyBsaWtlLCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IG9idmlvdXMgcGxhY2Ugd2hlcmUgYW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGlzIHByZXNlbnRpbmcgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9OTM9ZW51bSBzcl9yZXRyeV9mbGFncyB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExLVxuaW9fdXJpbmcvbmV0LmM6MTEyOnN0cnVjdCBpb19yZWN2emMge1xuaW9fdXJpbmcvbmV0LmMtMTEzLVx0c3RydWN0IGZpbGVcdFx0XHQqZmlsZTtcbi0tXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy03MzMtXG5pb191cmluZy9uZXQuYzo3MzQ6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9uZXQuYy03MzUtXHRcdFx0XHQgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzU3LVxuaW9fdXJpbmcvbmV0LmM6NzU4OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTc1OS1cdFx0XHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzczLVx0fVxuaW9fdXJpbmcvbmV0LmM6Nzc0Olx0cmV0dXJuIGlvX3JlY3Ztc2dfbXNob3RfcHJlcChyZXEsIGlvbXNnLCBtc2cubXNnX25hbWVsZW4sXG5pb191cmluZy9uZXQuYy03NzUtXHRcdFx0XHRcdG1zZy5tc2dfY29udHJvbGxlbik7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNzc3LVxuaW9fdXJpbmcvbmV0LmM6Nzc4OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvbmV0LmMtNzc5LXtcbi0tXG5pb191cmluZy9uZXQuYy04MDUtXG5pb191cmluZy9uZXQuYzo4MDY6XHRyZXR1cm4gaW9fcmVjdm1zZ19jb3B5X2hkcihyZXEsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtODA3LX1cbi0tXG5pb191cmluZy9uZXQuYy04MTEtXG5pb191cmluZy9uZXQuYzo4MTI6aW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtODEzLXtcbi0tXG5pb191cmluZy9uZXQuYy04NzAtXHRzci1cdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMgPSAwO1xuaW9fdXJpbmcvbmV0LmM6ODcxOlx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xuaW9fdXJpbmcvbmV0LmMtODcyLX1cbi0tXG5pb191cmluZy9uZXQuYy04NzgtLypcbmlvX3VyaW5nL25ldC5jOjg3OTogKiBGaW5pc2hlcyBpb19yZWN2IGFuZCBpb19yZWN2bXNnLlxuaW9fdXJpbmcvbmV0LmMtODgwLSAqXG4tLVxuaW9fdXJpbmcvbmV0LmMtODgzLSAqL1xuaW9fdXJpbmcvbmV0LmM6ODg0OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTg4NS1cdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy05NjYtXG5pb191cmluZy9uZXQuYzo5Njc6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG5pb191cmluZy9uZXQuYy05NjgtXHRcdFx0XHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1Zixcbi0tXG5pb191cmluZy9uZXQuYy05OTEtXG5pb191cmluZy9uZXQuYzo5OTI6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XG5pb191cmluZy9uZXQuYy05OTMtXHRzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQgbXNnO1xuLS1cbmlvX3VyaW5nL25ldC5jLTk5Ni1cbmlvX3VyaW5nL25ldC5jOjk5NzpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpb19zcl9tc2cgKmlvLFxuaW9fdXJpbmcvbmV0LmMtOTk4LVx0XHRcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0xMDAyLVx0aW50IGNvcHlfbGVuO1xuaW9fdXJpbmcvbmV0LmM6MTAwMzpcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xuaW9fdXJpbmcvbmV0LmMtMTAwNC1cbi0tXG5pb191cmluZy9uZXQuYy0xMDM5LVx0LyogZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZ2FwIGJldHdlZW4gaGRyIGFuZCBzb2NrYWRkcl9zdG9yYWdlICovXG5pb191cmluZy9uZXQuYzoxMDQwOlx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XG5pb191cmluZy9uZXQuYy0xMDQxLVx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcbi0tXG5pb191cmluZy9uZXQuYy0xMDUwLVxuaW9fdXJpbmcvbmV0LmM6MTA1MTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtMTA1Mi17XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA4My1cdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XG5pb191cmluZy9uZXQuYzoxMDg0Olx0XHRcdHJldCA9IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoa21zZywgc3IsIFx1MDAyNnNlbC5hZGRyLCBcdTAwMjZsZW4pO1xuaW9fdXJpbmcvbmV0LmMtMTA4NS1cdFx0XHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA5Ni1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuaW9fdXJpbmcvbmV0LmM6MTA5NzpcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtMTA5OC1cdFx0XHRcdFx0ICAgXHUwMDI2bXNob3RfZmluaXNoZWQpO1xuLS1cbmlvX3VyaW5nL25ldC5jLTExMzEtXHRzZWwudmFsID0gcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTEzMjpcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG5pb191cmluZy9uZXQuYy0xMTMzLVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMTM3LVxuaW9fdXJpbmcvbmV0LmM6MTEzODpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMzktXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTIwOS1cbmlvX3VyaW5nL25ldC5jOjEyMTA6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTEyMTEte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyNDgtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjQ5Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyNTAtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI5MS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMjkyOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbmlvX3VyaW5nL25ldC5jLTEyOTMtXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyOTctXG5pb191cmluZy9uZXQuYzoxMjk4OmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtMTI5OS17XG5pb191cmluZy9uZXQuYzoxMzAwOlx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcbmlvX3VyaW5nL25ldC5jLTEzMDEtXHR1bnNpZ25lZCBpZnFfaWR4O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEzMjUtXG5pb191cmluZy9uZXQuYzoxMzI2OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTEzMjcte1xuaW9fdXJpbmcvbmV0LmM6MTMyODpcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG5pb191cmluZy9uZXQuYy0xMzI5LVx0c3RydWN0IHNvY2tldCAqc29jaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgQ29yZSBJL08gRW50cnkgUG9pbnRzKioKCkFscmlnaHQsIG15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYGlvX3NlbmRtc2dgLCBhbmQgYGlvX3JlY3Z6Y2AgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBJL08gb3BlcmF0aW9ucyBoZXJlLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgZGF0YSBmbG93IGJlZ2lucywgdGhlIHBvaW50cyBvZiBjb250YWN0LCBzbyB0byBzcGVhay4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBlYWNoLCBlc3BlY2lhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgYnVmZmVyIG1lY2hhbmlzbXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nJiMzOTtzIGJvdGhlcmluZyBtZSBhYm91dCBgaW9fcmVjdnpjYC4gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBpdCYjMzk7cyBkaXJlY3RseSBjYWxsaW5nIGBpb19idWZmZXJzX3BlZWtgIG9yIGBpb19idWZmZXJzX3NlbGVjdGAuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgJiMzNDt0aGF0IGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQsJiMzNDsgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCBtZSBtYWtlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGRlZXBlciBkaXZlIHNwZWNpZmljYWxseSBpbnRvIHRoZSBgaW9fcmVjdnpjYCBpbXBsZW1lbnRhdGlvbiB0byB2ZXJpZnkgdGhpcy4gR290dGEgY2xlYXIgdGhhdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVjdnpjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9OTM9ZW51bSBzcl9yZXRyeV9mbGFncyB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExLVxuaW9fdXJpbmcvbmV0LmM6MTEyOnN0cnVjdCBpb19yZWN2emMge1xuaW9fdXJpbmcvbmV0LmMtMTEzLVx0c3RydWN0IGZpbGVcdFx0XHQqZmlsZTtcbi0tXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI5Ny1cbmlvX3VyaW5nL25ldC5jOjEyOTg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9uZXQuYy0xMjk5LXtcbmlvX3VyaW5nL25ldC5jOjEzMDA6XHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xuaW9fdXJpbmcvbmV0LmMtMTMwMS1cdHVuc2lnbmVkIGlmcV9pZHg7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTMyNS1cbmlvX3VyaW5nL25ldC5jOjEzMjY6aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtMTMyNy17XG5pb191cmluZy9uZXQuYzoxMzI4Olx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcbmlvX3VyaW5nL25ldC5jLTEzMjktXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpb19yZWN2emMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgaW9fcmVjdnpjYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBmbG93LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHplcm8tY29weSBhc3BlY3RzIGFuZCBob3cgZWZmaWNpZW50bHkgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGRhdGEgdHJhbnNmZXIuIEFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50IGlzc3Vlcz8gTGV0JiMzOTtzIHRyYWNlIHRocm91Z2ggaXQgYW5kIHNwb3QgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiBHb3R0YSBrZWVwIGFuIGV5ZSBvdXQgZm9yIGVkZ2UgY2FzZXMsIHRvbyAtIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZXJyb3JzIGdyYWNlZnVsbHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHdlJiMzOTtyZSBhY3R1YWxseSAqZG9pbmcqIHRoZSB6ZXJvLWNvcHkgbWFnaWMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbmVmZmljaWVuY2llcyBjcmVlcGluZyBpbiB0aGF0IHdlIGNhbiBlbGltaW5hdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzI2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzI2Olx0aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuMTMyNzpcdHtcbjEzMjg6XHRcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG4xMzI5Olx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuMTMzMDpcdFx0dW5zaWduZWQgaW50IGxlbjtcbjEzMzE6XHRcdGludCByZXQ7XG4xMzMyOlx0XG4xMzMzOlx0XHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVx1MDAzZWZpbGUpO1xuMTMzNDpcdFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcbjEzMzU6XHRcdFx0cmV0dXJuIC1FTk9UU09DSztcbjEzMzY6XHRcbjEzMzc6XHRcdGlmICghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcdTAwMjZcdTAwMjZcbjEzMzg6XHRcdCAgICAoemMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUKSlcbjEzMzk6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4xMzQwOlx0XG4xMzQxOlx0XHRsZW4gPSB6Yy1cdTAwM2VsZW47XG4xMzQyOlx0XHRyZXQgPSBpb196Y3J4X3JlY3YocmVxLCB6Yy1cdTAwM2VpZnEsIHNvY2ssIDAsIGlzc3VlX2ZsYWdzLCBcdTAwMjZ6Yy1cdTAwM2VsZW4pO1xuMTM0MzpcdFx0aWYgKGxlbiBcdTAwMjZcdTAwMjYgemMtXHUwMDNlbGVuID09IDApIHtcbjEzNDQ6XHRcdFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcbjEzNDU6XHRcbjEzNDY6XHRcdFx0cmV0dXJuIElPVV9DT01QTEVURTtcbjEzNDc6XHRcdH1cbjEzNDg6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjPSAwKSBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcbjEzNDk6XHRcdFx0aWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpXG4xMzUwOlx0XHRcdFx0cmV0ID0gLUVJTlRSO1xuMTM1MTpcdFx0XHRpZiAocmV0ID09IElPVV9SRVFVRVVFKVxuMTM1MjpcdFx0XHRcdHJldHVybiBJT1VfUkVRVUVVRTtcbjEzNTM6XHRcbjEzNTQ6XHRcdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4xMzU1Olx0XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbjEzNTY6XHRcdFx0cmV0dXJuIElPVV9DT01QTEVURTtcbjEzNTc6XHRcdH1cbjEzNTg6XHRcdHJldHVybiBJT1VfUkVUUlk7XG4xMzU5Olx0fVxuMTM2MDpcdFxuMTM2MTpcdHZvaWQgaW9fc2VuZF96Y19jbGVhbnVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuMTM2MjpcdHtcbjEzNjM6XHRcdHN0cnVjdCBpb19zcl9tc2cgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4xMzY0Olx0XHRzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppbyA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuMTM2NTpcdFxuMTM2NjpcdFx0aWYgKHJlcV9oYXNfYXN5bmNfZGF0YShyZXEpKVxuMTM2NzpcdFx0XHRpb19uZXRtc2dfaW92ZWNfZnJlZShpbyk7XG4xMzY4Olx0XHRpZiAoemMtXHUwMDNlbm90aWYpIHtcbjEzNjk6XHRcdFx0aW9fbm90aWZfZmx1c2goemMtXHUwMDNlbm90aWYpO1xuMTM3MDpcdFx0XHR6Yy1cdTAwM2Vub3RpZiA9IE5VTEw7XG4xMzcxOlx0XHR9XG4xMzcyOlx0fVxuMTM3MzpcdFxuMTM3NDpcdCNkZWZpbmUgSU9fWkNfRkxBR1NfQ09NTU9OIChJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCB8IElPUklOR19SRUNWU0VORF9GSVhFRF9CVUYpXG4xMzc1Olx0I2RlZmluZSBJT19aQ19GTEFHU19WQUxJRCAgKElPX1pDX0ZMQUdTX0NPTU1PTiB8IElPUklOR19TRU5EX1pDX1JFUE9SVF9VU0FHRSB8IFxcXG4xMzc2Olx0XHRcdFx0XHRJT1JJTkdfU0VORF9WRUNUT1JJWkVEKVxuMTM3NzpcdFxuMTM3ODpcdGludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbjEzNzk6XHR7XG4xMzgwOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuMTM4MTpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuMTM4MjpcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2c7XG4xMzgzOlx0XHRzdHJ1Y3QgaW9fa2lvY2IgKm5vdGlmO1xuMTM4NDpcdFx0dTY0IHVzZXJfZGF0YTtcbjEzODU6XHRcdGludCByZXQ7XG4xMzg2Olx0XG4xMzg3Olx0XHR6Yy1cdTAwM2Vkb25lX2lvID0gMDtcbjEzODg6XHRcbjEzODk6XHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0Uoc3FlLVx1MDAzZV9fcGFkMlswXSkpKVxuMTM5MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzOTE6XHRcdC8qIHdlIGRvbiYjMzk7dCBzdXBwb3J0IElPU1FFX0NRRV9TS0lQX1NVQ0NFU1MganVzdCB5ZXQgKi9cbjEzOTI6XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0NRRV9TS0lQKVxuMTM5MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzOTQ6XHRcbjEzOTU6XHRcdG5vdGlmID0gemMtXHUwMDNlbm90aWYgPSBpb19hbGxvY19ub3RpZihjdHgpO1xuMTM5NjpcdFx0aWYgKCFub3RpZilcbjEzOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMzk4Olx0XHR1c2VyX2RhdGEgPSBSRUFEX09OQ0Uoc3FlLVx1MDAzZWFkZHIzKTtcbjEzOTk6XHRcdGlmICghdXNlcl9kYXRhKVxuMTQwMDpcdFx0XHR1c2VyX2RhdGEgPSByZXEtXHUwMDNlY3FlLnVzZXJfZGF0YTtcbjE0MDE6XHRcbjE0MDI6XHRcdG5vdGlmLVx1MDAzZWNxZS51c2VyX2RhdGEgPSB1c2VyX2RhdGE7XG4xNDAzOlx0XHRub3RpZi1cdTAwM2VjcWUucmVzID0gMDtcbjE0MDQ6XHRcdG5vdGlmLVx1MDAzZWNxZS5mbGFncyA9IElPUklOR19DUUVfRl9OT1RJRjtcbjE0MDU6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVAgfCBSRVFfRl9QT0xMX05PX0xBWlk7XG4xNDA2Olx0XG4xNDA3Olx0XHR6Yy1cdTAwM2VmbGFncyA9IFJFQURfT05DRShzcWUtXHUwMDNlaW9wcmlvKTtcbjE0MDg6XHRcdGlmICh1bmxpa2VseSh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgfklPX1pDX0ZMQUdTX0NPTU1PTikpIHtcbjE0MDk6XHRcdFx0aWYgKHpjLVx1MDAzZWZsYWdzIFx1MDAyNiB+SU9fWkNfRkxBR1NfVkFMSUQpXG4xNDEwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDExOlx0XHRcdGlmICh6Yy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFTkRfWkNfUkVQT1JUX1VTQUdFKSB7XG4xNDEyOlx0XHRcdFx0c3RydWN0IGlvX25vdGlmX2RhdGEgKm5kID0gaW9fbm90aWZfdG9fZGF0YShub3RpZik7XG4xNDEzOlx0XG4xNDE0Olx0XHRcdFx0bmQtXHUwMDNlemNfcmVwb3J0ID0gdHJ1ZTtcbjE0MTU6XHRcdFx0XHRuZC1cdTAwM2V6Y191c2VkID0gZmFsc2U7XG4xNDE2Olx0XHRcdFx0bmQtXHUwMDNlemNfY29waWVkID0gZmFsc2U7XG4xNDE3Olx0XHRcdH1cbjE0MTg6XHRcdH1cbjE0MTk6XHRcbjE0MjA6XHRcdHpjLVx1MDAzZWxlbiA9IFJFQURfT05DRShzcWUtXHUwMDNlbGVuKTtcbjE0MjE6XHRcdHpjLVx1MDAzZW1zZ19mbGFncyA9IFJFQURfT05DRShzcWUtXHUwMDNlbXNnX2ZsYWdzKSB8IE1TR19OT1NJR05BTCB8IE1TR19aRVJPQ09QWTtcbjE0MjI6XHRcdHJlcS1cdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0Uoc3FlLVx1MDAzZWJ1Zl9pbmRleCk7XG4xNDIzOlx0XHRpZiAoemMtXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpXG4xNDI0Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9OT1dBSVQ7XG4xNDI1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJL08gT3BlcmF0aW9ucyBpbiBSZWxhdGlvbiB0byBpb191cmluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGBpb19yZWN2emNgIGlzIG5vdCB1dGlsaXppbmcgYGlvX2J1ZmZlcnNfcGVla2Agb3IgYGlvX2J1ZmZlcnNfc2VsZWN0YC4gVGhhdCBtZWFucyB0aGUgaW50ZXJlc3RpbmcgYXJlYXMgZm9yIGludmVzdGlnYXRpb24gYXJlIHJlYWxseSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYW5kIGBpb19zZW5kbXNnYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHdoZW4gd29ya2luZyB3aXRoIGBpb191cmluZ2AuIGBDT05GSUdfSU9fVVJJTkdgIGlzLCBvZiBjb3Vyc2UsIGEgZ2l2ZW4sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSAtIHRoYXQgc2hvdWxkIGhvbGQgdGhlIGFuc3dlcnMgcmVnYXJkaW5nIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkludmVzdGlnYXRpbmcgdGhlIGlvX3VyaW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBpb191cmluZ2AgaXMgZW5hYmxlZCBieSB0aGUgYENPTkZJR19JT19VUklOR2Agb3B0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBkZWZpbmVkLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTtsbCBzdGFydCB3aXRoIGVpdGhlciBgaW5pdC9LY29uZmlnYCDigJMgdGhhdCYjMzk7cyBhIGNsYXNzaWMgcGxhY2UgZm9yIGZ1bmRhbWVudGFsIG9wdGlvbnMg4oCTIG9yIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHksIGBpb191cmluZy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCB3b3VsZCBsaWtlbHkgcmVzaWRlIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIHN1YnN5c3RlbSBpdHNlbGYuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIGl0cyBkZWZpbml0aW9uLCBhbmQgaG9wZWZ1bGx5IGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE0LVxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM2LVxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5MzgtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkNoZWNraW5nIGBpb191cmluZy9rYnVmLmNgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGBDT05GSUdfSU9fVVJJTkdgIGlzIHByYWN0aWNhbGx5IGFzc3VtZWQgYXQgdGhpcyBwb2ludCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaXMgcGF0Y2ggbGFuZGVkIGluIGBpb191cmluZy9rYnVmLmNgLCBzbyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBidWlsZCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8ganVtcCBpbnRvIGBpb191cmluZy9NYWtlZmlsZWAgYW5kIHF1aWNrbHkgbG9vayBmb3IgYW55dGhpbmcgdGhhdCB0YXJnZXRzIHRoYXQgc3BlY2lmaWMgZmlsZS4gSXQgY291bGQgYmUgYW4gb2J2aW91cyBjb25maWd1cmF0aW9uIGNoZWNrLCBvciBtYXliZSBhIG1vcmUgc3VidGxlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGBpb191cmluZ2AgZmVhdHVyZXMuIFRoZSBNYWtlZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdGhlcmUgaW5mbHVlbmNpbmcgaG93IGBrYnVmLmNgIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tidWYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT03PWVuZGlmXG5pb191cmluZy9NYWtlZmlsZS04LVxuaW9fdXJpbmcvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU9fVVJJTkcpXHRcdCYjNDM7PSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXG5pb191cmluZy9NYWtlZmlsZS0xMC1cdFx0XHRcdFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTM2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVmZmVyIFBlZWsgTGVuZ3RoIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkLCBhbGJlaXQgaW1wb3J0YW50LCBjaGFuZ2UgZm9yIGBpb191cmluZ2AuIEl0IHNlZW1zIHRoaXMgY29kZSBwYXRoIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUgZW5vdWdoOiB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBtYXhpbXVtIGJ1ZmZlciBsZW5ndGggY2hlY2sgd2l0aGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIG1ha2luZyBzdXJlIGBhcmctJmd0O21heF9sZW5gIGlzbiYjMzk7dCBleGNlZWRpbmcgYE1BWF9SV19DT1VOVGAgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCB0aGUgcGVlayBvcGVyYXRpb24uIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZXhjZXNzaXZlbHkgbGFyZ2UgcmVhZHMgb3Igd3JpdGVzLCBndWFyZGluZyBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byB1bmJvdW5kZWQgSU8uIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGNvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgbmF0dXJlIG9mIGBpb191cmluZ2AuCgpUaGUgY29yZSBsb2dpYyBoZXJlIGlzIHByZXR0eSBjbGVhcjogd2UmIzM5O3JlIHVzaW5nIGBtaW5fdGAgdG8gY2xhbXAgYGFyZy0mZ3Q7bWF4X2xlbmAgdG8gYE1BWF9SV19DT1VOVGAuIEFsc28gd29ydGggbm90aW5nIHRoYXQgaWYgYGFyZy0mZ3Q7bWF4X2xlbmAgaXNuJiMzOTt0IHNldCwgdGhlbiB3ZSYjMzk7cmUgbm93IHNldHRpbmcgaXQgdG8gYE1BWF9SV19DT1VOVGAuIFByZXZpb3VzbHkgaXQgd2FzIHNldCB0byBgSU5UX01BWGAuCgpNeSBpbW1lZGlhdGUgZm9jdXMgbm93IHNoaWZ0cyB0byB0aGUgY2FsbGVycyBvZiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBzcGVjaWZpY2FsbHkgYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYW5kIGBpb19zZW5kbXNnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbGVuZ3RoIGNvbnN0cmFpbnQgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBsb2dpYyBpbiB0aG9zZSBmdW5jdGlvbnMuIEFyZSB0aGVyZSBhbnkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCB0aGUgbWF4aW11bSBidWZmZXIgbGVuZ3RoPyBEb2VzIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlIGFueSBhZGp1c3RtZW50cyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXZlbiBpZiBpdCBzZWVtcyBzYWZlIGF0IGZpcnN0IGdsYW5jZT8KCkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2guIEkgc2hvdWxkIGlkZW50aWZ5IGFueSBvdGhlciBjYWxsZXJzIG9mIGBpb19idWZmZXJzX3NlbGVjdGAgb3IgYGlvX2J1ZmZlcnNfcGVla2Agd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgYmVlbiBvdmVybG9va2VkLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gYW5hbHl6ZSB0aGUgY29tcGxldGUgY2FsbCBncmFwaCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgaXMgbG9jYWxpemVkIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19idWZmZXJzX3NlbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9MjUzPXN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuLS1cbmlvX3VyaW5nL2tidWYuYy0zNDMtXG5pb191cmluZy9rYnVmLmM6MzQ0OmludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmMtMzQ1LVx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9rYnVmLmg9NzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbmlvX3VyaW5nL2tidWYuaC03MS1cdFx0XHRcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcva2J1Zi5oOjcyOmludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmgtNzMtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbi0tXG5pb191cmluZy9uZXQuYz02MDk9c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbi0tXG5pb191cmluZy9uZXQuYy02MzEtXG5pb191cmluZy9uZXQuYzo2MzI6XHRyZXQgPSBpb19idWZmZXJzX3NlbGVjdChyZXEsIFx1MDAyNmFyZywgc2VsLCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuYy02MzMtXHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRm9jdXNpbmcgb24gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19idWZmZXJzX3NlbGVjdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaGVyZS4gVGhlIGltcGxpY2F0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlICpvbmx5KiBjYWxsIHBhdGggdGhhdCBsZWFkcyB0byBgaW9fYnVmZmVyc19zZWxlY3RgIGdvZXMgdGhyb3VnaCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhpcyBpcyBhIGNydWNpYWwgb2JzZXJ2YXRpb24uIEl0IGltbWVkaWF0ZWx5IG5hcnJvd3MgbXkgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zIGludGltYXRlbHkuCgpXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZGVzaWduPyBJcyBgaW9fYnVmZmVyc19zZWxlY3RgIGNvbnNpZGVyZWQgYSBwcml2YXRlIGhlbHBlciBvZiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgb3IgaXMgaXQgcG90ZW50aWFsbHkgbW9yZSBvZiBhIHNoYXJlZCByZXNvdXJjZSwgYnV0IGp1c3QgKnVzZWQqIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/IElmIGl0JiMzOTtzIHRoZSBsYXR0ZXIsIGNvdWxkIHRoZXJlIGJlIGltcGxpY2F0aW9ucyBmb3IgZnV0dXJlIGNvZGUgbW9kaWZpY2F0aW9ucz8gVGhlIHRpZ2h0IGNvdXBsaW5nIHNob3VsZCBicmluZyB1cCBhIGZldyBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlOgoKKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFByb3BhZ2F0aW9uOioqIEhvdyBkb2VzIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGhhbmRsZSBlcnJvcnMgcmV0dXJuZWQgZnJvbSBgaW9fYnVmZmVyc19zZWxlY3RgPyBJcyB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcsIG9yIGlzIGl0IGFzc3VtZWQgdGhhdCBgaW9fYnVmZmVyc19zZWxlY3RgICphbHdheXMqIHN1Y2NlZWRzIHdoZW4gY2FsbGVkIGZyb20gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmA/CiogICAqKlBlcmZvcm1hbmNlIENvbnNpZGVyYXRpb25zOioqIFdoYXQmIzM5O3MgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YD8gSXMgaXQgb3B0aW1pemVkLCBvciBpcyB0aGlzIHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBjb3VsZCBleGlzdD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZnJlcXVlbnQsIGhpZ2gtdm9sdW1lIGNhbGxzPyBBbnkgcmVzb3VyY2UgY29udGVudGlvbiBjb25zaWRlcmF0aW9ucyBoZXJlPwoqICAgKipUZXN0aW5nIGFuZCBEZWJ1Z2dpbmc6KiogVGhpcyBwcm92aWRlcyBhIHNpbXBsaWZpZWQgZW50cnkgcG9pbnQgZm9yIGRlYnVnZ2luZyBgaW9fYnVmZmVyc19zZWxlY3RgLiBJZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgSSBjYW4gZGlyZWN0bHkgZm9jdXMgb24gc2NlbmFyaW9zIGluaXRpYXRlZCB0aHJvdWdoIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGUgY29udHJvbCBmbG93IGlzIHN0cmFpZ2h0Zm9yd2FyZC4KKiAgICoqUG90ZW50aWFsIGZvciBSZWZhY3RvcmluZzoqKiBDb3VsZCB0aGlzIGRlc2lnbiBjcmVhdGUgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZnJhZ2lsaXR5PyBTaG91bGQgYGlvX2J1ZmZlcnNfc2VsZWN0YCBiZSBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGZ1dHVyZT8gV2hhdCB3b3VsZCB0aGF0IGVudGFpbCBmcm9tIGEgdGVzdGluZy92YWxpZGF0aW9uIHBlcnNwZWN0aXZlPwoKSW4gc3VtbWFyeSwgdGhpcyBpcyBhIGNsZWFuLCBjb250YWluZWQgcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgcmVhbGx5IGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiAqaG93KiB0aGVzZSB0d28gYXJlIGxpbmtlZCB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvbiBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIG1haW50YWluYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0zNDQ9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzc5LVxuaW9fdXJpbmcva2J1Zi5jOjM4MDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0zODEtXHRcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTcyPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmgtNzMtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2tidWYuaDo3NDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03NS1cdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTEzOD1zdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0xMTcxLVx0XHRcdGFyZy5tYXhfbGVuID0gbWluX25vdF96ZXJvKGFyZy5tYXhfbGVuLCBzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xuaW9fdXJpbmcvbmV0LmM6MTE3MjpcdFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXHUwMDI2YXJnLCBzZWwpO1xuaW9fdXJpbmcvbmV0LmMtMTE3My1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTQwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGlnZ2luZyBpbnRvIEJ1ZmZlciBJbnRlcmFjdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgYnVmZmVyIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFnYWluLiBJJiMzOTttIHNlZWluZyB0aGF0IG9ubHkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgc2VlbXMgdG8gZGlyZWN0bHkgY2FsbCBgaW9fYnVmZmVyc19wZWVrYC4gQnV0IHRoYXQmIzM5O3MganVzdCB0aGUgcGx1cmFsIHZlcnNpb24gKGBpb19idWZmZXJzYCkuCgpJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gV2hhdCBhYm91dCBgaW9fYnVmZmVyX3NlbGVjdGAgd2l0aCBhICpzaW5ndWxhciogYGJ1ZmZlcmA/IElzIHRoYXQgcmVsYXRlZCB0byB0aGlzIHBlZWsgZnVuY3Rpb24gaW4gc29tZSB3YXk/IE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhIGNvbm5lY3Rpb24gaGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgc2luZ3VsYXIgYGlvX2J1ZmZlcl9zZWxlY3RgIGFjdHVhbGx5IGNhbGxzIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEl0JiMzOTtzIHBvc3NpYmxlIGl0IGlzIGhhbmRsaW5nIGluZGl2aWR1YWwgYnVmZmVycywgcGVyaGFwcyBjaGVja2luZyB0aGVtIGFnYWluc3QgdGhlIHJpbmcgYnVmZmVycyBzb21laG93LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19idWZmZXJfc2VsZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0xOTI9c3RhdGljIHN0cnVjdCBpb19icl9zZWwgaW9fcmluZ19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbi0tXG5pb191cmluZy9rYnVmLmMtMjI5LVxuaW9fdXJpbmcva2J1Zi5jOjIzMDpzdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxuaW9fdXJpbmcva2J1Zi5jLTIzMS1cdFx0XHRcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTYwPXN0cnVjdCBidWZfc2VsX2FyZyB7XG4tLVxuaW9fdXJpbmcva2J1Zi5oLTY5LVxuaW9fdXJpbmcva2J1Zi5oOjcwOnN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG5pb191cmluZy9rYnVmLmgtNzEtXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbi0tXG5pb191cmluZy9uZXQuYz0xMDUxPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA3OC1cbmlvX3VyaW5nL25ldC5jOjEwNzk6XHRcdHNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcdTAwMjZsZW4sIHNyLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0LmMtMTA4MC1cdFx0aWYgKCFzZWwuYWRkcilcbi0tXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExOTQtXG5pb191cmluZy9uZXQuYzoxMTk1Olx0XHQqc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNmxlbiwgc3ItXHUwMDNlYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuYy0xMTk2LVx0XHRpZiAoIXNlbC1cdTAwM2VhZGRyKVxuLS1cbmlvX3VyaW5nL3J3LmM9MTEwPXN0YXRpYyBpbnQgX19pb19pbXBvcnRfcndfYnVmZmVyKGludCBkZGlyLCBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9ydy5jLTEyMi1cdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbmlvX3VyaW5nL3J3LmM6MTIzOlx0XHQqc2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFx1MDAyNnNxZV9sZW4sIGlvLVx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvcncuYy0xMjQtXHRcdGlmICghc2VsLVx1MDAzZWFkZHIpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MzYzPXN0cnVjdCBpb19icl9zZWwgaW9fdXJpbmdfY21kX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTM3NC1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM3NTpcdHJldHVybiBpb19idWZmZXJfc2VsZWN0KHJlcSwgbGVuLCBidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTM3Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBjb2RlLCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVjaXBoZXJpbmcgdGhlIEJ1ZmZlciBTZWxlY3Rpb24gYW5kIFBlZWsgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyB1bnRhbmdsZSB0aGlzLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgc3lzdGVtIHNlbGVjdHMgYW5kICYjMzQ7cGVla3MmIzM0OyBpbnRvIEkvTyBidWZmZXJzLiBJbml0aWFsbHksIEkgdGhvdWdodCBgaW9fYnVmZmVyX3NlbGVjdGAg4oCTIG5vdGljZSB0aGUgc2luZ3VsYXIgJiMzNDtidWZmZXImIzM0OyDigJMgd2FzIGRpcmVjdGx5IHRpZWQgdG8gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCDigJMgdGhlIHBsdXJhbC4gQnV0IGhhbmcgb24sIGl0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgdGhlIHNpbmd1bGFyIGBpb19yaW5nX2J1ZmZlcl9zZWxlY3RgIGZ1bmN0aW9uIGluc3RlYWQuCgpUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhlIHBhdGNoIGlzIG1ha2luZyBjaGFuZ2VzIHRvIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIGFuZCB0aGVzZSBhcmUgdGhlICpwbHVyYWwqLiBTbywgd2UgaGF2ZSBhbiBpbml0aWFsIGRpc2Nvbm5lY3QgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb24gbmFtZXMuCgpOb3csIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgdGhhdCB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGFyZSBhY3R1YWxseSBgaW9fYnVmZmVyc19zZWxlY3RgIChwbHVyYWwpIGFuZCBgaW9fYnVmZmVyc19wZWVrYCAocGx1cmFsKS4gVGhlc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHRoZSBzZW5kL3JlY2VpdmUgcm91dGluZXM6IGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gV2hpY2ggSSByZWNvZ25pemUgYXMgaW50ZXJuYWwgaGVscGVycyB0aGF0IGFyZSBpbiB0dXJuIHVzZWQgYnkgb3VyIGZhbWlsaWFyIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIHJvdXRpbmVzLgoKSG9sZCBvbiBhIHNlYy4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIGdvdCB0aGlzIHJpZ2h0LiBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgaW9fcmVjdm1zZ2AgKmFsc28qIGNhbGxzIGBpb19yZWN2X2J1Zl9zZWxlY3RgPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgaW9fcmVjdm1zZ2AgaW1wbGVtZW50YXRpb24uLi4ganVzdCB0byBiZSBjZXJ0YWluLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gaGF2ZSB0aGF0IGVudGlyZSBjYWxsIGNoYWluIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlY3ZfYnVmX3NlbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTEwNTE9aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMTM3LVxuaW9fdXJpbmcvbmV0LmM6MTEzODpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMzktXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmM9MTIxMD1pbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTEyNDgtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjQ5Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyNTAtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBpb19yZWN2bXNnYCBhbmQgYGlvX3NlbmRtc2dgIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBJL08gcm91dGluZXMgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCwgc3BlY2lmaWNhbGx5IGBpb19yZWN2bXNnYC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gaXQgdXNlZCBgaW9fcmVjdl9idWZfc2VsZWN0YCwgYnV0IEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIGNvcnJlY3Rpb24gaGVyZSAtIGl0IGFjdHVhbGx5IGNhbGxzIGBpb19idWZmZXJfc2VsZWN0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IHRoZSBkaWZmZXJlbmNlIGluIHdoaWNoIGJ1ZmZlciBzZWxlY3Rpb24gbWVjaGFuaXNtIGlzIHVzZWQgY2FuIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJdCBhbHNvIGFmZmVjdHMgdGhlIGZsb3cgb2YgZGF0YSBhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZC4KCk5vdywgdGhhdCBicmluZ3MgdXAgYSBnb29kIHBvaW50LiBJZiBgaW9fcmVjdm1zZ2AgYmVoYXZlcyB0aGlzIHdheSwgd2hhdCBpcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8gc2VuZCBhIG1lc3NhZ2U/IFRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgdGhpcyBhbmFseXNpcyBpcyB0byBjaGVjayBob3cgYGlvX3NlbmRtc2dgIGZ1bmN0aW9ucy4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBzYW1lIHBhdHRlcm4gaG9sZHM7IGlmIGl0IGNhbGxzIGBpb19idWZmZXJfc2VsZWN0YCwgb3Igc29tZSBvdGhlciBzZWxlY3Rpb24gbWV0aG9kLiBEZXRlcm1pbmluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiBjYWxsIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgSS9PIHNjaGVtZSB0aGF0JiMzOTtzIHVzZWQuIFRoaXMgaGFzIHRvIGJlIHVuZGVyc3Rvb2QgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQgb24gaG93IHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG9yIHBlcmZvcm1hbmNlIGFyZSBiZWluZyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc2VuZF9zZWxlY3RfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9NTYwPWludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNjA4LVxuaW9fdXJpbmcvbmV0LmM6NjA5OnN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXG5pb191cmluZy9uZXQuYy02MTAtXHRcdFx0XHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxuLS1cbmlvX3VyaW5nL25ldC5jPTY1Nz1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTY5MC1cdGlmIChpb19kb19idWZmZXJfc2VsZWN0KHJlcSkpIHtcbmlvX3VyaW5nL25ldC5jOjY5MTpcdFx0cmV0ID0gaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHJlcSwgaXNzdWVfZmxhZ3MsIFx1MDAyNnNlbCwga21zZyk7XG5pb191cmluZy9uZXQuYy02OTItXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBpb19zZW5kbXNnYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCBgaW9fc2VuZG1zZ2AgaXNuJiMzOTt0IGNhbGxpbmcgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhpcy4gVGhpcyBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBpc3N1ZXMg4oCTIGFueSBwcm9ibGVtcyByZWxhdGVkIHRvIHRoaXMgbm9uLWNhbGwgd291bGQgbGlrZWx5IHJlc2lkZSB3aXRoaW4gdGhlIGxvZ2ljIG9mIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCB0aGVuLgoKVG8gY29uZmlybSB0aGlzIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvbm5lY3Rpb25zIEkmIzM5O20gbWlzc2luZywgSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBhdWRpdCB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZm9yIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgIGFnYWluLiBUaGV5IHNob3VsZCBiZSB0aGUgb25lcyBpbnRlcmFjdGluZyB3aXRoIHRob3NlIGJ1ZmZlcnMsIGFuZCBhIGRlZXBlciBkaXZlIG1pZ2h0IGlsbHVtaW5hdGUgYW55IHNpZGUgZWZmZWN0cyBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYnJvYWRlciBiZWhhdmlvdXIgb2YgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0yNTM9c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM0My1cbmlvX3VyaW5nL2tidWYuYzozNDQ6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0zNDUtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2tidWYuaD03MD1zdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxuaW9fdXJpbmcva2J1Zi5oLTcxLVx0XHRcdFx0ICB1bnNpZ25lZCBidWZfZ3JvdXAsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9rYnVmLmg6NzI6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03My1cdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL25ldC5jPTYwOT1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuLS1cbmlvX3VyaW5nL25ldC5jLTYzMS1cbmlvX3VyaW5nL25ldC5jOjYzMjpcdHJldCA9IGlvX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTYzMy1cdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBEZWR1Y3RpdmUgUmVhc29uaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGUga2V5IG9ic2VydmF0aW9uIGhlcmUgaXMgdGhlIGV4cGxpY2l0IG1lbnRpb24gb2YgdGhlIGZ1bmN0aW9uIGBpb19idWZmZXJzX3NlbGVjdGAuIE15IHRob3VnaHQgaXMgdGhhdCBJIG5lZWQgdG8gem9vbSBpbiBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBUaGUgdGV4dCBjbGVhcmx5IHN0YXRlcyB0aGF0IG9ubHkgdGhlIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGZ1bmN0aW9uIGFjdHVhbGx5IG1ha2VzIGEgY2FsbCB0byBgaW9fYnVmZmVyc19zZWxlY3RgLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IEkgc2hvdWxkIGJlZ2luIG15IGludmVzdGlnYXRpb24gYnkgZXhhbWluaW5nIHRoZSBjYWxsIGNoYWluIG9mIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIHRvIHVuZGVyc3RhbmQgd2hhdCBpbnB1dHMgaXQgdXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0zNDQ9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzc5LVxuaW9fdXJpbmcva2J1Zi5jOjM4MDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0zODEtXHRcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTcyPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmgtNzMtXHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2tidWYuaDo3NDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuaC03NS1cdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7XG4tLVxuaW9fdXJpbmcvbmV0LmM9MTEzOD1zdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy0xMTcxLVx0XHRcdGFyZy5tYXhfbGVuID0gbWluX25vdF96ZXJvKGFyZy5tYXhfbGVuLCBzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xuaW9fdXJpbmcvbmV0LmM6MTE3MjpcdFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXHUwMDI2YXJnLCBzZWwpO1xuaW9fdXJpbmcvbmV0LmMtMTE3My1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODA1CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBgaW9fdXJpbmdgIHBhdGNoLiBGcm9tIG15IGFuYWx5c2lzLCBpdCBsb29rcyBsaWtlIG9ubHkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgaXMgY2FsbGluZyBgaW9fYnVmZmVyc19wZWVrYCwgd2hpY2ggbWFrZXMgdGhpbmdzIGVhc2llciB0byB0cmFjay4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMgYXJlIGluZGVlZDogYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGFuZCBgaW9fYnVmZmVyc19wZWVrYC4KCkkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhhdCBib3RoIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgIGFyZSBub3Qgc3RhdGljLCB0aGV5IGFyZSBleHBvcnRlZCBmcm9tIGBpb191cmluZy9rYnVmLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW9fdXJpbmcva2J1Zi5oYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGFyZSBhY2Nlc3NpYmxlIGFuZCBhcmUgdmFsaWQgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIHNjcnV0aW55IGFuZCBmdXp6aW5nLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSBjaGVja2VkLCBhbmQgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0LgoKVG8gc3VtbWFyaXplIG15IGZpbmRpbmdzIHN1Y2NpbmN0bHksIGFuZCB0byBnaXZlIHNvbWUgc3RydWN0dXJlZCBkZXRhaWxzIGZvciB0aGUgZnV6emVyOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBiZWNhdXNlIHRoaXMgaXMgYSBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uIGNoYW5nZQoqICAgKipGb2N1c1N5bWJvbHM6KiogYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgIC0gdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdCB0aGUgY2hhbmdlcwoqICAgKipFbmFibGVDb25maWdzOioqIGBJT19VUklOR2AgLSB0aGF0IGlzIHRoZSBiYXNlIGNvbmZpZyByZXF1aXJlbWVudAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBsaW1pdGluZyB0aGUgbWF4aW11bSBidWZmZXIgbGVuZ3RoIGZldGNoZWQgZnJvbSB0aGUgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gYE1BWF9SV19DT1VOVGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBgaW9fdXJpbmdgIGxvZ2ljLCBwcmltYXJpbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB3aGVyZSByaW5nIGJ1ZmZlcnMgYXJlIGludm9sdmVkLiBUaGlzIGlzIGltcG9ydGFudCB0byB0ZXN0IGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19zZW5kJiMzNDssCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE3OjUzLjc5MDkzNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ2NDU0NTU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19zZW5kXCIsXG4gICAgXCJpb19yZWN2XCIsXG4gICAgXCJpb19idWZmZXJzX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19wZWVrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBleGNlc3NpdmVseSBsYXJnZSBJTyBvcGVyYXRpb24gYnkgY2FwcGluZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBidWZmZXIgcGVla2VkIGZyb20gYSByaW5nIGJ1ZmZlciBpbiBpb191cmluZyB0byBNQVhfUldfQ09VTlQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb191cmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzZW5kIGFuZCByZWNlaXZlIG9wZXJhdGlvbnMgdGhhdCB1c2UgcHJvdmlkZWQgcmluZyBidWZmZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1My43OTA5NDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDM5NTA3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDA5ZTZmN2MyNTBjOTM0OTM3ZTNjZTE4YmFjMzM2OTM0ZWJiN2NmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDA4OjE3OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xcbmluZGV4IGRlMDEyOWJjZWFiYTMwLi4xY2Y1YmU2MmJiNjU2MyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9rYnVmLmNcXG4rKysgYi9pb191cmluZy9rYnVmLmNcXG5AQCAtMjY2LDYgKzI2Niw5IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiBcXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG4rXFx0LyogTUFYX1JXX0NPVU5UIGlzIHRoZSB1bml2ZXJzYWwgTGludXggcGVyLWNhbGwgSU8gbWF4aW11bSAqL1xcbitcXHRhcmctXFx1MDAzZW1heF9sZW4gPSBtaW5fdChzaXplX3QsIGFyZy1cXHUwMDNlbWF4X2xlbiwgTUFYX1JXX0NPVU5UKTtcXG4rXFxuIFxcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsIGhlYWQsIGJsLVxcdTAwM2VtYXNrKTtcXG4gXFx0aWYgKGFyZy1cXHUwMDNlbWF4X2xlbikge1xcbiBcXHRcXHR1MzIgbGVuID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlbGVuKTtcXG5AQCAtMjk1LDcgKzI5OCw3IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiBcXG4gXFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cXG4gXFx0aWYgKCFhcmctXFx1MDAzZW1heF9sZW4pXFxuLVxcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiA9IElOVF9NQVg7XFxuK1xcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiA9IE1BWF9SV19DT1VOVDtcXG4gXFxuIFxcdHJlcS1cXHUwMDNlYnVmX2luZGV4ID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlYmlkKTtcXG4gXFx0ZG8ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1NC40OTU4NTUzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMzk0MDUyMzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBjYXBwaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGJ1ZmZlciBwZWVrZWQgZnJvbSBhIHJpbmcgYnVmZmVyIGluIGlvX3VyaW5nIHRvIE1BWF9SV19DT1VOVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB0aGF0IHVzZSBwcm92aWRlZCByaW5nIGJ1ZmZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0MDllNmY3YzI1MGM5MzQ5MzdlM2NlMThiYWMzMzY5MzRlYmI3Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwODoxNzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xuaW5kZXggZGUwMTI5YmNlYWJhMzAuLjFjZjViZTYyYmI2NTYzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5jXG4rKysgYi9pb191cmluZy9rYnVmLmNcbkBAIC0yNjYsNiArMjY2LDkgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0LyogTUFYX1JXX0NPVU5UIGlzIHRoZSB1bml2ZXJzYWwgTGludXggcGVyLWNhbGwgSU8gbWF4aW11bSAqL1xuK1x0YXJnLVx1MDAzZW1heF9sZW4gPSBtaW5fdChzaXplX3QsIGFyZy1cdTAwM2VtYXhfbGVuLCBNQVhfUldfQ09VTlQpO1xuK1xuIFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gXHRpZiAoYXJnLVx1MDAzZW1heF9sZW4pIHtcbiBcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbkBAIC0yOTUsNyArMjk4LDcgQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXG4gXHQvKiBzZXQgaXQgdG8gbWF4LCBpZiBub3Qgc2V0LCBzbyB3ZSBjYW4gdXNlIGl0IHVuY29uZGl0aW9uYWxseSAqL1xuIFx0aWYgKCFhcmctXHUwMDNlbWF4X2xlbilcbi1cdFx0YXJnLVx1MDAzZW1heF9sZW4gPSBJTlRfTUFYO1xuK1x0XHRhcmctXHUwMDNlbWF4X2xlbiA9IE1BWF9SV19DT1VOVDtcbiBcbiBcdHJlcS1cdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0UoYnVmLVx1MDAzZWJpZCk7XG4gXHRkbyB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1NC40OTU4NTc1NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE4MjU0MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMsIGFzIEkgc2VlIHRoZW06XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIGlvX3VyaW5nIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdHkqKlxuXG5SaWdodCwgc28gd2UndmUgZ290IGEgcGF0Y2ggbW9kaWZ5aW5nIGBpb191cmluZy9rYnVmLmNgLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBpbnRyb2R1Y2luZyBhIGNhcCBvbiBgYXJnLVx1MDAzZW1heF9sZW5gLiBUaGlzIGNhcCBpcyBzZXQgdG8gYE1BWF9SV19DT1VOVGAsIHdoaWNoIEkgYXNzdW1lIGlzIHNvbWUgZGVmaW5lZCBjb25zdGFudC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCB0aGlzIGlzICpmdW5jdGlvbmFsKiBjaGFuZ2Ugd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gQW5kIGFzIHdlIGFsbCBrbm93LCBgaW9fdXJpbmdgIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGR1ZSB0byBpdHMgY29tcGxleCBkZXNpZ24gYW5kIHBvdGVudGlhbCBmb3Igc3VidGxlIGNvbmN1cnJlbmN5IGlzc3Vlcywgc28gYW55IGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUgZGVzZXJ2ZXMgZXh0cmEgc2NydXRpbnkuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCBjb2RlOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYXAgb24gYG1heF9sZW5gLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHNpZGUtZWZmZWN0cywgcmVzb3VyY2UgZXhoYXVzdGlvbiBjb25kaXRpb25zLCBvciBzdWJ0bGUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZy5cblxuQmV5b25kIHRoYXQsIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4uIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGNhbGwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYC4gVGhvc2UgYXJlIHRoZSBhcmVhcyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGltcGFjdCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgSSBzaG91bGQgZm9jdXMgbXkgaW4tZGVwdGggYW5hbHlzaXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCBhbmQgaG93IHRoZSBjYXBwZWQgYG1heF9sZW5gIG1pZ2h0IHByb3BhZ2F0ZSBvciBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciB1cCB0aGUgc3RhY2suIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE3OjU4LjgxNDExNDk1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUwMzE2MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmluZ19idWZmZXJzX3BlZWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0yNTItXFxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMjU0LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzQ0PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzU1LVxcdGlmIChzZWwtXFx1MDAzZWJ1Zl9saXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcXG5pb191cmluZy9rYnVmLmM6MzU2OlxcdFxcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9rYnVmLmMtMzU3LVxcdFxcdC8qXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzgwPWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM5My1cXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcbmlvX3VyaW5nL2tidWYuYzozOTQ6XFx0XFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcXG5pb191cmluZy9rYnVmLmMtMzk1LVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxNzo1OS4wMjkxNTM5NzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgwODI5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSS9PIFJpbmcgQnVmZmVyIFBlZWsgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gSXQncyBjYWxsZWQgYnkgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBoaWVyYXJjaHkgdXB3YXJkcy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgKnRob3NlKiB0d28gZnVuY3Rpb25zLCBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCwgYXJlIGNhbGxlZC4gS25vd2luZyB0aGVpciBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgZml0cyBpbnRvIHRoZSBvdmVyYWxsIEkvTyBmbG93LiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIEkvTyByaW5nIGJ1ZmZlciBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjAyLjkwOTk4NjMwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1MzYxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yNTM9c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzQzLVxcbmlvX3VyaW5nL2tidWYuYzozNDQ6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMzQ1LVxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTcwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTcxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaDo3MjppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03My1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy9uZXQuYz02MDk9c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTYzMS1cXG5pb191cmluZy9uZXQuYzo2MzI6XFx0cmV0ID0gaW9fYnVmZmVyc19zZWxlY3QocmVxLCBcXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuYy02MzMtXFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODowMy4wNjk1Mjg2NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDc4MzM2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIElPX1VSaW5nIE5ldHdvcmsgU3RhY2sqKlxuXG5BbHJpZ2h0LCBzbyBgaW9fYnVmZmVyc19zZWxlY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGF0IG1lYW5zIHdlJ3JlIGluIHRoZSB0aGljayBvZiB0aGluZ3Mgd2l0aGluIHRoZSBgaW9fdXJpbmcvbmV0LmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbmV0d29yayBJL08gb3BlcmF0aW9ucyBhcmUgaGFwcGVuaW5nLCBvciBhdCBsZWFzdCwgdGhlIHNlbGVjdGlvbiBtZWNoYW5pc21zIGZvciB0aGVtLiBUaGlzIGlzIGludGVyZXN0aW5nLCBnaXZlbiBob3cgY3JpdGljYWwgdGhpcyBpcyBmb3IgcGVyZm9ybWFuY2UuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlJ3JlIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggYnVmZmVycyB3ZSdyZSBnb2luZyB0byBzZW5kIG92ZXIgdGhlIG5ldHdvcmsuIE5vdywgd2hhdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBoZXJlIGlzIHdoYXQgZGF0YSBpcyBhY3R1YWxseSBiZWluZyAqY29uc2lkZXJlZCogZm9yIHNlbmRpbmcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIExldCdzIGRlbHZlIGluIGFuZCBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBkYXRhIGl0c2VsZiwgYW5kIGhvdyBpdCBpcyBpbnNwZWN0ZWQsIGJ5IHRha2luZyBhIGxvb2sgYXQgaG93IGBpb19idWZmZXJzX3BlZWtgIGZhY3RvcnMgaW50byB0aGlzIHByb2Nlc3MuIFRoaXMgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBuZXh0IHN0ZXAg4oCTIHVuZGVyc3RhbmQgdGhlIGluc3BlY3Rpb24gcHJvY2VzcyBvZiB0aGUgSU8gYnVmZmVycy4gTGV0J3Mgc2VlIGhvdyBgaW9fYnVmZmVyc19wZWVrYCBjb21lcyBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODowNy4xNDc4Njc4MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODM2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2J1ZmZlcnNfcGVla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTM0ND1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM3OS1cXG5pb191cmluZy9rYnVmLmM6MzgwOmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuYy0zODEtXFx0XFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD03Mj1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03My1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcva2J1Zi5oOjc0OmludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03NS1cXHRcXHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTExMzg9c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTcxLVxcdFxcdFxcdGFyZy5tYXhfbGVuID0gbWluX25vdF96ZXJvKGFyZy5tYXhfbGVuLCBzci1cXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcXG5pb191cmluZy9uZXQuYzoxMTcyOlxcdFxcdHJldCA9IGlvX2J1ZmZlcnNfcGVlayhyZXEsIFxcdTAwMjZhcmcsIHNlbCk7XFxuaW9fdXJpbmcvbmV0LmMtMTE3My1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjA3LjI2MjcwOTI2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjUwMzkwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGlvX3VyaW5nIE5ldHdvcmsgU3RhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBkb3duIHRoaXMgYGlvX2J1ZmZlcnNfcGVla2AgZnVuY3Rpb24uIFRoZSBjb2RlIHRlbGxzIG1lIGl0J3MgY2FsbGVkIGJ5IGBpb19yZWN2X2J1Zl9zZWxlY3RgIHdpdGhpbiBgaW9fdXJpbmcvbmV0LmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIFRvIHJlYWxseSBnZXQgYSBncmFzcCBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciwgSSd2ZSBnb3QgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluICpvdXR3YXJkKiBmcm9tIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBXaGVyZSBlbHNlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyBpbnZva2VkPyBBbmQgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8gZG8gdGhlIHNhbWUgZm9yIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaG9zZSBhcmUgcHJvYmFibHkgdGhlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSBzdXNwZWN0IHRoYXQgdW5kZXJzdGFuZGluZyB0aGVpciBwYXJlbnQgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBuZXR3b3JraW5nIGlzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjExLjAyNzc1MTI5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NTMwNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjQ4LVxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbmlvX3VyaW5nL25ldC5jOjEyNDk6XFx0XFx0cmV0ID0gaW9fcmVjdl9idWZfc2VsZWN0KHJlcSwga21zZywgXFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTEyNTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjExLjI2NzI4OTczNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgxMjczNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgSS9PIEJ1ZmZlcmluZyoqXG5cbk9rYXksIHNvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBpb19yZWN2YC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2UncmUgaGFuZGxpbmcgcmVjZWl2ZSBidWZmZXJzIGluIHRoZSBpbnB1dCBwYXRoLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhhdCBwaWVjZS4gQnV0IEknbSBzdWRkZW5seSBjdXJpb3VzOiB3aGF0J3MgdGhlIGFuYWxvZ291cyBmdW5jdGlvbiBpbiB0aGUgc2VuZGluZyBwYXRoPyBJcyB0aGVyZSBhIGZ1bmN0aW9uIGNvbXBhcmFibGUgdG8gYGlvX3JlY3ZfYnVmX3NlbGVjdGAgZm9yIHNlbmQgYnVmZmVycz8gU29tZXRoaW5nIGxpa2UgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmA/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGEgcGFyYWxsZWwgZXhpc3RzIGFuZCwgaWYgc28sIHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUgZm9yIG91ciBvdmVyYWxsIGJ1ZmZlciBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdCBtaWdodCByZXZlYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHNlbmQgcGF0aCBhbmQgd2hhdCBpdCdzIGRvaW5nIGluIHRlcm1zIG9mIGJ1ZmZlciBzZWxlY3Rpb24gYW5kIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjE0LjY0ODU2NjA2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMDc1MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3NlbmRfc2VsZWN0X2J1ZmZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9NTYwPWludCBpb19zZW5kbXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02MDgtXFxuaW9fdXJpbmcvbmV0LmM6NjA5OnN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuaW9fdXJpbmcvbmV0LmMtNjEwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTY5MC1cXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuaW9fdXJpbmcvbmV0LmM6NjkxOlxcdFxcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcXHUwMDI2c2VsLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy02OTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MTQuODI4NjQ3NjA5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTcyMDkzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgSS9PIFJpbmcgQnVmZmVyIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgYGlvX3JlY3ZgIGFuZCBgaW9fc2VuZGAganVtcCBvdXQgYXQgbWUgYXMgdGhlIG9idmlvdXMgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gVGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlLCByaWdodD8gSXQncyB3aGVyZSB0aGUgZGF0YSBzdGFydHMgZmxvd2luZy4gRGVmaW5pdGVseSBoaWdoIHByaW9yaXR5LlxuXG5JIHNlZSBhIHBhdGNoIHRoYXQgbGltaXRzIGBhcmctXHUwMDNlbWF4X2xlbmAgdG8gYE1BWF9SV19DT1VOVGAgd2l0aGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEludGVyZXN0aW5nLiBUaGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbnN0cmFpbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhhdCBsaW1pdC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgaW9fcmVjdm1zZ2AgYW5kIGBpb19zZW5kbXNnYCBjYWxsIGVpdGhlciBgaW9fcmVjdl9idWZfc2VsZWN0YCBvciBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhvc2UgYXJlIHRoZSBuZXh0IGxldmVsIGRvd24gdGhlIHN0YWNrIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgYmVoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjE5LjMyNTg1OTkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDY4OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjQ4LVxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbmlvX3VyaW5nL25ldC5jOjEyNDk6XFx0XFx0cmV0ID0gaW9fcmVjdl9idWZfc2VsZWN0KHJlcSwga21zZywgXFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTEyNTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjE5LjUzMDkzMzY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzUxNTIzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW9fcmVjdm1zZ2AgSW1wbGVtZW50YXRpb24qKlxuXG5XYWl0IGEgc2Vjb25kLCBJIHRob3VnaHQgYGlvX3JlY3Ztc2dgIGhhZCBhIGRpcmVjdCBjYWxsIHRvIGBpb19yZWN2X2J1Zl9zZWxlY3RgPyBUaGF0IGRvZXNuJ3QgZmVlbCByaWdodC4gT2theSwgdGltZSB0byBkb3VibGUtY2hlY2suIExldCBtZSBwdWxsIHVwIGBpb191cmluZy9uZXQuY2AgYW5kIGRpZyBpbnRvIHRoZSBgaW9fcmVjdm1zZ2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgZXhhY3RseSBob3cgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIG1lc3NhZ2VzIGFuZCBidWZmZXIgc2VsZWN0aW9uLiBUaGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc3VidGxlIEknbSBtaXNzaW5nIGluIHRoZSBpbnRlcmFjdGlvbiB0aGVyZS4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBuZXR3b3JrIEkvTyBpcyByZWFsbHkgaGFwcGVuaW5nLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBwcm9jZXNzIGFsaWducyB3aXRoIHdoYXQncyBhY3R1YWxseSBjb2RlZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODoyNi4zMDYwODg2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5Njg4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMDUxPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTM3LVxcbmlvX3VyaW5nL25ldC5jOjExMzg6c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuaW9fdXJpbmcvbmV0LmMtMTEzOS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMTA9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNDgtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTI0OTpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTI1MC1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MjYuNDI1NzgyOTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDEzMjY5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgaW9fcmVjdm1zZ2AuLi4gdGhhdCdzIGp1c3QgYSBiaXQgb2YgYSByZWQgaGVycmluZy4gSXQncyBvYnZpb3VzbHkganVzdCB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBtZWFucyBpdCBzaG93ZWQgdXAgYXMgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBUaGF0J3Mgbm90IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBkaWcgaW50byB0aGUgY29yZSBJL08gZnVuY3Rpb25zLiBNeSBmb2N1cyBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdW5kZXJzdGFuZGluZyBgaW9fcmVjdmAgYW5kIGBpb19zZW5kYC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBsb3ctbGV2ZWwgY2FsbHMgbWlnaHQgaW50ZXJhY3QsIHdoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGxvb2tzIGxpa2UsIGFuZCBpZiB0aGVyZSdzIGFueSBvYnZpb3VzIHBsYWNlIHdoZXJlIGFuIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSBpcyBwcmVzZW50aW5nIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjI5LjM2NzExMjU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwMTA2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz05Mz1lbnVtIHNyX3JldHJ5X2ZsYWdzIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExMS1cXG5pb191cmluZy9uZXQuYzoxMTI6c3RydWN0IGlvX3JlY3Z6YyB7XFxuaW9fdXJpbmcvbmV0LmMtMTEzLVxcdHN0cnVjdCBmaWxlXFx0XFx0XFx0KmZpbGU7XFxuLS1cXG5pb191cmluZy9uZXQuYz02NTc9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTczMy1cXG5pb191cmluZy9uZXQuYzo3MzQ6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNzM1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc1Ny1cXG5pb191cmluZy9uZXQuYzo3NTg6c3RhdGljIGludCBpb19yZWN2bXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTc1OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYy03NzMtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjc3NDpcXHRyZXR1cm4gaW9fcmVjdm1zZ19tc2hvdF9wcmVwKHJlcSwgaW9tc2csIG1zZy5tc2dfbmFtZWxlbixcXG5pb191cmluZy9uZXQuYy03NzUtXFx0XFx0XFx0XFx0XFx0bXNnLm1zZ19jb250cm9sbGVuKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc3Ny1cXG5pb191cmluZy9uZXQuYzo3Nzg6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtNzc5LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTgwNS1cXG5pb191cmluZy9uZXQuYzo4MDY6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfY29weV9oZHIocmVxLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy04MDctfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtODExLVxcbmlvX3VyaW5nL25ldC5jOjgxMjppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtODEzLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg3MC1cXHRzci1cXHUwMDNlbnJfbXVsdGlzaG90X2xvb3BzID0gMDtcXG5pb191cmluZy9uZXQuYzo4NzE6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xcbmlvX3VyaW5nL25ldC5jLTg3Mi19XFxuLS1cXG5pb191cmluZy9uZXQuYy04NzgtLypcXG5pb191cmluZy9uZXQuYzo4Nzk6ICogRmluaXNoZXMgaW9fcmVjdiBhbmQgaW9fcmVjdm1zZy5cXG5pb191cmluZy9uZXQuYy04ODAtICpcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg4My0gKi9cXG5pb191cmluZy9uZXQuYzo4ODQ6c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTg4NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy05NjYtXFxuaW9fdXJpbmcvbmV0LmM6OTY3OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTk2OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1ZixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk5MS1cXG5pb191cmluZy9uZXQuYzo5OTI6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XFxuaW9fdXJpbmcvbmV0LmMtOTkzLVxcdHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCBtc2c7XFxuLS1cXG5pb191cmluZy9uZXQuYy05OTYtXFxuaW9fdXJpbmcvbmV0LmM6OTk3OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19tdWx0aXNob3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlvX3NyX21zZyAqaW8sXFxuaW9fdXJpbmcvbmV0LmMtOTk4LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDAyLVxcdGludCBjb3B5X2xlbjtcXG5pb191cmluZy9uZXQuYzoxMDAzOlxcdHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIgaGRyO1xcbmlvX3VyaW5nL25ldC5jLTEwMDQtXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDM5LVxcdC8qIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGdhcCBiZXR3ZWVuIGhkciBhbmQgc29ja2FkZHJfc3RvcmFnZSAqL1xcbmlvX3VyaW5nL25ldC5jOjEwNDA6XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XFxuaW9fdXJpbmcvbmV0LmMtMTA0MS1cXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwNTAtXFxuaW9fdXJpbmcvbmV0LmM6MTA1MTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTEwNTIte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTA4My1cXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xcbmlvX3VyaW5nL25ldC5jOjEwODQ6XFx0XFx0XFx0cmV0ID0gaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChrbXNnLCBzciwgXFx1MDAyNnNlbC5hZGRyLCBcXHUwMDI2bGVuKTtcXG5pb191cmluZy9uZXQuYy0xMDg1LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwOTYtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcXG5pb191cmluZy9uZXQuYzoxMDk3OlxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG5pb191cmluZy9uZXQuYy0xMDk4LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2hvdF9maW5pc2hlZCk7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTMxLVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTEzMjpcXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcXG5pb191cmluZy9uZXQuYy0xMTMzLVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjA5LVxcbmlvX3VyaW5nL25ldC5jOjEyMTA6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMjExLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNDgtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTI0OTpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTI1MC1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTEtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjkyOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbmlvX3VyaW5nL25ldC5jLTEyOTMtXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjk3LVxcbmlvX3VyaW5nL25ldC5jOjEyOTg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtMTI5OS17XFxuaW9fdXJpbmcvbmV0LmM6MTMwMDpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEzMDEtXFx0dW5zaWduZWQgaWZxX2lkeDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEzMjUtXFxuaW9fdXJpbmcvbmV0LmM6MTMyNjppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTMyNy17XFxuaW9fdXJpbmcvbmV0LmM6MTMyODpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEzMjktXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MjkuNTEzMTM0NTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODg0MDg1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgQ29yZSBJL08gRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYCwgYGlvX3NlbmRgLCBgaW9fc2VuZG1zZ2AsIGFuZCBgaW9fcmVjdnpjYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIEkvTyBvcGVyYXRpb25zIGhlcmUuIFRoZXNlIHNlZW0gbGlrZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBkYXRhIGZsb3cgYmVnaW5zLCB0aGUgcG9pbnRzIG9mIGNvbnRhY3QsIHNvIHRvIHNwZWFrLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGVhY2gsIGVzcGVjaWFsbHkgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBidWZmZXIgbWVjaGFuaXNtcy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLnNvbWV0aGluZydzIGJvdGhlcmluZyBtZSBhYm91dCBgaW9fcmVjdnpjYC4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IGl0J3MgZGlyZWN0bHkgY2FsbGluZyBgaW9fYnVmZmVyc19wZWVrYCBvciBgaW9fYnVmZmVyc19zZWxlY3RgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwidGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQsXCIgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCBtZSBtYWtlIHN1cmUuIEknbSBnb2luZyB0byB0YWtlIGEgZGVlcGVyIGRpdmUgc3BlY2lmaWNhbGx5IGludG8gdGhlIGBpb19yZWN2emNgIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGlzLiBHb3R0YSBjbGVhciB0aGF0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MzMuMzAxNTQ1NzY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTI3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVjdnpjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTkzPWVudW0gc3JfcmV0cnlfZmxhZ3Mge1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTExLVxcbmlvX3VyaW5nL25ldC5jOjExMjpzdHJ1Y3QgaW9fcmVjdnpjIHtcXG5pb191cmluZy9uZXQuYy0xMTMtXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqZmlsZTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMTA9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTctXFxuaW9fdXJpbmcvbmV0LmM6MTI5ODppbnQgaW9fcmVjdnpjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9uZXQuYy0xMjk5LXtcXG5pb191cmluZy9uZXQuYzoxMzAwOlxcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XFxuaW9fdXJpbmcvbmV0LmMtMTMwMS1cXHR1bnNpZ25lZCBpZnFfaWR4O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTMyNS1cXG5pb191cmluZy9uZXQuYzoxMzI2OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMzI3LXtcXG5pb191cmluZy9uZXQuYzoxMzI4OlxcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XFxuaW9fdXJpbmcvbmV0LmMtMTMyOS1cXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODozMy40MDk3MDUwNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMzUxMTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBpb19yZWN2emMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBpb19yZWN2emNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGUgZmxvdywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHplcm8tY29weSBhc3BlY3RzIGFuZCBob3cgZWZmaWNpZW50bHkgaXQncyBoYW5kbGluZyB0aGUgZGF0YSB0cmFuc2Zlci4gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgaXNzdWVzPyBMZXQncyB0cmFjZSB0aHJvdWdoIGl0IGFuZCBzcG90IGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci4gR290dGEga2VlcCBhbiBleWUgb3V0IGZvciBlZGdlIGNhc2VzLCB0b28gLSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgd2UncmUgYWN0dWFsbHkgKmRvaW5nKiB0aGUgemVyby1jb3B5IG1hZ2ljLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW5lZmZpY2llbmNpZXMgY3JlZXBpbmcgaW4gdGhhdCB3ZSBjYW4gZWxpbWluYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6MzYuNjMzMjE5NjE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzI2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMyNjpcXHRpbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuMTMyNzpcXHR7XFxuMTMyODpcXHRcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbjEzMjk6XFx0XFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4xMzMwOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuMTMzMTpcXHRcXHRpbnQgcmV0O1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRcXHRzb2NrID0gc29ja19mcm9tX2ZpbGUocmVxLVxcdTAwM2VmaWxlKTtcXG4xMzM0OlxcdFxcdGlmICh1bmxpa2VseSghc29jaykpXFxuMTMzNTpcXHRcXHRcXHRyZXR1cm4gLUVOT1RTT0NLO1xcbjEzMzY6XFx0XFxuMTMzNzpcXHRcXHRpZiAoIShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfUE9MTEVEKSBcXHUwMDI2XFx1MDAyNlxcbjEzMzg6XFx0XFx0ICAgICh6Yy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfUE9MTF9GSVJTVCkpXFxuMTMzOTpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4xMzQwOlxcdFxcbjEzNDE6XFx0XFx0bGVuID0gemMtXFx1MDAzZWxlbjtcXG4xMzQyOlxcdFxcdHJldCA9IGlvX3pjcnhfcmVjdihyZXEsIHpjLVxcdTAwM2VpZnEsIHNvY2ssIDAsIGlzc3VlX2ZsYWdzLCBcXHUwMDI2emMtXFx1MDAzZWxlbik7XFxuMTM0MzpcXHRcXHRpZiAobGVuIFxcdTAwMjZcXHUwMDI2IHpjLVxcdTAwM2VsZW4gPT0gMCkge1xcbjEzNDQ6XFx0XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcXG4xMzQ1OlxcdFxcbjEzNDY6XFx0XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4xMzQ3OlxcdFxcdH1cXG4xMzQ4OlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYz0gMCkgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcXG4xMzQ5OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKVxcbjEzNTA6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjEzNTE6XFx0XFx0XFx0aWYgKHJldCA9PSBJT1VfUkVRVUVVRSlcXG4xMzUyOlxcdFxcdFxcdFxcdHJldHVybiBJT1VfUkVRVUVVRTtcXG4xMzUzOlxcdFxcbjEzNTQ6XFx0XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuMTM1NTpcXHRcXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuMTM1NjpcXHRcXHRcXHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xcbjEzNTc6XFx0XFx0fVxcbjEzNTg6XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4xMzU5OlxcdH1cXG4xMzYwOlxcdFxcbjEzNjE6XFx0dm9pZCBpb19zZW5kX3pjX2NsZWFudXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuMTM2MjpcXHR7XFxuMTM2MzpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbjEzNjQ6XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW8gPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuMTM2NTpcXHRcXG4xMzY2OlxcdFxcdGlmIChyZXFfaGFzX2FzeW5jX2RhdGEocmVxKSlcXG4xMzY3OlxcdFxcdFxcdGlvX25ldG1zZ19pb3ZlY19mcmVlKGlvKTtcXG4xMzY4OlxcdFxcdGlmICh6Yy1cXHUwMDNlbm90aWYpIHtcXG4xMzY5OlxcdFxcdFxcdGlvX25vdGlmX2ZsdXNoKHpjLVxcdTAwM2Vub3RpZik7XFxuMTM3MDpcXHRcXHRcXHR6Yy1cXHUwMDNlbm90aWYgPSBOVUxMO1xcbjEzNzE6XFx0XFx0fVxcbjEzNzI6XFx0fVxcbjEzNzM6XFx0XFxuMTM3NDpcXHQjZGVmaW5lIElPX1pDX0ZMQUdTX0NPTU1PTiAoSU9SSU5HX1JFQ1ZTRU5EX1BPTExfRklSU1QgfCBJT1JJTkdfUkVDVlNFTkRfRklYRURfQlVGKVxcbjEzNzU6XFx0I2RlZmluZSBJT19aQ19GTEFHU19WQUxJRCAgKElPX1pDX0ZMQUdTX0NPTU1PTiB8IElPUklOR19TRU5EX1pDX1JFUE9SVF9VU0FHRSB8IFxcXFxcXG4xMzc2OlxcdFxcdFxcdFxcdFxcdElPUklOR19TRU5EX1ZFQ1RPUklaRUQpXFxuMTM3NzpcXHRcXG4xMzc4OlxcdGludCBpb19zZW5kX3pjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4xMzc5OlxcdHtcXG4xMzgwOlxcdFxcdHN0cnVjdCBpb19zcl9tc2cgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XFxuMTM4MTpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbjEzODI6XFx0XFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2c7XFxuMTM4MzpcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKm5vdGlmO1xcbjEzODQ6XFx0XFx0dTY0IHVzZXJfZGF0YTtcXG4xMzg1OlxcdFxcdGludCByZXQ7XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdHpjLVxcdTAwM2Vkb25lX2lvID0gMDtcXG4xMzg4OlxcdFxcbjEzODk6XFx0XFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShzcWUtXFx1MDAzZV9fcGFkMlswXSkpKVxcbjEzOTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5MTpcXHRcXHQvKiB3ZSBkb24ndCBzdXBwb3J0IElPU1FFX0NRRV9TS0lQX1NVQ0NFU1MganVzdCB5ZXQgKi9cXG4xMzkyOlxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQ1FFX1NLSVApXFxuMTM5MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzk0OlxcdFxcbjEzOTU6XFx0XFx0bm90aWYgPSB6Yy1cXHUwMDNlbm90aWYgPSBpb19hbGxvY19ub3RpZihjdHgpO1xcbjEzOTY6XFx0XFx0aWYgKCFub3RpZilcXG4xMzk3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEzOTg6XFx0XFx0dXNlcl9kYXRhID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlYWRkcjMpO1xcbjEzOTk6XFx0XFx0aWYgKCF1c2VyX2RhdGEpXFxuMTQwMDpcXHRcXHRcXHR1c2VyX2RhdGEgPSByZXEtXFx1MDAzZWNxZS51c2VyX2RhdGE7XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdG5vdGlmLVxcdTAwM2VjcWUudXNlcl9kYXRhID0gdXNlcl9kYXRhO1xcbjE0MDM6XFx0XFx0bm90aWYtXFx1MDAzZWNxZS5yZXMgPSAwO1xcbjE0MDQ6XFx0XFx0bm90aWYtXFx1MDAzZWNxZS5mbGFncyA9IElPUklOR19DUUVfRl9OT1RJRjtcXG4xNDA1OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfTkVFRF9DTEVBTlVQIHwgUkVRX0ZfUE9MTF9OT19MQVpZO1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHR6Yy1cXHUwMDNlZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2Vpb3ByaW8pO1xcbjE0MDg6XFx0XFx0aWYgKHVubGlrZWx5KHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JT19aQ19GTEFHU19DT01NT04pKSB7XFxuMTQwOTpcXHRcXHRcXHRpZiAoemMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfklPX1pDX0ZMQUdTX1ZBTElEKVxcbjE0MTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQxMTpcXHRcXHRcXHRpZiAoemMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFTkRfWkNfUkVQT1JUX1VTQUdFKSB7XFxuMTQxMjpcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fbm90aWZfZGF0YSAqbmQgPSBpb19ub3RpZl90b19kYXRhKG5vdGlmKTtcXG4xNDEzOlxcdFxcbjE0MTQ6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXpjX3JlcG9ydCA9IHRydWU7XFxuMTQxNTpcXHRcXHRcXHRcXHRuZC1cXHUwMDNlemNfdXNlZCA9IGZhbHNlO1xcbjE0MTY6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXpjX2NvcGllZCA9IGZhbHNlO1xcbjE0MTc6XFx0XFx0XFx0fVxcbjE0MTg6XFx0XFx0fVxcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHR6Yy1cXHUwMDNlbGVuID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlbGVuKTtcXG4xNDIxOlxcdFxcdHpjLVxcdTAwM2Vtc2dfZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2Vtc2dfZmxhZ3MpIHwgTVNHX05PU0lHTkFMIHwgTVNHX1pFUk9DT1BZO1xcbjE0MjI6XFx0XFx0cmVxLVxcdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VidWZfaW5kZXgpO1xcbjE0MjM6XFx0XFx0aWYgKHpjLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpXFxuMTQyNDpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX05PV0FJVDtcXG4xNDI1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODozNi42MzM0MDk3NDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1Mjk1MDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSS9PIE9wZXJhdGlvbnMgaW4gUmVsYXRpb24gdG8gaW9fdXJpbmcqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGBpb19yZWN2emNgIGlzIG5vdCB1dGlsaXppbmcgYGlvX2J1ZmZlcnNfcGVla2Agb3IgYGlvX2J1ZmZlcnNfc2VsZWN0YC4gVGhhdCBtZWFucyB0aGUgaW50ZXJlc3RpbmcgYXJlYXMgZm9yIGludmVzdGlnYXRpb24gYXJlIHJlYWxseSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19zZW5kYCwgYW5kIGBpb19zZW5kbXNnYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgd2hlbiB3b3JraW5nIHdpdGggYGlvX3VyaW5nYC4gYENPTkZJR19JT19VUklOR2AgaXMsIG9mIGNvdXJzZSwgYSBnaXZlbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUgLSB0aGF0IHNob3VsZCBob2xkIHRoZSBhbnN3ZXJzIHJlZ2FyZGluZyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjQwLjE4NjM2NDE2MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjgxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjQwLjMzNzA1MTM4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMxOTQyNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBpb191cmluZyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBpb191cmluZ2AgaXMgZW5hYmxlZCBieSB0aGUgYENPTkZJR19JT19VUklOR2Agb3B0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byBxdWlja2x5IHBpbnBvaW50IHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBkZWZpbmVkLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBJJ2xsIHN0YXJ0IHdpdGggZWl0aGVyIGBpbml0L0tjb25maWdgIOKAkyB0aGF0J3MgYSBjbGFzc2ljIHBsYWNlIGZvciBmdW5kYW1lbnRhbCBvcHRpb25zIOKAkyBvciBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCBgaW9fdXJpbmcvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBpdCB3b3VsZCBsaWtlbHkgcmVzaWRlIGlmIGl0J3MgcmVsYXRlZCB0byB0aGUgc3Vic3lzdGVtIGl0c2VsZi4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgaXRzIGRlZmluaXRpb24sIGFuZCBob3BlZnVsbHkgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODo0NC41Njg5OTc5NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODMzNzE0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxODo0OC44NTIzNzk4NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzc5Nzg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQ2hlY2tpbmcgYGlvX3VyaW5nL2tidWYuY2AgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgQ09ORklHX0lPX1VSSU5HYCBpcyBwcmFjdGljYWxseSBhc3N1bWVkIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaXMgcGF0Y2ggbGFuZGVkIGluIGBpb191cmluZy9rYnVmLmNgLCBzbyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIHNldHRpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBidWlsZCBzeXN0ZW0uIEknbGwgbmVlZCB0byBqdW1wIGludG8gYGlvX3VyaW5nL01ha2VmaWxlYCBhbmQgcXVpY2tseSBsb29rIGZvciBhbnl0aGluZyB0aGF0IHRhcmdldHMgdGhhdCBzcGVjaWZpYyBmaWxlLiBJdCBjb3VsZCBiZSBhbiBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gY2hlY2ssIG9yIG1heWJlIGEgbW9yZSBzdWJ0bGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgYGlvX3VyaW5nYCBmZWF0dXJlcy4gVGhlIE1ha2VmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdGhlcmUgaW5mbHVlbmNpbmcgaG93IGBrYnVmLmNgIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTg6NTMuMDY2MTgwMTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTcxNjkxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYnVmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL01ha2VmaWxlPTc9ZW5kaWZcXG5pb191cmluZy9NYWtlZmlsZS04LVxcbmlvX3VyaW5nL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbmlvX3VyaW5nL01ha2VmaWxlLTEwLVxcdFxcdFxcdFxcdFxcdHRjdHgubyBmaWxldGFibGUubyBydy5vIHBvbGwubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE4OjUzLjY0MTkwNTYwM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTk5ODc4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVmZmVyIFBlZWsgTGVuZ3RoIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGFsYmVpdCBpbXBvcnRhbnQsIGNoYW5nZSBmb3IgYGlvX3VyaW5nYC4gSXQgc2VlbXMgdGhpcyBjb2RlIHBhdGggaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19JT19VUklOR2AgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUgZW5vdWdoOiB3ZSdyZSBpbnRyb2R1Y2luZyBhIG1heGltdW0gYnVmZmVyIGxlbmd0aCBjaGVjayB3aXRoaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYC4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBtYWtpbmcgc3VyZSBgYXJnLVx1MDAzZW1heF9sZW5gIGlzbid0IGV4Y2VlZGluZyBgTUFYX1JXX0NPVU5UYCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSBwZWVrIG9wZXJhdGlvbi4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBleGNlc3NpdmVseSBsYXJnZSByZWFkcyBvciB3cml0ZXMsIGd1YXJkaW5nIGFnYWluc3QgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIHVuYm91bmRlZCBJTy4gVGhpcyBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgY29uc2lkZXJpbmcgdGhlIGxvdy1sZXZlbCBuYXR1cmUgb2YgYGlvX3VyaW5nYC5cblxuVGhlIGNvcmUgbG9naWMgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHdlJ3JlIHVzaW5nIGBtaW5fdGAgdG8gY2xhbXAgYGFyZy1cdTAwM2VtYXhfbGVuYCB0byBgTUFYX1JXX0NPVU5UYC4gQWxzbyB3b3J0aCBub3RpbmcgdGhhdCBpZiBgYXJnLVx1MDAzZW1heF9sZW5gIGlzbid0IHNldCwgdGhlbiB3ZSdyZSBub3cgc2V0dGluZyBpdCB0byBgTUFYX1JXX0NPVU5UYC4gUHJldmlvdXNseSBpdCB3YXMgc2V0IHRvIGBJTlRfTUFYYC5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIG5vdyBzaGlmdHMgdG8gdGhlIGNhbGxlcnMgb2YgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgc3BlY2lmaWNhbGx5IGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fc2VuZGAsIGFuZCBgaW9fc2VuZG1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGxlbmd0aCBjb25zdHJhaW50IGludGVyYWN0cyB3aXRoIHRoZSBoaWdoZXItbGV2ZWwgbG9naWMgaW4gdGhvc2UgZnVuY3Rpb25zLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIG1heGltdW0gYnVmZmVyIGxlbmd0aD8gRG9lcyB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZSBhbnkgYWRqdXN0bWVudHMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGV2ZW4gaWYgaXQgc2VlbXMgc2FmZSBhdCBmaXJzdCBnbGFuY2U/XG5cbkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2guIEkgc2hvdWxkIGlkZW50aWZ5IGFueSBvdGhlciBjYWxsZXJzIG9mIGBpb19idWZmZXJzX3NlbGVjdGAgb3IgYGlvX2J1ZmZlcnNfcGVla2Agd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgYmVlbiBvdmVybG9va2VkLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byBhbmFseXplIHRoZSBjb21wbGV0ZSBjYWxsIGdyYXBoIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MDMuNjQxNzg3OTE4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3ODI4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yNTM9c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzQzLVxcbmlvX3VyaW5nL2tidWYuYzozNDQ6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMzQ1LVxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTcwPXN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTcxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaDo3MjppbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuaC03My1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy9uZXQuYz02MDk9c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTYzMS1cXG5pb191cmluZy9uZXQuYzo2MzI6XFx0cmV0ID0gaW9fYnVmZmVyc19zZWxlY3QocmVxLCBcXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuYy02MzMtXFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTowMy44MzY1NzY5ODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwOTAzNjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fYnVmZmVyc19zZWxlY3RgKipcblxuQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBoZXJlLiBUaGUgaW1wbGljYXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgKm9ubHkqIGNhbGwgcGF0aCB0aGF0IGxlYWRzIHRvIGBpb19idWZmZXJzX3NlbGVjdGAgZ29lcyB0aHJvdWdoIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGlzIGlzIGEgY3J1Y2lhbCBvYnNlcnZhdGlvbi4gSXQgaW1tZWRpYXRlbHkgbmFycm93cyBteSBmb2N1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMgaW50aW1hdGVseS5cblxuV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbj8gSXMgYGlvX2J1ZmZlcnNfc2VsZWN0YCBjb25zaWRlcmVkIGEgcHJpdmF0ZSBoZWxwZXIgb2YgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAsIG9yIGlzIGl0IHBvdGVudGlhbGx5IG1vcmUgb2YgYSBzaGFyZWQgcmVzb3VyY2UsIGJ1dCBqdXN0ICp1c2VkKiBleGNsdXNpdmVseSBieSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBJZiBpdCdzIHRoZSBsYXR0ZXIsIGNvdWxkIHRoZXJlIGJlIGltcGxpY2F0aW9ucyBmb3IgZnV0dXJlIGNvZGUgbW9kaWZpY2F0aW9ucz8gVGhlIHRpZ2h0IGNvdXBsaW5nIHNob3VsZCBicmluZyB1cCBhIGZldyBjb25zaWRlcmF0aW9ucy5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFByb3BhZ2F0aW9uOioqIEhvdyBkb2VzIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGhhbmRsZSBlcnJvcnMgcmV0dXJuZWQgZnJvbSBgaW9fYnVmZmVyc19zZWxlY3RgPyBJcyB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcsIG9yIGlzIGl0IGFzc3VtZWQgdGhhdCBgaW9fYnVmZmVyc19zZWxlY3RgICphbHdheXMqIHN1Y2NlZWRzIHdoZW4gY2FsbGVkIGZyb20gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmA/XG4qICAgKipQZXJmb3JtYW5jZSBDb25zaWRlcmF0aW9uczoqKiBXaGF0J3MgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YD8gSXMgaXQgb3B0aW1pemVkLCBvciBpcyB0aGlzIHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBjb3VsZCBleGlzdD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZnJlcXVlbnQsIGhpZ2gtdm9sdW1lIGNhbGxzPyBBbnkgcmVzb3VyY2UgY29udGVudGlvbiBjb25zaWRlcmF0aW9ucyBoZXJlP1xuKiAgICoqVGVzdGluZyBhbmQgRGVidWdnaW5nOioqIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIGVudHJ5IHBvaW50IGZvciBkZWJ1Z2dpbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YC4gSWYgdGhlcmUncyBhbiBpc3N1ZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgSSBjYW4gZGlyZWN0bHkgZm9jdXMgb24gc2NlbmFyaW9zIGluaXRpYXRlZCB0aHJvdWdoIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBUaGUgY29udHJvbCBmbG93IGlzIHN0cmFpZ2h0Zm9yd2FyZC5cbiogICAqKlBvdGVudGlhbCBmb3IgUmVmYWN0b3Jpbmc6KiogQ291bGQgdGhpcyBkZXNpZ24gY3JlYXRlIGEgcG90ZW50aWFsIHBvaW50IG9mIGZyYWdpbGl0eT8gU2hvdWxkIGBpb19idWZmZXJzX3NlbGVjdGAgYmUgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBmdXR1cmU/IFdoYXQgd291bGQgdGhhdCBlbnRhaWwgZnJvbSBhIHRlc3RpbmcvdmFsaWRhdGlvbiBwZXJzcGVjdGl2ZT9cblxuSW4gc3VtbWFyeSwgdGhpcyBpcyBhIGNsZWFuLCBjb250YWluZWQgcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgcmVhbGx5IGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiAqaG93KiB0aGVzZSB0d28gYXJlIGxpbmtlZCB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvbiBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIG1haW50YWluYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTowOC4yNDU2MTgzNDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjk4OTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19idWZmZXJzX3BlZWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0zNDQ9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zNzktXFxuaW9fdXJpbmcva2J1Zi5jOjM4MDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMzgxLVxcdFxcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9NzI9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmgtNzMtXFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaDo3NDppbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmgtNzUtXFx0XFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE3MS1cXHRcXHRcXHRhcmcubWF4X2xlbiA9IG1pbl9ub3RfemVybyhhcmcubWF4X2xlbiwgc3ItXFx1MDAzZW1zaG90X3RvdGFsX2xlbik7XFxuaW9fdXJpbmcvbmV0LmM6MTE3MjpcXHRcXHRyZXQgPSBpb19idWZmZXJzX3BlZWsocmVxLCBcXHUwMDI2YXJnLCBzZWwpO1xcbmlvX3VyaW5nL25ldC5jLTExNzMtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTowOC4zOTg2MTM4NDdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODIzOTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGlnZ2luZyBpbnRvIEJ1ZmZlciBJbnRlcmFjdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGJ1ZmZlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhZ2Fpbi4gSSdtIHNlZWluZyB0aGF0IG9ubHkgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgc2VlbXMgdG8gZGlyZWN0bHkgY2FsbCBgaW9fYnVmZmVyc19wZWVrYC4gQnV0IHRoYXQncyBqdXN0IHRoZSBwbHVyYWwgdmVyc2lvbiAoYGlvX2J1ZmZlcnNgKS5cblxuSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIFdoYXQgYWJvdXQgYGlvX2J1ZmZlcl9zZWxlY3RgIHdpdGggYSAqc2luZ3VsYXIqIGBidWZmZXJgPyBJcyB0aGF0IHJlbGF0ZWQgdG8gdGhpcyBwZWVrIGZ1bmN0aW9uIGluIHNvbWUgd2F5PyBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBjb25uZWN0aW9uIGhlcmUuIExldCdzIHNlZSBpZiB0aGUgc2luZ3VsYXIgYGlvX2J1ZmZlcl9zZWxlY3RgIGFjdHVhbGx5IGNhbGxzIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIEl0J3MgcG9zc2libGUgaXQgaXMgaGFuZGxpbmcgaW5kaXZpZHVhbCBidWZmZXJzLCBwZXJoYXBzIGNoZWNraW5nIHRoZW0gYWdhaW5zdCB0aGUgcmluZyBidWZmZXJzIHNvbWVob3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOToxMS44MTY4NTY0NjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY4MTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19idWZmZXJfc2VsZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9MTkyPXN0YXRpYyBzdHJ1Y3QgaW9fYnJfc2VsIGlvX3JpbmdfYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMjI5LVxcbmlvX3VyaW5nL2tidWYuYzoyMzA6c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG5pb191cmluZy9rYnVmLmMtMjMxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9NjA9c3RydWN0IGJ1Zl9zZWxfYXJnIHtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaC02OS1cXG5pb191cmluZy9rYnVmLmg6NzA6c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG5pb191cmluZy9rYnVmLmgtNzEtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBidWZfZ3JvdXAsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMDUxPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDc4LVxcbmlvX3VyaW5nL25ldC5jOjEwNzk6XFx0XFx0c2VsID0gaW9fYnVmZmVyX3NlbGVjdChyZXEsIFxcdTAwMjZsZW4sIHNyLVxcdTAwM2VidWZfZ3JvdXAsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9uZXQuYy0xMDgwLVxcdFxcdGlmICghc2VsLmFkZHIpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM4PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE5NC1cXG5pb191cmluZy9uZXQuYzoxMTk1OlxcdFxcdCpzZWwgPSBpb19idWZmZXJfc2VsZWN0KHJlcSwgXFx1MDAyNmxlbiwgc3ItXFx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTExOTYtXFx0XFx0aWYgKCFzZWwtXFx1MDAzZWFkZHIpXFxuLS1cXG5pb191cmluZy9ydy5jPTExMD1zdGF0aWMgaW50IF9faW9faW1wb3J0X3J3X2J1ZmZlcihpbnQgZGRpciwgc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9ydy5jLTEyMi1cXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuaW9fdXJpbmcvcncuYzoxMjM6XFx0XFx0KnNlbCA9IGlvX2J1ZmZlcl9zZWxlY3QocmVxLCBcXHUwMDI2c3FlX2xlbiwgaW8tXFx1MDAzZWJ1Zl9ncm91cCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL3J3LmMtMTI0LVxcdFxcdGlmICghc2VsLVxcdTAwM2VhZGRyKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MzYzPXN0cnVjdCBpb19icl9zZWwgaW9fdXJpbmdfY21kX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzc0LVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjM3NTpcXHRyZXR1cm4gaW9fYnVmZmVyX3NlbGVjdChyZXEsIGxlbiwgYnVmX2dyb3VwLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MTEuOTg1NTQ2NjMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzQ1OTIyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBjb2RlLCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWNpcGhlcmluZyB0aGUgQnVmZmVyIFNlbGVjdGlvbiBhbmQgUGVlayBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyB1bnRhbmdsZSB0aGlzLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgc3lzdGVtIHNlbGVjdHMgYW5kIFwicGVla3NcIiBpbnRvIEkvTyBidWZmZXJzLiBJbml0aWFsbHksIEkgdGhvdWdodCBgaW9fYnVmZmVyX3NlbGVjdGAg4oCTIG5vdGljZSB0aGUgc2luZ3VsYXIgXCJidWZmZXJcIiDigJMgd2FzIGRpcmVjdGx5IHRpZWQgdG8gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCDigJMgdGhlIHBsdXJhbC4gQnV0IGhhbmcgb24sIGl0J3MgYWN0dWFsbHkgY2FsbGluZyB0aGUgc2luZ3VsYXIgYGlvX3JpbmdfYnVmZmVyX3NlbGVjdGAgZnVuY3Rpb24gaW5zdGVhZC5cblxuVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlcyB0byBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBhbmQgdGhlc2UgYXJlIHRoZSAqcGx1cmFsKi4gU28sIHdlIGhhdmUgYW4gaW5pdGlhbCBkaXNjb25uZWN0IGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9uIG5hbWVzLlxuXG5Ob3csIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgdGhhdCB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGFyZSBhY3R1YWxseSBgaW9fYnVmZmVyc19zZWxlY3RgIChwbHVyYWwpIGFuZCBgaW9fYnVmZmVyc19wZWVrYCAocGx1cmFsKS4gVGhlc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHRoZSBzZW5kL3JlY2VpdmUgcm91dGluZXM6IGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gV2hpY2ggSSByZWNvZ25pemUgYXMgaW50ZXJuYWwgaGVscGVycyB0aGF0IGFyZSBpbiB0dXJuIHVzZWQgYnkgb3VyIGZhbWlsaWFyIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgIHJvdXRpbmVzLlxuXG5Ib2xkIG9uIGEgc2VjLi4uIEkgbmVlZCB0byBiZSBzdXJlIEkgZ290IHRoaXMgcmlnaHQuIEkgdGhpbmsgSSByZW1lbWJlciB0aGF0IGBpb19yZWN2bXNnYCAqYWxzbyogY2FsbHMgYGlvX3JlY3ZfYnVmX3NlbGVjdGA/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBpb19yZWN2bXNnYCBpbXBsZW1lbnRhdGlvbi4uLiBqdXN0IHRvIGJlIGNlcnRhaW4uIEl0J3MgaW1wb3J0YW50IHRvIGhhdmUgdGhhdCBlbnRpcmUgY2FsbCBjaGFpbiBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOToxNi4yNjAxNDE3MDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQxNDM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWN2X2J1Zl9zZWxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTA1MT1pbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEzNy1cXG5pb191cmluZy9uZXQuYzoxMTM4OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMzktXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYz0xMjEwPWludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjQ4LVxcdFxcdHNlbC52YWwgPSBzci1cXHUwMDNlbGVuO1xcbmlvX3VyaW5nL25ldC5jOjEyNDk6XFx0XFx0cmV0ID0gaW9fcmVjdl9idWZfc2VsZWN0KHJlcSwga21zZywgXFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5jLTEyNTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE5OjE2LjUwMDU2MjE0OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODk5NTQzMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGlvX3JlY3Ztc2dgIGFuZCBgaW9fc2VuZG1zZ2AgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBJL08gcm91dGluZXMgd2UncmUgd29ya2luZyB3aXRoLCBzcGVjaWZpY2FsbHkgYGlvX3JlY3Ztc2dgLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiBpdCB1c2VkIGBpb19yZWN2X2J1Zl9zZWxlY3RgLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgY29ycmVjdGlvbiBoZXJlIC0gaXQgYWN0dWFsbHkgY2FsbHMgYGlvX2J1ZmZlcl9zZWxlY3RgLiBUaGF0J3MgaW1wb3J0YW50OyB0aGUgZGlmZmVyZW5jZSBpbiB3aGljaCBidWZmZXIgc2VsZWN0aW9uIG1lY2hhbmlzbSBpcyB1c2VkIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIHRoZSBmbG93IG9mIGRhdGEgYW5kIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuXG5cbk5vdywgdGhhdCBicmluZ3MgdXAgYSBnb29kIHBvaW50LiBJZiBgaW9fcmVjdm1zZ2AgYmVoYXZlcyB0aGlzIHdheSwgd2hhdCBpcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8gc2VuZCBhIG1lc3NhZ2U/IFRoZSBvYnZpb3VzIG5leHQgc3RlcCBmb3IgdGhpcyBhbmFseXNpcyBpcyB0byBjaGVjayBob3cgYGlvX3NlbmRtc2dgIGZ1bmN0aW9ucy4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBzYW1lIHBhdHRlcm4gaG9sZHM7IGlmIGl0IGNhbGxzIGBpb19idWZmZXJfc2VsZWN0YCwgb3Igc29tZSBvdGhlciBzZWxlY3Rpb24gbWV0aG9kLiBEZXRlcm1pbmluZyB0aGUgY29ycmVjdCBmdW5jdGlvbiBjYWxsIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgSS9PIHNjaGVtZSB0aGF0J3MgdXNlZC4gVGhpcyBoYXMgdG8gYmUgdW5kZXJzdG9vZCBiZWZvcmUgSSBjYW4gbWFrZSBhIGp1ZGdlbWVudCBvbiBob3cgdGhlIHN5c3RlbSdzIG1lbW9yeSBvciBwZXJmb3JtYW5jZSBhcmUgYmVpbmcgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MjQuNDAwMTA5NjE1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ2OTI0NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTU2MD1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjA4LVxcbmlvX3VyaW5nL25ldC5jOjYwOTpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbmlvX3VyaW5nL25ldC5jLTYxMC1cXHRcXHRcXHRcXHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjU3PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02OTAtXFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xcbmlvX3VyaW5nL25ldC5jOjY5MTpcXHRcXHRyZXQgPSBpb19zZW5kX3NlbGVjdF9idWZmZXIocmVxLCBpc3N1ZV9mbGFncywgXFx1MDAyNnNlbCwga21zZyk7XFxuaW9fdXJpbmcvbmV0LmMtNjkyLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE5OjI0LjYzNDgwNzUyOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQzMTgxMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGlvX3NlbmRtc2dgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCBgaW9fc2VuZG1zZ2AgaXNuJ3QgY2FsbGluZyBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzLiBUaGlzIG5hcnJvd3MgZG93biB0aGUgcG90ZW50aWFsIGlzc3VlcyDigJMgYW55IHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhpcyBub24tY2FsbCB3b3VsZCBsaWtlbHkgcmVzaWRlIHdpdGhpbiB0aGUgbG9naWMgb2YgYGlvX3NlbmRgIGFuZCBgaW9fcmVjdmAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMsIHRoZW4uXG5cblRvIGNvbmZpcm0gdGhpcyBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNvbm5lY3Rpb25zIEknbSBtaXNzaW5nLCBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgYXVkaXQgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGZvciBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCBhZ2Fpbi4gVGhleSBzaG91bGQgYmUgdGhlIG9uZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aG9zZSBidWZmZXJzLCBhbmQgYSBkZWVwZXIgZGl2ZSBtaWdodCBpbGx1bWluYXRlIGFueSBzaWRlIGVmZmVjdHMgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGJyb2FkZXIgYmVoYXZpb3VyIG9mIGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA4OjE5OjI3Ljg3Nzk5MTcxMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzUzMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9MjUzPXN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM0My1cXG5pb191cmluZy9rYnVmLmM6MzQ0OmludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5jLTM0NS1cXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD03MD1zdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbmlvX3VyaW5nL2tidWYuaC03MS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9rYnVmLmg6NzI6aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmgtNzMtXFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjA5PXN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuLS1cXG5pb191cmluZy9uZXQuYy02MzEtXFxuaW9fdXJpbmcvbmV0LmM6NjMyOlxcdHJldCA9IGlvX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXFx1MDAyNmFyZywgc2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtNjMzLVxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MjguMDQ5NzQ5Njg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDI3MTUzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBEZWR1Y3RpdmUgUmVhc29uaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4gVGhlIGtleSBvYnNlcnZhdGlvbiBoZXJlIGlzIHRoZSBleHBsaWNpdCBtZW50aW9uIG9mIHRoZSBmdW5jdGlvbiBgaW9fYnVmZmVyc19zZWxlY3RgLiBNeSB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIHpvb20gaW4gb24gaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhlIHRleHQgY2xlYXJseSBzdGF0ZXMgdGhhdCBvbmx5IHRoZSBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCBmdW5jdGlvbiBhY3R1YWxseSBtYWtlcyBhIGNhbGwgdG8gYGlvX2J1ZmZlcnNfc2VsZWN0YC4gVGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBJIHNob3VsZCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIGJ5IGV4YW1pbmluZyB0aGUgY2FsbCBjaGFpbiBvZiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCB0byB1bmRlcnN0YW5kIHdoYXQgaW5wdXRzIGl0IHVzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTgyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MzEuMTUyNDY3ODg1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgwNjAxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fYnVmZmVyc19wZWVrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9MzQ0PWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzc5LVxcbmlvX3VyaW5nL2tidWYuYzozODA6aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5jLTM4MS1cXHRcXHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oPTcyPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5oLTczLVxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9rYnVmLmg6NzQ6aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuaW9fdXJpbmcva2J1Zi5oLTc1LVxcdFxcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpO1xcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTEzOD1zdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExNzEtXFx0XFx0XFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oYXJnLm1heF9sZW4sIHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xcbmlvX3VyaW5nL25ldC5jOjExNzI6XFx0XFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXFx1MDAyNmFyZywgc2VsKTtcXG5pb191cmluZy9uZXQuYy0xMTczLVxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDg6MTk6MzEuMzEwNTMzNjExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MTQyNDU2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIGBpb191cmluZ2AgcGF0Y2guIEZyb20gbXkgYW5hbHlzaXMsIGl0IGxvb2tzIGxpa2Ugb25seSBgaW9fcmVjdl9idWZfc2VsZWN0YCBpcyBjYWxsaW5nIGBpb19idWZmZXJzX3BlZWtgLCB3aGljaCBtYWtlcyB0aGluZ3MgZWFzaWVyIHRvIHRyYWNrLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIGFyZSBpbmRlZWQ6IGBpb19zZW5kYCwgYGlvX3JlY3ZgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AuXG5cbkkndmUgYWxzbyB2ZXJpZmllZCB0aGF0IGJvdGggYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AgYXJlIG5vdCBzdGF0aWMsIHRoZXkgYXJlIGV4cG9ydGVkIGZyb20gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGRlY2xhcmVkIGluIGBpb191cmluZy9rYnVmLmhgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIHRoZXkgYXJlIGFjY2Vzc2libGUgYW5kIGFyZSB2YWxpZCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkgYW5kIGZ1enppbmcuXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgY2hlY2tlZCwgYW5kIGBDT05GSUdfSU9fVVJJTkdgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dC5cblxuVG8gc3VtbWFyaXplIG15IGZpbmRpbmdzIHN1Y2NpbmN0bHksIGFuZCB0byBnaXZlIHNvbWUgc3RydWN0dXJlZCBkZXRhaWxzIGZvciB0aGUgZnV6emVyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIGJlY2F1c2UgdGhpcyBpcyBhIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb24gY2hhbmdlXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGlvX3NlbmRgLCBgaW9fcmVjdmAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgIC0gdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdCB0aGUgY2hhbmdlc1xuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSU9fVVJJTkdgIC0gdGhhdCBpcyB0aGUgYmFzZSBjb25maWcgcmVxdWlyZW1lbnRcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGxpbWl0aW5nIHRoZSBtYXhpbXVtIGJ1ZmZlciBsZW5ndGggZmV0Y2hlZCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBpbiBpb191cmluZyB0byBgTUFYX1JXX0NPVU5UYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGBpb191cmluZ2AgbG9naWMsIHByaW1hcmlseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHdoZXJlIHJpbmcgYnVmZmVycyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHRlc3QgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODA1LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwODoxOTozOC4yMjQ3ODMzMjdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1OTExMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fc2VuZFwiLFxuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IgZXhjZXNzaXZlbHkgbGFyZ2UgSU8gb3BlcmF0aW9uIGJ5IGNhcHBpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYnVmZmVyIHBlZWtlZCBmcm9tIGEgcmluZyBidWZmZXIgaW4gaW9fdXJpbmcgdG8gTUFYX1JXX0NPVU5ULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIHRoYXQgdXNlIHByb3ZpZGVkIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3NlbmRcIixcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIGV4Y2Vzc2l2ZWx5IGxhcmdlIElPIG9wZXJhdGlvbiBieSBjYXBwaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGJ1ZmZlciBwZWVrZWQgZnJvbSBhIHJpbmcgYnVmZmVyIGluIGlvX3VyaW5nIHRvIE1BWF9SV19DT1VOVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvX3VyaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyB0aGF0IHVzZSBwcm92aWRlZCByaW5nIGJ1ZmZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[1] Phase: Succeeded StartedAt: 2026-07-27 08:19:50 +0000 UTC FinishedAt: 2026-07-27 08:19:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 08:19:51 +0000 UTC FinishedAt: 2026-07-27 08:19:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2] Phase: Succeeded StartedAt: 2026-07-27 08:19:51 +0000 UTC FinishedAt: 2026-07-27 13:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 08:19:51 +0000 UTC FinishedAt: 2026-07-27 13:02:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","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-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 08:19:51 +0000 UTC FinishedAt: 2026-07-27 08:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 08:19:51 +0000 UTC FinishedAt: 2026-07-27 08:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-workflowht4mg/series-workflowht4mg-convert-artifact-4288226842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 08:20:17 +0000 UTC FinishedAt: 2026-07-27 08:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 08:20:17 +0000 UTC FinishedAt: 2026-07-27 08:59:02 +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:*02653283-a08c-41c0-b238-28ea223d103e,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-workflowht4mg/series-workflowht4mg-convert-artifact-4288226842/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": "430f724d-2881-41d3-b100-63c626143ee3", "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-workflowht4mg/series-workflowht4mg-build-action-3027793608/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 08:20:17 +0000 UTC FinishedAt: 2026-07-27 08:58:52 +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:*02653283-a08c-41c0-b238-28ea223d103e,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-workflowht4mg/series-workflowht4mg-convert-artifact-4288226842/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": "430f724d-2881-41d3-b100-63c626143ee3", "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-workflowht4mg/series-workflowht4mg-build-action-3027793608/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 08:59:02 +0000 UTC FinishedAt: 2026-07-27 08:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 08:59:02 +0000 UTC FinishedAt: 2026-07-27 08:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 08:59:02 +0000 UTC FinishedAt: 2026-07-27 08:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 08:59:02 +0000 UTC FinishedAt: 2026-07-27 08:59:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","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-workflowht4mg/series-workflowht4mg-convert-artifact-3158042229/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 08:59:12 +0000 UTC FinishedAt: 2026-07-27 09:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 08:59:12 +0000 UTC FinishedAt: 2026-07-27 09:00:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*430f724d-2881-41d3-b100-63c626143ee3,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-workflowht4mg/series-workflowht4mg-build-action-3027793608/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-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 09:01:02 +0000 UTC FinishedAt: 2026-07-27 09:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 09:01:02 +0000 UTC FinishedAt: 2026-07-27 09:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 09:01:02 +0000 UTC FinishedAt: 2026-07-27 09:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 09:01:02 +0000 UTC FinishedAt: 2026-07-27 09:58:29 +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:*02653283-a08c-41c0-b238-28ea223d103e,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-workflowht4mg/series-workflowht4mg-convert-artifact-3158042229/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": "78bb4ef2-af33-41d5-b623-de640b03e8ab", "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-workflowht4mg/series-workflowht4mg-build-action-1359800449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 09:01:02 +0000 UTC FinishedAt: 2026-07-27 09:58:19 +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:*02653283-a08c-41c0-b238-28ea223d103e,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-workflowht4mg/series-workflowht4mg-convert-artifact-3158042229/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": "78bb4ef2-af33-41d5-b623-de640b03e8ab", "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-workflowht4mg/series-workflowht4mg-build-action-1359800449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 09:58:29 +0000 UTC FinishedAt: 2026-07-27 09:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 09:58:29 +0000 UTC FinishedAt: 2026-07-27 09:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 09:58:29 +0000 UTC FinishedAt: 2026-07-27 10:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 09:58:29 +0000 UTC FinishedAt: 2026-07-27 10:00:02 +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:*78bb4ef2-af33-41d5-b623-de640b03e8ab,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-workflowht4mg/series-workflowht4mg-build-action-1359800449/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-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 10:00:12 +0000 UTC FinishedAt: 2026-07-27 13:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 10:00:12 +0000 UTC FinishedAt: 2026-07-27 13:02:39 +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_send","io_recv","io_buffers_select","io_buffers_peek"],"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:*430f724d-2881-41d3-b100-63c626143ee3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*78bb4ef2-af33-41d5-b623-de640b03e8ab,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-workflowht4mg/series-workflowht4mg-build-action-3027793608/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-workflowht4mg/series-workflowht4mg-build-action-1359800449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 10:00:12 +0000 UTC FinishedAt: 2026-07-27 10:00:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 10:00:12 +0000 UTC FinishedAt: 2026-07-27 10:00:17 +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_send","io_recv","io_buffers_select","io_buffers_peek"],"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-workflowht4mg/series-workflowht4mg-convert-artifact-1565543258/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 10:00:12 +0000 UTC FinishedAt: 2026-07-27 10:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 10:00:12 +0000 UTC FinishedAt: 2026-07-27 10:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 10:00:13 +0000 UTC FinishedAt: 2026-07-27 10:00:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 10:00:23 +0000 UTC FinishedAt: 2026-07-27 13:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht4mg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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_send","io_recv","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b1c5eca214b63e19fbdfe9fa1bea0e9884be7c2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"8d1eb236-4676-4f3e-8a6e-577bcc9437d2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 10:00:23 +0000 UTC FinishedAt: 2026-07-27 13:02:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*430f724d-2881-41d3-b100-63c626143ee3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*78bb4ef2-af33-41d5-b623-de640b03e8ab,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-workflowht4mg/series-workflowht4mg-build-action-3027793608/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-workflowht4mg/series-workflowht4mg-build-action-1359800449/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-workflowht4mg/series-workflowht4mg-convert-artifact-1565543258/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,}