Name: series-workflowzbgdg Phase: Succeeded StartedAt: 2026-08-13 14:36:49 +0000 UTC FinishedAt: 2026-08-13 16:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[0] Phase: Succeeded StartedAt: 2026-08-13 14:36:49 +0000 UTC FinishedAt: 2026-08-13 14:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 14:36:49 +0000 UTC FinishedAt: 2026-08-13 14:55:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6e0d7a4a76b333aadafbea7f1826e905f0765a42", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6e0d7a4a76b333aadafbea7f1826e905f0765a42", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AIO" ], "series_id": "f0baef03-4a00-4945-a036-2f185256bb69" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "aio_poll_wake", "aio_poll" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fpb19wb2xsX3dha2UmIzM0OywKICAgICYjMzQ7YWlvX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyBpbiBgYWlvX3BvbGxfd2FrZWAgdG8gYXZvaWQgZGVhZGxvY2tzIGNhdXNlZCBieSB0YWtpbmcgdGhlIHNhbWUgd2FpdHF1ZXVlIGxvY2sgYWdhaW4gdGhyb3VnaCBlcG9sbC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9kZWFkbG9jayBpc3N1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUlPIHBvbGxpbmcgbG9naWMgaW4gYGFpb19wb2xsX3dha2VgIGJ5IHVuY29uZGl0aW9uYWxseSBkZWZlcnJpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgdG8gYSB3b3JrcXVldWUsIGluc3RlYWQgb2YgY2hlY2tpbmcgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQUlPKSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmM3OTU1MzA4NjZkMDZkZDU4YjRlZjllOTlhNDJhM2EwYWE2NTcwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjU0OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUuLmVmODAxNzgxZGEwOGMgMTAwNjQ0XG4tLS0gYS9mcy9haW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmNcbkBAIC0xODY5LDcgJiM0MzsxODY5LDEyIEBAIHN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuIFx0XHRsaXN0X2RlbChcdTAwMjZpb2NiLVx1MDAzZWtpX2xpc3QpO1xuIFx0XHRpb2NiLVx1MDAzZWtpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTtcbi1cdFx0aWYgKGlvY2ItXHUwMDNla2lfZXZlbnRmZCBcdTAwMjZcdTAwMjYgIWV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFdlIGhvbGQgYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGhlcmUuICBTaWduYWxpbmcgYVxuJiM0MztcdFx0ICogcmVzdWx0IGV2ZW50ZmQgY2FuIGZlZWQgYmFjayB0aHJvdWdoIGVwb2xsIGFuZCB0cnkgdG8gdGFrZSB0aGUgc2FtZVxuJiM0MztcdFx0ICogbG9jayBhZ2Fpbi4gIERlZmVyIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoaW9jYi1cdTAwM2VraV9ldmVudGZkKSB7XG4gXHRcdFx0aW9jYiA9IE5VTEw7XG4gXHRcdFx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XG4gXHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZyZXEtXHUwMDNld29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fpb19wb2xsX3dha2UmIzM0OywKICAgICYjMzQ7YWlvX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFJTyBwb2xsaW5nIGxvZ2ljIGluIGBhaW9fcG9sbF93YWtlYCBieSB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyaW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIHRvIGEgd29ya3F1ZXVlLCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEFJTykgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjNzk1NTMwODY2ZDA2ZGQ1OGI0ZWY5ZTk5YTQyYTNhMGFhNjU3MGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDo1NDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZjU3ZmEyMWEyNTAzNS4uZWY4MDE3ODFkYTA4YyAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmMKQEAgLTE4NjksNyAmIzQzOzE4NjksMTIgQEAgc3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO3JlcS0mZ3Q7d2FpdC5lbnRyeSk7CiAJCWxpc3RfZGVsKCZhbXA7aW9jYi0mZ3Q7a2lfbGlzdCk7CiAJCWlvY2ItJmd0O2tpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTsKLQkJaWYgKGlvY2ItJmd0O2tpX2V2ZW50ZmQgJmFtcDsmYW1wOyAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgaG9sZCBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaGVyZS4gIFNpZ25hbGluZyBhCiYjNDM7CQkgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lCiYjNDM7CQkgKiBsb2NrIGFnYWluLiAgRGVmZXIgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChpb2NiLSZndDtraV9ldmVudGZkKSB7CiAJCQlpb2NiID0gTlVMTDsKIAkJCUlOSVRfV09SSygmYW1wO3JlcS0mZ3Q7d29yaywgYWlvX3BvbGxfcHV0X3dvcmspOwogCQkJc2NoZWR1bGVfd29yaygmYW1wO3JlcS0mZ3Q7d29yayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgZnMvYWlvLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYWlvX3BvbGxfd2FrZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGhvdyBpdCBoYW5kbGVzIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIHdpdGggYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAgdG8gZGV0ZXJtaW5lIGlmIGFuIGV2ZW50ZmQgc2lnbmFsIHdhcyBhbGxvd2VkLCBidXQgbm93IGl0JiMzOTtzIGJlaW5nIHJlbW92ZWQuIFNvIG5vdyBhbGwgZXZlbnRmZC1iYWNrZWQgY29tcGxldGlvbnMgYXJlIGRlZmVycmVkIHRvIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBSU8gcG9sbGluZyBjb3JlIGxvZ2ljLgoKSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBgYWlvX3BvbGxfd2FrZWAgZnVuY3Rpb24gaXMgdGhlIHdha2UtdXAgY2FsbGJhY2sgZm9yIEFJTyBwb2xsIHJlcXVlc3RzLiBHaXZlbiB0aGlzLCBpdCBzZWVtcyBoaWdobHkgcHJvYmFibGUgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gZGlnIGludG8gYGZzL2Fpby5jYCBhbmQgc3BlY2lmaWNhbGx5IGBhaW9fcG9sbF93YWtlYCwgYW5kIEkmIzM5O20gbWFya2luZyB0aGlzIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgYGFpb19wb2xsX3dha2VgLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgQUlPYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbiwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg5OT1jb25maWcgU0hNRU1cbi0tXG5pbml0L0tjb25maWctMTkwOS1cbmluaXQvS2NvbmZpZzoxOTEwOmNvbmZpZyBBSU9cbmluaXQvS2NvbmZpZy0xOTExLVx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYEFJT2AgaXMgdGhlIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBHb29kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBgYWlvX3BvbGxfd2FrZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSB3YXkgdGhpcyBwaWVjZSBvZiBjb2RlIHdpbGwgYmVoYXZlLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBvciBtdWx0aS1wcm9jZXNzIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIHZhcmlhYmxlIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlvX3BvbGxfd2FrZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTE4MjM9c3RhdGljIGludCBhaW9fcG9sbF9jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiKVxuLS1cbmZzL2Fpby5jLTE4MzktXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG5mcy9haW8uYy0xODQxLVx0XHR2b2lkICprZXkpXG4tLVxuZnMvYWlvLmM9MTk1Mj1zdGF0aWMgaW50IGFpb19wb2xsKHN0cnVjdCBhaW9fa2lvY2IgKmFpb2NiLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYilcbi0tXG5mcy9haW8uYy0xOTgyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuZnMvYWlvLmM6MTk4MzpcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXHUwMDI2cmVxLVx1MDAzZXdhaXQsIGFpb19wb2xsX3dha2UpO1xuZnMvYWlvLmMtMTk4NC1cbi0tXG5mcy9haW8uYy0xOTkxLVx0XHRcdC8qXG5mcy9haW8uYzoxOTkyOlx0XHRcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXG5mcy9haW8uYy0xOTkzLVx0XHRcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFpb19wb2xsX3dha2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBhaW9fcG9sbF93YWtlYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaW4gYGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnlgLiBDYWxsYmFjayBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBjYWxsZWQgaW5kaXJlY3RseSwgcmlnaHQ/IFRoZXkmIzM5O3JlIGRpc3RpbmN0LCBzZXBhcmF0ZSBmdW5jdGlvbnMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzIGNvcnJlY3QsIGJ1dCBzb21ldGhpbmcgYWJvdXQgdGhhdCBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LgoKV2FpdCBhIHNlY29uZCwgdGhlIGNvZGluZyBndWlkZWxpbmVzIGVtcGhhc2l6ZSAqbm9uLXN0YXRpYywgbm9uLWlubGluZWQqIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCB3aGljaCBhcmUgaW5saW5lZC4gQnV0IGBhaW9fcG9sbF93YWtlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyBpdCYjMzk7cyAqbm90KiBnb2luZyB0byBiZSBpbmxpbmVkLCBpcyBpdD8gU28sIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3Mgc3RhdGljIGlzIHBvdGVudGlhbGx5IHRoZSBpc3N1ZS4gTm93LCB3aGF0JiMzOTtzIHRoZSBhY3R1YWwgQVBJIGVudHJ5cG9pbnQgaW4gdGhpcyBjb250ZXh0PyBBaCwgdGhhdCB3b3VsZCBiZSBlaXRoZXIgYGFpb19wb2xsYCBvciBwb3RlbnRpYWxseSBgaW9fc3VibWl0YCwgc2luY2UgdGhleSBjYWxsIGBhaW9fcG9sbGAuIExldCYjMzk7cyBkaWcgaW50byBgYWlvX3BvbGxgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpb19wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWlvLmM9MTcwND1zdGF0aWMgaW50IGFpb19mc3luYyhzdHJ1Y3QgZnN5bmNfaW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYixcbi0tXG5mcy9haW8uYy0xNzIzLVxuZnMvYWlvLmM6MTcyNDpzdGF0aWMgdm9pZCBhaW9fcG9sbF9wdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5mcy9haW8uYy0xNzI1LXtcbi0tXG5mcy9haW8uYz0xNzcxPXN0YXRpYyB2b2lkIHBvbGxfaW9jYl91bmxvY2tfd3Eoc3RydWN0IHBvbGxfaW9jYiAqcmVxKVxuLS1cbmZzL2Fpby5jLTE3NzYtXG5mcy9haW8uYzoxNzc3OnN0YXRpYyB2b2lkIGFpb19wb2xsX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvYWlvLmMtMTc3OC17XG4tLVxuZnMvYWlvLmMtMTgyMi0vKiBhc3N1bWVzIHdlIGFyZSBjYWxsZWQgd2l0aCBpcnFzIGRpc2FibGVkICovXG5mcy9haW8uYzoxODIzOnN0YXRpYyBpbnQgYWlvX3BvbGxfY2FuY2VsKHN0cnVjdCBraW9jYiAqaW9jYilcbmZzL2Fpby5jLTE4MjQte1xuLS1cbmZzL2Fpby5jLTE4MzktXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG5mcy9haW8uYy0xODQxLVx0XHR2b2lkICprZXkpXG4tLVxuZnMvYWlvLmMtMTg3OC1cdFx0XHRpb2NiID0gTlVMTDtcbmZzL2Fpby5jOjE4Nzk6XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XG5mcy9haW8uYy0xODgwLVx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmVxLVx1MDAzZXdvcmspO1xuLS1cbmZzL2Fpby5jLTE5MTctXHRcdFx0ICogYXMgcmVxLVx1MDAzZWhlYWQgaXMgTlVMTCYjMzk7ZWQgb3V0LCB0aGUgcmVxdWVzdCBjYW4gYmVcbmZzL2Fpby5jOjE5MTg6XHRcdFx0ICogY29tcGxldGVkIGFuZCBmcmVlZCwgc2luY2UgYWlvX3BvbGxfY29tcGxldGVfd29yaygpXG5mcy9haW8uYy0xOTE5LVx0XHRcdCAqIHdpbGwgbm8gbG9uZ2VyIG5lZWQgdG8gdGFrZSB0aGUgd2FpdHF1ZXVlIGxvY2suXG4tLVxuZnMvYWlvLmMtMTkyNi1cbmZzL2Fpby5jOjE5Mjc6c3RydWN0IGFpb19wb2xsX3RhYmxlIHtcbmZzL2Fpby5jLTE5MjgtXHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3RcdHB0O1xuLS1cbmZzL2Fpby5jPTE5MzQ9c3RhdGljIHZvaWRcbmZzL2Fpby5jOjE5MzU6YWlvX3BvbGxfcXVldWVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHdhaXRfcXVldWVfaGVhZCAqaGVhZCxcbmZzL2Fpby5jLTE5MzYtXHRcdHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcClcbmZzL2Fpby5jLTE5Mzcte1xuZnMvYWlvLmM6MTkzODpcdHN0cnVjdCBhaW9fcG9sbF90YWJsZSAqcHQgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGFpb19wb2xsX3RhYmxlLCBwdCk7XG5mcy9haW8uYy0xOTM5LVxuLS1cbmZzL2Fpby5jLTE5NTEtXG5mcy9haW8uYzoxOTUyOnN0YXRpYyBpbnQgYWlvX3BvbGwoc3RydWN0IGFpb19raW9jYiAqYWlvY2IsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiKVxuZnMvYWlvLmMtMTk1My17XG4tLVxuZnMvYWlvLmMtMTk1NS1cdHN0cnVjdCBwb2xsX2lvY2IgKnJlcSA9IFx1MDAyNmFpb2NiLVx1MDAzZXBvbGw7XG5mcy9haW8uYzoxOTU2Olx0c3RydWN0IGFpb19wb2xsX3RhYmxlIGFwdDtcbmZzL2Fpby5jLTE5NTctXHRib29sIGNhbmNlbCA9IGZhbHNlO1xuLS1cbmZzL2Fpby5jLTE5NjYtXG5mcy9haW8uYzoxOTY3Olx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9jb21wbGV0ZV93b3JrKTtcbmZzL2Fpby5jLTE5NjgtXHRyZXEtXHUwMDNlZXZlbnRzID0gZGVtYW5nbGVfcG9sbChpb2NiLVx1MDAzZWFpb19idWYpIHwgRVBPTExFUlIgfCBFUE9MTEhVUDtcbi0tXG5mcy9haW8uYy0xOTc0LVxuZnMvYWlvLmM6MTk3NTpcdGFwdC5wdC5fcXByb2MgPSBhaW9fcG9sbF9xdWV1ZV9wcm9jO1xuZnMvYWlvLmMtMTk3Ni1cdGFwdC5wdC5fa2V5ID0gcmVxLVx1MDAzZWV2ZW50cztcbi0tXG5mcy9haW8uYy0xOTgyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuZnMvYWlvLmM6MTk4MzpcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXHUwMDI2cmVxLVx1MDAzZXdhaXQsIGFpb19wb2xsX3dha2UpO1xuZnMvYWlvLmMtMTk4NC1cbi0tXG5mcy9haW8uYy0xOTkxLVx0XHRcdC8qXG5mcy9haW8uYzoxOTkyOlx0XHRcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXG5mcy9haW8uYy0xOTkzLVx0XHRcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cbi0tXG5mcy9haW8uYy0yMDExLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YWlvY2ItXHUwMDNla2lfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZWFjdGl2ZV9yZXFzKTtcbmZzL2Fpby5jOjIwMTI6XHRcdFx0YWlvY2ItXHUwMDNla2lfY2FuY2VsID0gYWlvX3BvbGxfY2FuY2VsO1xuZnMvYWlvLmMtMjAxMy1cdFx0fVxuLS1cbmZzL2Fpby5jPTIwMjc9c3RhdGljIGludCBfX2lvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYixcbi0tXG5mcy9haW8uYy0yMDczLVx0Y2FzZSBJT0NCX0NNRF9QT0xMOlxuZnMvYWlvLmM6MjA3NDpcdFx0cmV0dXJuIGFpb19wb2xsKHJlcSwgaW9jYik7XG5mcy9haW8uYy0yMDc1LVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUlPIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgZm9yIGFzeW5jaHJvbm91cyBJL08gYW5kIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgYGFpb19wb2xsYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIHRoZSBzdGF0aWMgYGFpb19wb2xsYCBiZWNhdXNlIGl0IGlzIGNhbGxlZCBieSBgX19pb19zdWJtaXRfb25lYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYGlvX3N1Ym1pdF9vbmVgLCBhbmQgZmluYWxseSBgc3lzX2lvX3N1Ym1pdGAuIFNpbmNlIGBzeXNfaW9fc3VibWl0YCBpcyB0aGUgc3lzdGVtIGNhbGwsIG15IG1pbmQgd2VudCBzdHJhaWdodCB0byBleGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyBjbG9zZXIgdG8gdGhhdCBlbnRyeSBwb2ludC4gRnVuY3Rpb25zIHN1Y2ggYXMgYGlvX3N1Ym1pdF9vbmVgIG9yIGBfX2lvX3N1Ym1pdF9vbmVgIHNlZW1lZCBsaWtlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcyBkb2VzIHRoZSBhaW8gcG9sbCBmdW5jdGlvbi4KCkdpdmVuIHRoYXQsIEkmIzM5O3ZlIGRlY2lkZWQgdG8gaW5pdGlhbGx5IGZvY3VzIG9uIGBfX2lvX3N1Ym1pdF9vbmVgIGFuZCBgYWlvX3BvbGxgIGFzIHBvdGVudGlhbCAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7LiBIb3dldmVyLCBhIHF1aWNrIHJlZnJlc2hlciBzaG93cyB0aGF0IGBhaW9fcG9sbGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYElPQ0JfQ01EX1BPTExgLCB3aGljaCBtYWtlcyBpdCBhIGNyaXRpY2FsIHBhcnQuCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgYGFpb19wb2xsYCAqaXMqIHN0YXRpYyB3aGljaCBzaW1wbGlmaWVzIHNvbWUgYW5hbHlzaXMuIEFsdGhvdWdoLCBnaXZlbiB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24sIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBpbmxpbmVkLiBUaGlzIG1ha2VzIG1lIHdhbnQgdG8gdmVyaWZ5IG15IGFzc3VtcHRpb24gYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gQWgsIHllcywgYHN5c19pb19zdWJtaXRgIGlzIHRoZSBhY3R1YWwgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19zdWJtaXRfb25lYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc3VibWl0X29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTE5NTI9c3RhdGljIGludCBhaW9fcG9sbChzdHJ1Y3QgYWlvX2tpb2NiICphaW9jYiwgY29uc3Qgc3RydWN0IGlvY2IgKmlvY2IpXG4tLVxuZnMvYWlvLmMtMjAyNi1cbmZzL2Fpby5jOjIwMjc6c3RhdGljIGludCBfX2lvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYixcbmZzL2Fpby5jLTIwMjgtXHRcdFx0ICAgc3RydWN0IGlvY2IgX191c2VyICp1c2VyX2lvY2IsIHN0cnVjdCBhaW9fa2lvY2IgKnJlcSxcbi0tXG5mcy9haW8uYy0yMDgwLVxuZnMvYWlvLmM6MjA4MTpzdGF0aWMgaW50IGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYixcbmZzL2Fpby5jLTIwODItXHRcdFx0IGJvb2wgY29tcGF0KVxuLS1cbmZzL2Fpby5jLTIxMTAtXG5mcy9haW8uYzoyMTExOlx0ZXJyID0gX19pb19zdWJtaXRfb25lKGN0eCwgXHUwMDI2aW9jYiwgdXNlcl9pb2NiLCByZXEsIGNvbXBhdCk7XG5mcy9haW8uYy0yMTEyLVxuLS1cbmZzL2Fpby5jPTIxNDA9U1lTQ0FMTF9ERUZJTkUzKGlvX3N1Ym1pdCwgYWlvX2NvbnRleHRfdCwgY3R4X2lkLCBsb25nLCBucixcbi0tXG5mcy9haW8uYy0yMTY5LVxuZnMvYWlvLmM6MjE3MDpcdFx0cmV0ID0gaW9fc3VibWl0X29uZShjdHgsIHVzZXJfaW9jYiwgZmFsc2UpO1xuZnMvYWlvLmMtMjE3MS1cdFx0aWYgKHJldClcbi0tXG5mcy9haW8uYz0yMTgyPUNPTVBBVF9TWVNDQUxMX0RFRklORTMoaW9fc3VibWl0LCBjb21wYXRfYWlvX2NvbnRleHRfdCwgY3R4X2lkLFxuLS1cbmZzL2Fpby5jLTIyMTEtXG5mcy9haW8uYzoyMjEyOlx0XHRyZXQgPSBpb19zdWJtaXRfb25lKGN0eCwgY29tcGF0X3B0cih1c2VyX2lvY2IpLCB0cnVlKTtcbmZzL2Fpby5jLTIyMTMtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjcKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGlvX3N1Ym1pdGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGlvX3N1Ym1pdF9vbmVgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHdyaW5rbGUuIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgYWR2aXNlcyBhZ2FpbnN0IHVzaW5nIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zIGluIGZhdm9yIG9mIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBIbW0uLi4gaWYgYGlvX3N1Ym1pdF9vbmVgIGlzIHN0YXRpYywgdGhhdCBpbXBsaWVzIHRoZSBzeXN0ZW0gY2FsbCwgYHN5c19pb19zdWJtaXRgLCBtaWdodCBiZSB0aGUgb25seSBub24tc3RhdGljIG9wdGlvbiBhdmFpbGFibGUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBgc3lzX2lvX3N1Ym1pdGAgaXMgaW5kZWVkIGEgc3lzY2FsbC4gQnV0LCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZnMvYWlvLmNgIHRoYXQgaGFuZGxlIHRoaXMgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5PyBJIHNob3VsZCBkb3VibGUtY2hlY2sgYGZzL2Fpby5jYCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTIyNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBhaW9faW5vZGVfaW5mbyAqQUlPX0koc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9haW8uYy0yMzItLyotLS0tLS0gc3lzY3RsIHZhcmlhYmxlcy0tLS0qL1xuZnMvYWlvLmM6MjMzOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWlvX25yX2xvY2spO1xuZnMvYWlvLmMtMjM0LXN0YXRpYyB1bnNpZ25lZCBsb25nIGFpb19ucjtcdFx0LyogY3VycmVudCBzeXN0ZW0gd2lkZSBudW1iZXIgb2YgYWlvIHJlcXVlc3RzICovXG4tLVxuZnMvYWlvLmM9NTM2PXN0YXRpYyBpbnQgYWlvX3NldHVwX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnJfZXZlbnRzKVxuLS1cbmZzL2Fpby5jLTYzNi1cbmZzL2Fpby5jOjYzNzp2b2lkIGtpb2NiX3NldF9jYW5jZWxfZm4oc3RydWN0IGtpb2NiICppb2NiLCBraW9jYl9jYW5jZWxfZm4gKmNhbmNlbClcbmZzL2Fpby5jLTYzOC17XG4tLVxuZnMvYWlvLmM9OTAxPXN0YXRpYyBpbnQga2lsbF9pb2N0eChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGtpb2N0eCAqY3R4LFxuLS1cbmZzL2Fpby5jLTk0NC0gKi9cbmZzL2Fpby5jOjk0NTp2b2lkIGV4aXRfYWlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuZnMvYWlvLmMtOTQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gU2VsZWN0aW5nIEFJTyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBzZWUgYGtpb2NiX3NldF9jYW5jZWxfZm5gIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IEkmIzM5O20gbG9va2luZyBhdCB0aGUgc3lzY2FsbCwgYHN5c19pb19zdWJtaXRgLCBkZWZpbmVkIHRocm91Z2ggdGhlIGBTWVNDQUxMX0RFRklORTNgIG1hY3JvLiBUaGF0IG1lYW5zIHRoZSByZWFsIGZ1bmN0aW9uIGlzIGVpdGhlciBgX194NjRfc3lzX2lvX3N1Ym1pdGAgb3IganVzdCBgc3lzX2lvX3N1Ym1pdGAuICBUaGVuIEkgbG9va2VkIGF0IGBhaW9fcG9sbGAgd2hpY2ggaXMgc3RhdGljIGJ1dCBpdCYjMzk7cyBhIGxhcmdlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBub3QgYmVpbmcgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuCgpUaGVuLCB0aGVyZSBpcyBgYWlvX3BvbGxfd2FrZWAuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIG1lYW5zIGl0IGRlZmluaXRlbHkgKmlzbiYjMzk7dCogaW5saW5lZC4gT2theSwgc28gdGhhdCBnaXZlcyBtZSBhbiBpZGVhLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzYXlpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBTaW5jZSBgYWlvX3BvbGxfd2FrZWAgaGFzIGEgZGlzdGluY3QgYWRkcmVzcyBiZWNhdXNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IGZ1bGZpbGxzIHRoYXQgcmVxdWlyZW1lbnQuIFNvLCBJIHdpbGwganVzdCBpbmNsdWRlIGJvdGggYGFpb19wb2xsYCBhbmQgYGFpb19wb2xsX3dha2VgLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGUgb25seSBvbmUgdGhhdCBsb29rcyByZWxldmFudCBpcyBgQUlPYCwgYnV0IEkgc2hvdWxkIGNoZWNrIGBFUE9MTGAganVzdCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBBSU9gIGlzIGVub3VnaCB0byBlbmFibGUgYGZzL2Fpby5jYCwgdGhvdWdoLiBJIHdpbGwgY2hlY2sgdGhlIGBBSU9gIGNvbmZpZyBpbiBgaW5pdC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4OTk9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE5MDktXG5pbml0L0tjb25maWc6MTkxMDpjb25maWcgQUlPXG5pbml0L0tjb25maWctMTkxMS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFJTyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTcwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgc2l0dWF0aW9uOgoKKipDb25maWd1cmF0aW9uIENoZWNrIGFuZCBTaWduYWwgUGVybWlzc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBBSU9gIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSB3ZSYjMzk7cmUgdXNpbmcsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaW1lIHRvIG1ha2Ugc3VyZSwgaXQgaXMgdGhlIG9uZS4gTm93LCBsZXQmIzM5O3MgbW92ZSBvbiBhbmQgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZGAuIFRoaXMgaXMgY3JpdGljYWwsIGFzIGl0IGxpa2VseSBpbXBhY3RzIGhvdyB3ZSBoYW5kbGUgc2lnbmFscyByZWxhdGVkIHRvIGV2ZW50IGZpbGUgZGVzY3JpcHRvcnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHNldCBhcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoYXQgc2V0dGluZyBpcyBhbGxvd2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmVudGZkX3NpZ25hbF9hbGxvd2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmM9NTczPXN0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfa2lja192cShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYy01NzctXG5kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jOjU3ODpcdGlmICghZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG5kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jLTU3OS1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ2cS1cdTAwM2VraWNrKTtcbi0tXG5mcy9ldmVudGZkLmM9NTY9dm9pZCBldmVudGZkX3NpZ25hbF9tYXNrKHN0cnVjdCBldmVudGZkX2N0eCAqY3R4LCBfX3BvbGxfdCBtYXNrKVxuLS1cbmZzL2V2ZW50ZmQuYy02My1cdCAqIG5lc3RlZCB3YWl0cXVldWVzIHdpdGggY3VzdG9tIHdha2V1cCBoYW5kbGVycywgdGhlbiBpdCBzaG91bGRcbmZzL2V2ZW50ZmQuYzo2NDpcdCAqIGNoZWNrIGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJZlxuZnMvZXZlbnRmZC5jLTY1LVx0ICogaXQgcmV0dXJucyBmYWxzZSwgdGhlIGV2ZW50ZmRfc2lnbmFsKCkgY2FsbCBzaG91bGQgYmUgZGVmZXJyZWQgdG8gYVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oPTQxPXZvaWQgZXZlbnRmZF9jdHhfZG9fcmVhZChzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCwgX191NjQgKmNudCk7XG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaC00Mi1cbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oOjQzOnN0YXRpYyBpbmxpbmUgYm9vbCBldmVudGZkX3NpZ25hbF9hbGxvd2VkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaC00NC17XG4tLVxuaW5jbHVkZS9saW51eC9ldmVudGZkLmg9Njk9c3RhdGljIGlubGluZSBpbnQgZXZlbnRmZF9jdHhfcmVtb3ZlX3dhaXRfcXVldWUoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9saW51eC9ldmVudGZkLmgtNzQtXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaDo3NTpzdGF0aWMgaW5saW5lIGJvb2wgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9ldmVudGZkLmgtNzYte1xuLS1cbmlvX3VyaW5nL2V2ZW50ZmQuYz01ND1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG5pb191cmluZy9ldmVudGZkLmMtNTUte1xuaW9fdXJpbmcvZXZlbnRmZC5jOjU2Olx0aWYgKGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xuaW9fdXJpbmcvZXZlbnRmZC5jLTU3LVx0XHRldmVudGZkX3NpZ25hbF9tYXNrKGV2X2ZkLVx1MDAzZWNxX2V2X2ZkLCBFUE9MTF9VUklOR19XQUtFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBhc3luY2hyb25vdXMgSS9PIChBSU8pIHBvbGxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgIGNoZWNrIHdpdGhpbiBgYWlvX3BvbGxfd2FrZWAgYW5kLCBieSBkb2luZyBzbywgZGVsYXlpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEFJTy4gVGhpcyBjaGFuZ2Ugd2FycmFudHMgc2VyaW91cyBhdHRlbnRpb24gYW5kIHRob3JvdWdoIGZ1enppbmcuCgpNeSBmb2N1cyBpbW1lZGlhdGVseSBnb2VzIHRvIGBhaW9fcG9sbF93YWtlYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGFpb19wb2xsYC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGZzL2Fpby5jYCBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gVGhlIGBBSU9gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQsIHNvIEkga25vdyB0aGlzIGlzIGEgZmVhdHVyZSBhY3RpdmVseSBpbiB1c2UuIFRoaXMgcmVtb3ZhbCBvZiB0aGUgY2hlY2sgY291bGQgaW50cm9kdWNlIHN1YnRsZSBidWdzIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBwcmltZSB0YXJnZXRzIGZvciBleHBsb2l0YXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHNwZW5kIHNvbWUgZm9jdXNlZCB0aW1lIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlvX3BvbGxfd2FrZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTE4MjM9c3RhdGljIGludCBhaW9fcG9sbF9jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiKVxuLS1cbmZzL2Fpby5jLTE4MzktXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG5mcy9haW8uYy0xODQxLVx0XHR2b2lkICprZXkpXG4tLVxuZnMvYWlvLmM9MTk1Mj1zdGF0aWMgaW50IGFpb19wb2xsKHN0cnVjdCBhaW9fa2lvY2IgKmFpb2NiLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYilcbi0tXG5mcy9haW8uYy0xOTgyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuZnMvYWlvLmM6MTk4MzpcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXHUwMDI2cmVxLVx1MDAzZXdhaXQsIGFpb19wb2xsX3dha2UpO1xuZnMvYWlvLmMtMTk4NC1cbi0tXG5mcy9haW8uYy0xOTkxLVx0XHRcdC8qXG5mcy9haW8uYzoxOTkyOlx0XHRcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXG5mcy9haW8uYy0xOTkzLVx0XHRcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NAoJCQkJCQkJb3V0cHV0OiAxMTYKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIHN5bnRoZXNpemUgdGhlc2UgdGhvdWdodHMgaW50byBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBpdDoKCioqTXkgUGVyc3BlY3RpdmU6IERlbGl2ZXJpbmcgdGhlIE91dGNvbWUqKgoKQWxyaWdodCwgdGhlIGNvcmUgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGVuZCByZXN1bHQuIEV2ZXJ5dGhpbmcgbGVhZGluZyB1cCB0byB0aGlzIHBvaW50LCB0aGUgYW5hbHlzaXMsIHRoZSBleHBlcmltZW50YXRpb24sIHRoZSBjb25zaWRlcmF0aW9ucyDigJMgYWxsIG9mIGl0IGN1bG1pbmF0ZXMgaW4gdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0cy4gVGhpcyBpc24mIzM5O3QgYSBuZWJ1bG91cyBnb2FsOyBpdCYjMzk7cyBhIGNvbW1pdG1lbnQuIE15IGVudGlyZSBwcm9jZXNzLCBteSBleHBlcnRpc2UsIG15IGFiaWxpdHkgdG8gaW50ZXJwcmV0IGFuZCB0cmFuc2xhdGUgY29tcGxleCBkYXRhIG9yIGlkZWFzLCBoYXMgcmVhY2hlZCB0aGUgcG9pbnQgb2YgY3VsbWluYXRpb24uIE15IHByaW9yaXR5IGlzIHRvIGNvbW11bmljYXRlIGNsZWFybHkgYW5kIGVmZmVjdGl2ZWx5IHRoZSBwcm9kdWN0IG9mIG15IHdvcmsuIFRoZSByZXN1bHRzICphcmUqIHRoZSBmb2N1cy4gSSYjMzk7bSBkZWxpdmVyaW5nIHRoZSBnb29kcy4gTm8gbW9yZSwgbm8gbGVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fpb19wb2xsX3dha2UmIzM0OywKICAgICYjMzQ7YWlvX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFJTyBwb2xsaW5nIGxvZ2ljIGluIGBhaW9fcG9sbF93YWtlYCBieSB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyaW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIHRvIGEgd29ya3F1ZXVlLCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEFJTykgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUlPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWlvX3BvbGxfd2FrZSYjMzQ7LAogICAgJiMzNDthaW9fcG9sbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUlPIHBvbGxpbmcgbG9naWMgaW4gYGFpb19wb2xsX3dha2VgIGJ5IHVuY29uZGl0aW9uYWxseSBkZWZlcnJpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgdG8gYSB3b3JrcXVldWUsIGluc3RlYWQgb2YgY2hlY2tpbmcgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQUlPKSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRlZmVycmluZyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIGluIGBhaW9fcG9sbF93YWtlYCB0byBhdm9pZCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHRha2luZyB0aGUgc2FtZSB3YWl0cXVldWUgbG9jayBhZ2FpbiB0aHJvdWdoIGVwb2xsLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL2RlYWRsb2NrIGlzc3VlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjNzk1NTMwODY2ZDA2ZGQ1OGI0ZWY5ZTk5YTQyYTNhMGFhNjU3MGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDo1NDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZjU3ZmEyMWEyNTAzNS4uZWY4MDE3ODFkYTA4YyAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmMKQEAgLTE4NjksNyAmIzQzOzE4NjksMTIgQEAgc3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO3JlcS0mZ3Q7d2FpdC5lbnRyeSk7CiAJCWxpc3RfZGVsKCZhbXA7aW9jYi0mZ3Q7a2lfbGlzdCk7CiAJCWlvY2ItJmd0O2tpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTsKLQkJaWYgKGlvY2ItJmd0O2tpX2V2ZW50ZmQgJmFtcDsmYW1wOyAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgaG9sZCBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaGVyZS4gIFNpZ25hbGluZyBhCiYjNDM7CQkgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lCiYjNDM7CQkgKiBsb2NrIGFnYWluLiAgRGVmZXIgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChpb2NiLSZndDtraV9ldmVudGZkKSB7CiAJCQlpb2NiID0gTlVMTDsKIAkJCUlOSVRfV09SSygmYW1wO3JlcS0mZ3Q7d29yaywgYWlvX3BvbGxfcHV0X3dvcmspOwogCQkJc2NoZWR1bGVfd29yaygmYW1wO3JlcS0mZ3Q7d29yayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcxCgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQUlPIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFpb19wb2xsX3dha2VgIGluIGBmcy9haW8uY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIHJlbW92aW5nIHRoZSBgIWV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAgY2hlY2ssIHdoaWNoIGNoYW5nZXMgdGhlIGNvbmRpdGlvbiBmb3IgZGVmZXJyaW5nIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBldmVudGZkIHNpZ25hbGluZyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyBpbnZvbHZpbmcgd2FpdHF1ZXVlIGxvY2tzLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IG1lbnRpb25zIGEgc2l0dWF0aW9uIHdoZXJlIHNpZ25hbGluZyBhIHJlc3VsdCBldmVudGZkIGNhbiBsZWFkIHRvIHJlLWFjcXVpcmluZyB0aGUgc2FtZSBsb2NrIHRocm91Z2ggYGVwb2xsYC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgY29uZmlybXMgbXkgc3VzcGljaW9uLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyBpbiB0aGUgYGFpb19wb2xsX3dha2VgIGZ1bmN0aW9uIGl0c2VsZi4gV2l0aGluIHRoZSBzcGlubG9jay1wcm90ZWN0ZWQgc2VjdGlvbiwgaWYgYGlvY2ItJmd0O2tpX2V2ZW50ZmRgIGlzIHNldCwgYSB3b3JrIGl0ZW0gaXMgc2NoZWR1bGVkIHVzaW5nIGBzY2hlZHVsZV93b3JrYC4gVGhpcyBpcyBkb25lICppbnN0ZWFkKiBvZiBkaXJlY3RseSBjb21wbGV0aW5nIHRoZSBBSU8gb3BlcmF0aW9uLiBUaGUgY29tbWVudGVkIHRleHQgcmVpbmZvcmNlcyB0aGF0IHRoaXMgaXMgYSBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ3k6IGBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9uc2AuCgpUaGlzIHNlZW1zIGxpa2UgYSBjbGFzc2ljIGxvY2tpbmcgaXNzdWUuIFRoZSBjb2RlIGlzIGNhcmVmdWxseSBkZWZlcnJpbmcgdGhlIGNvbXBsZXRpb24gdG8gcHJldmVudCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZXZlbnRmZCBzaWduYWwgcGF0aCBtaWdodCB0cnkgdG8gYWNxdWlyZSBhIGxvY2sgdGhhdCYjMzk7cyBhbHJlYWR5IGhlbGQsIHJlc3VsdGluZyBpbiBhIGRlYWRsb2NrLiBMT0NLREVQIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhpcyB0eXBlIG9mIGlzc3VlIGR1cmluZyBkZXZlbG9wbWVudC4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LCBzbyBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQmIzM5O3MgYSBjbGVhbiwgZGVhZGxvY2stcHJldmVudGlvbiBtZWFzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyBpbiBgYWlvX3BvbGxfd2FrZWAgdG8gYXZvaWQgZGVhZGxvY2tzIGNhdXNlZCBieSB0YWtpbmcgdGhlIHNhbWUgd2FpdHF1ZXVlIGxvY2sgYWdhaW4gdGhyb3VnaCBlcG9sbC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9kZWFkbG9jayBpc3N1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZGVmZXJyaW5nIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgaW4gYGFpb19wb2xsX3dha2VgIHRvIGF2b2lkIGRlYWRsb2NrcyBjYXVzZWQgYnkgdGFraW5nIHRoZSBzYW1lIHdhaXRxdWV1ZSBsb2NrIGFnYWluIHRocm91Z2ggZXBvbGwuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvZGVhZGxvY2sgaXNzdWUsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MDkuNjU3MTI0MzQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMTIwNjM5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUlPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWlvX3BvbGxfd2FrZVwiLFxuICAgIFwiYWlvX3BvbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRlZmVycmluZyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIGluIGBhaW9fcG9sbF93YWtlYCB0byBhdm9pZCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHRha2luZyB0aGUgc2FtZSB3YWl0cXVldWUgbG9jayBhZ2FpbiB0aHJvdWdoIGVwb2xsLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL2RlYWRsb2NrIGlzc3VlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFJTyBwb2xsaW5nIGxvZ2ljIGluIGBhaW9fcG9sbF93YWtlYCBieSB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyaW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIHRvIGEgd29ya3F1ZXVlLCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEFJTykgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MDkuNjU3MTI5Nzk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA1MDM4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiYzc5NTUzMDg2NmQwNmRkNThiNGVmOWU5OWE0MmEzYTBhYTY1NzBjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjU0OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcXG5pbmRleCBmNTdmYTIxYTI1MDM1Li5lZjgwMTc4MWRhMDhjIDEwMDY0NFxcbi0tLSBhL2ZzL2Fpby5jXFxuKysrIGIvZnMvYWlvLmNcXG5AQCAtMTg2OSw3ICsxODY5LDEyIEBAIHN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJlcS1cXHUwMDNld2FpdC5lbnRyeSk7XFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZpb2NiLVxcdTAwM2VraV9saXN0KTtcXG4gXFx0XFx0aW9jYi1cXHUwMDNla2lfcmVzLnJlcyA9IG1hbmdsZV9wb2xsKG1hc2spO1xcbi1cXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfZXZlbnRmZCBcXHUwMDI2XFx1MDAyNiAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdlIGhvbGQgYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGhlcmUuICBTaWduYWxpbmcgYVxcbitcXHRcXHQgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lXFxuK1xcdFxcdCAqIGxvY2sgYWdhaW4uICBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9ldmVudGZkKSB7XFxuIFxcdFxcdFxcdGlvY2IgPSBOVUxMO1xcbiBcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJlcS1cXHUwMDNld29yaywgYWlvX3BvbGxfcHV0X3dvcmspO1xcbiBcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZyZXEtXFx1MDAzZXdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDoxMC4wNzg0NDU2MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NDg4Mzc3NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhaW9fcG9sbF93YWtlXCIsXG4gICAgXCJhaW9fcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBSU8gcG9sbGluZyBsb2dpYyBpbiBgYWlvX3BvbGxfd2FrZWAgYnkgdW5jb25kaXRpb25hbGx5IGRlZmVycmluZyBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyB0byBhIHdvcmtxdWV1ZSwgaW5zdGVhZCBvZiBjaGVja2luZyBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChBSU8pIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNzk1NTMwODY2ZDA2ZGQ1OGI0ZWY5ZTk5YTQyYTNhMGFhNjU3MGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDo1NDowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUuLmVmODAxNzgxZGEwOGMgMTAwNjQ0XG4tLS0gYS9mcy9haW8uY1xuKysrIGIvZnMvYWlvLmNcbkBAIC0xODY5LDcgKzE4NjksMTIgQEAgc3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZyZXEtXHUwMDNld2FpdC5lbnRyeSk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNmlvY2ItXHUwMDNla2lfbGlzdCk7XG4gXHRcdGlvY2ItXHUwMDNla2lfcmVzLnJlcyA9IG1hbmdsZV9wb2xsKG1hc2spO1xuLVx0XHRpZiAoaW9jYi1cdTAwM2VraV9ldmVudGZkIFx1MDAyNlx1MDAyNiAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdlIGhvbGQgYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGhlcmUuICBTaWduYWxpbmcgYVxuK1x0XHQgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lXG4rXHRcdCAqIGxvY2sgYWdhaW4uICBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucy5cbitcdFx0ICovXG4rXHRcdGlmIChpb2NiLVx1MDAzZWtpX2V2ZW50ZmQpIHtcbiBcdFx0XHRpb2NiID0gTlVMTDtcbiBcdFx0XHRJTklUX1dPUksoXHUwMDI2cmVxLVx1MDAzZXdvcmssIGFpb19wb2xsX3B1dF93b3JrKTtcbiBcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnJlcS1cdTAwM2V3b3JrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjEwLjA3ODQ0Njg2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzQ1MTczNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGZzL2Fpby5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGFpb19wb2xsX3dha2VgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgaXQgaGFuZGxlcyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayB3aXRoIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgIHRvIGRldGVybWluZSBpZiBhbiBldmVudGZkIHNpZ25hbCB3YXMgYWxsb3dlZCwgYnV0IG5vdyBpdCdzIGJlaW5nIHJlbW92ZWQuIFNvIG5vdyBhbGwgZXZlbnRmZC1iYWNrZWQgY29tcGxldGlvbnMgYXJlIGRlZmVycmVkIHRvIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBSU8gcG9sbGluZyBjb3JlIGxvZ2ljLlxuXG5JIG5lZWQgdG8gY29uZmlybSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIGBhaW9fcG9sbF93YWtlYCBmdW5jdGlvbiBpcyB0aGUgd2FrZS11cCBjYWxsYmFjayBmb3IgQUlPIHBvbGwgcmVxdWVzdHMuIEdpdmVuIHRoaXMsIGl0IHNlZW1zIGhpZ2hseSBwcm9iYWJsZSB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byBkaWcgaW50byBgZnMvYWlvLmNgIGFuZCBzcGVjaWZpY2FsbHkgYGFpb19wb2xsX3dha2VgLCBhbmQgSSdtIG1hcmtpbmcgdGhpcyBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgYGFpb19wb2xsX3dha2VgLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgQUlPYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MTUuMzEyOTY3NzE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTY2MDEzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4OTk9Y29uZmlnIFNITUVNXFxuLS1cXG5pbml0L0tjb25maWctMTkwOS1cXG5pbml0L0tjb25maWc6MTkxMDpjb25maWcgQUlPXFxuaW5pdC9LY29uZmlnLTE5MTEtXFx0Ym9vbCBcXFwiRW5hYmxlIEFJTyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MTcuMTI5NTc0MDg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2OTE2OTQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgQUlPYCBpcyB0aGUgY29uZmlndXJhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gR29vZC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGFpb19wb2xsX3dha2VgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgd2F5IHRoaXMgcGllY2Ugb2YgY29kZSB3aWxsIGJlaGF2ZSwgZXNwZWNpYWxseSBpbiBhIG11bHRpdGhyZWFkZWQgb3IgbXVsdGktcHJvY2VzcyBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhpcyB2YXJpYWJsZSBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MjAuNDk4NzQ2NzQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTI3OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpb19wb2xsX3dha2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MTgyMz1zdGF0aWMgaW50IGFpb19wb2xsX2NhbmNlbChzdHJ1Y3Qga2lvY2IgKmlvY2IpXFxuLS1cXG5mcy9haW8uYy0xODM5LVxcbmZzL2Fpby5jOjE4NDA6c3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcXG5mcy9haW8uYy0xODQxLVxcdFxcdHZvaWQgKmtleSlcXG4tLVxcbmZzL2Fpby5jPTE5NTI9c3RhdGljIGludCBhaW9fcG9sbChzdHJ1Y3QgYWlvX2tpb2NiICphaW9jYiwgY29uc3Qgc3RydWN0IGlvY2IgKmlvY2IpXFxuLS1cXG5mcy9haW8uYy0xOTgyLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZXEtXFx1MDAzZXdhaXQuZW50cnkpO1xcbmZzL2Fpby5jOjE5ODM6XFx0aW5pdF93YWl0cXVldWVfZnVuY19lbnRyeShcXHUwMDI2cmVxLVxcdTAwM2V3YWl0LCBhaW9fcG9sbF93YWtlKTtcXG5mcy9haW8uYy0xOTg0LVxcbi0tXFxuZnMvYWlvLmMtMTk5MS1cXHRcXHRcXHQvKlxcbmZzL2Fpby5jOjE5OTI6XFx0XFx0XFx0ICogYWlvX3BvbGxfd2FrZSgpIGFscmVhZHkgZWl0aGVyIHNjaGVkdWxlZCB0aGUgYXN5bmNcXG5mcy9haW8uYy0xOTkzLVxcdFxcdFxcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MjAuNTQyODgwMjkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NDk4Mzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBhaW9fcG9sbF93YWtlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBhaW9fcG9sbF93YWtlYCBpcyBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgYmVpbmcgdXNlZCBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGluIGBpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5YC4gQ2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgY2FsbGVkIGluZGlyZWN0bHksIHJpZ2h0PyBUaGV5J3JlIGRpc3RpbmN0LCBzZXBhcmF0ZSBmdW5jdGlvbnMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzIGNvcnJlY3QsIGJ1dCBzb21ldGhpbmcgYWJvdXQgdGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQuXG5cbldhaXQgYSBzZWNvbmQsIHRoZSBjb2RpbmcgZ3VpZGVsaW5lcyBlbXBoYXNpemUgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycywgd2hpY2ggYXJlIGlubGluZWQuIEJ1dCBgYWlvX3BvbGxfd2FrZWAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gaXQncyAqbm90KiBnb2luZyB0byBiZSBpbmxpbmVkLCBpcyBpdD8gU28sIHRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgaXMgcG90ZW50aWFsbHkgdGhlIGlzc3VlLiBOb3csIHdoYXQncyB0aGUgYWN0dWFsIEFQSSBlbnRyeXBvaW50IGluIHRoaXMgY29udGV4dD8gQWgsIHRoYXQgd291bGQgYmUgZWl0aGVyIGBhaW9fcG9sbGAgb3IgcG90ZW50aWFsbHkgYGlvX3N1Ym1pdGAsIHNpbmNlIHRoZXkgY2FsbCBgYWlvX3BvbGxgLiBMZXQncyBkaWcgaW50byBgYWlvX3BvbGxgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MjUuMjg3ODY2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQyNjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaW9fcG9sbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9haW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9haW8uYz0xNzA0PXN0YXRpYyBpbnQgYWlvX2ZzeW5jKHN0cnVjdCBmc3luY19pb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLFxcbi0tXFxuZnMvYWlvLmMtMTcyMy1cXG5mcy9haW8uYzoxNzI0OnN0YXRpYyB2b2lkIGFpb19wb2xsX3B1dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9haW8uYy0xNzI1LXtcXG4tLVxcbmZzL2Fpby5jPTE3NzE9c3RhdGljIHZvaWQgcG9sbF9pb2NiX3VubG9ja193cShzdHJ1Y3QgcG9sbF9pb2NiICpyZXEpXFxuLS1cXG5mcy9haW8uYy0xNzc2LVxcbmZzL2Fpby5jOjE3Nzc6c3RhdGljIHZvaWQgYWlvX3BvbGxfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZnMvYWlvLmMtMTc3OC17XFxuLS1cXG5mcy9haW8uYy0xODIyLS8qIGFzc3VtZXMgd2UgYXJlIGNhbGxlZCB3aXRoIGlycXMgZGlzYWJsZWQgKi9cXG5mcy9haW8uYzoxODIzOnN0YXRpYyBpbnQgYWlvX3BvbGxfY2FuY2VsKHN0cnVjdCBraW9jYiAqaW9jYilcXG5mcy9haW8uYy0xODI0LXtcXG4tLVxcbmZzL2Fpby5jLTE4MzktXFxuZnMvYWlvLmM6MTg0MDpzdGF0aWMgaW50IGFpb19wb2xsX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLFxcbmZzL2Fpby5jLTE4NDEtXFx0XFx0dm9pZCAqa2V5KVxcbi0tXFxuZnMvYWlvLmMtMTg3OC1cXHRcXHRcXHRpb2NiID0gTlVMTDtcXG5mcy9haW8uYzoxODc5OlxcdFxcdFxcdElOSVRfV09SSyhcXHUwMDI2cmVxLVxcdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XFxuZnMvYWlvLmMtMTg4MC1cXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZyZXEtXFx1MDAzZXdvcmspO1xcbi0tXFxuZnMvYWlvLmMtMTkxNy1cXHRcXHRcXHQgKiBhcyByZXEtXFx1MDAzZWhlYWQgaXMgTlVMTCdlZCBvdXQsIHRoZSByZXF1ZXN0IGNhbiBiZVxcbmZzL2Fpby5jOjE5MTg6XFx0XFx0XFx0ICogY29tcGxldGVkIGFuZCBmcmVlZCwgc2luY2UgYWlvX3BvbGxfY29tcGxldGVfd29yaygpXFxuZnMvYWlvLmMtMTkxOS1cXHRcXHRcXHQgKiB3aWxsIG5vIGxvbmdlciBuZWVkIHRvIHRha2UgdGhlIHdhaXRxdWV1ZSBsb2NrLlxcbi0tXFxuZnMvYWlvLmMtMTkyNi1cXG5mcy9haW8uYzoxOTI3OnN0cnVjdCBhaW9fcG9sbF90YWJsZSB7XFxuZnMvYWlvLmMtMTkyOC1cXHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3RcXHRwdDtcXG4tLVxcbmZzL2Fpby5jPTE5MzQ9c3RhdGljIHZvaWRcXG5mcy9haW8uYzoxOTM1OmFpb19wb2xsX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgKmhlYWQsXFxuZnMvYWlvLmMtMTkzNi1cXHRcXHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnApXFxuZnMvYWlvLmMtMTkzNy17XFxuZnMvYWlvLmM6MTkzODpcXHRzdHJ1Y3QgYWlvX3BvbGxfdGFibGUgKnB0ID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBhaW9fcG9sbF90YWJsZSwgcHQpO1xcbmZzL2Fpby5jLTE5MzktXFxuLS1cXG5mcy9haW8uYy0xOTUxLVxcbmZzL2Fpby5jOjE5NTI6c3RhdGljIGludCBhaW9fcG9sbChzdHJ1Y3QgYWlvX2tpb2NiICphaW9jYiwgY29uc3Qgc3RydWN0IGlvY2IgKmlvY2IpXFxuZnMvYWlvLmMtMTk1My17XFxuLS1cXG5mcy9haW8uYy0xOTU1LVxcdHN0cnVjdCBwb2xsX2lvY2IgKnJlcSA9IFxcdTAwMjZhaW9jYi1cXHUwMDNlcG9sbDtcXG5mcy9haW8uYzoxOTU2OlxcdHN0cnVjdCBhaW9fcG9sbF90YWJsZSBhcHQ7XFxuZnMvYWlvLmMtMTk1Ny1cXHRib29sIGNhbmNlbCA9IGZhbHNlO1xcbi0tXFxuZnMvYWlvLmMtMTk2Ni1cXG5mcy9haW8uYzoxOTY3OlxcdElOSVRfV09SSyhcXHUwMDI2cmVxLVxcdTAwM2V3b3JrLCBhaW9fcG9sbF9jb21wbGV0ZV93b3JrKTtcXG5mcy9haW8uYy0xOTY4LVxcdHJlcS1cXHUwMDNlZXZlbnRzID0gZGVtYW5nbGVfcG9sbChpb2NiLVxcdTAwM2VhaW9fYnVmKSB8IEVQT0xMRVJSIHwgRVBPTExIVVA7XFxuLS1cXG5mcy9haW8uYy0xOTc0LVxcbmZzL2Fpby5jOjE5NzU6XFx0YXB0LnB0Ll9xcHJvYyA9IGFpb19wb2xsX3F1ZXVlX3Byb2M7XFxuZnMvYWlvLmMtMTk3Ni1cXHRhcHQucHQuX2tleSA9IHJlcS1cXHUwMDNlZXZlbnRzO1xcbi0tXFxuZnMvYWlvLmMtMTk4Mi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cmVxLVxcdTAwM2V3YWl0LmVudHJ5KTtcXG5mcy9haW8uYzoxOTgzOlxcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXFx1MDAyNnJlcS1cXHUwMDNld2FpdCwgYWlvX3BvbGxfd2FrZSk7XFxuZnMvYWlvLmMtMTk4NC1cXG4tLVxcbmZzL2Fpby5jLTE5OTEtXFx0XFx0XFx0LypcXG5mcy9haW8uYzoxOTkyOlxcdFxcdFxcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXFxuZnMvYWlvLmMtMTk5My1cXHRcXHRcXHQgKiBjb21wbGV0aW9uIHdvcmssIG9yIGNvbXBsZXRlZCB0aGUgcmVxdWVzdCBpbmxpbmUuXFxuLS1cXG5mcy9haW8uYy0yMDExLVxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmFpb2NiLVxcdTAwM2VraV9saXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2VhY3RpdmVfcmVxcyk7XFxuZnMvYWlvLmM6MjAxMjpcXHRcXHRcXHRhaW9jYi1cXHUwMDNla2lfY2FuY2VsID0gYWlvX3BvbGxfY2FuY2VsO1xcbmZzL2Fpby5jLTIwMTMtXFx0XFx0fVxcbi0tXFxuZnMvYWlvLmM9MjAyNz1zdGF0aWMgaW50IF9faW9fc3VibWl0X29uZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLFxcbi0tXFxuZnMvYWlvLmMtMjA3My1cXHRjYXNlIElPQ0JfQ01EX1BPTEw6XFxuZnMvYWlvLmM6MjA3NDpcXHRcXHRyZXR1cm4gYWlvX3BvbGwocmVxLCBpb2NiKTtcXG5mcy9haW8uYy0yMDc1LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjI1LjMzMzI5Njc0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTI2NjAzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBSU8gQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgZm9yIGFzeW5jaHJvbm91cyBJL08gYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSBgYWlvX3BvbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgdGhlIHN0YXRpYyBgYWlvX3BvbGxgIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGJ5IGBfX2lvX3N1Ym1pdF9vbmVgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgaW9fc3VibWl0X29uZWAsIGFuZCBmaW5hbGx5IGBzeXNfaW9fc3VibWl0YC4gU2luY2UgYHN5c19pb19zdWJtaXRgIGlzIHRoZSBzeXN0ZW0gY2FsbCwgbXkgbWluZCB3ZW50IHN0cmFpZ2h0IHRvIGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGNsb3NlciB0byB0aGF0IGVudHJ5IHBvaW50LiBGdW5jdGlvbnMgc3VjaCBhcyBgaW9fc3VibWl0X29uZWAgb3IgYF9faW9fc3VibWl0X29uZWAgc2VlbWVkIGxpa2UgZ29vZCBwbGFjZXMgdG8gc3RhcnQsIGFzIGRvZXMgdGhlIGFpbyBwb2xsIGZ1bmN0aW9uLlxuXG5HaXZlbiB0aGF0LCBJJ3ZlIGRlY2lkZWQgdG8gaW5pdGlhbGx5IGZvY3VzIG9uIGBfX2lvX3N1Ym1pdF9vbmVgIGFuZCBgYWlvX3BvbGxgIGFzIHBvdGVudGlhbCBcIkZvY3VzU3ltYm9sc1wiLiBIb3dldmVyLCBhIHF1aWNrIHJlZnJlc2hlciBzaG93cyB0aGF0IGBhaW9fcG9sbGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYElPQ0JfQ01EX1BPTExgLCB3aGljaCBtYWtlcyBpdCBhIGNyaXRpY2FsIHBhcnQuXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCBgYWlvX3BvbGxgICppcyogc3RhdGljIHdoaWNoIHNpbXBsaWZpZXMgc29tZSBhbmFseXNpcy4gQWx0aG91Z2gsIGdpdmVuIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiwgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBtZSB3YW50IHRvIHZlcmlmeSBteSBhc3N1bXB0aW9uIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gQWgsIHllcywgYHN5c19pb19zdWJtaXRgIGlzIHRoZSBhY3R1YWwgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19zdWJtaXRfb25lYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDozMC4xODU5NTk5NzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mzk4NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3N1Ym1pdF9vbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MTk1Mj1zdGF0aWMgaW50IGFpb19wb2xsKHN0cnVjdCBhaW9fa2lvY2IgKmFpb2NiLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYilcXG4tLVxcbmZzL2Fpby5jLTIwMjYtXFxuZnMvYWlvLmM6MjAyNzpzdGF0aWMgaW50IF9faW9fc3VibWl0X29uZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLFxcbmZzL2Fpby5jLTIwMjgtXFx0XFx0XFx0ICAgc3RydWN0IGlvY2IgX191c2VyICp1c2VyX2lvY2IsIHN0cnVjdCBhaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmZzL2Fpby5jLTIwODAtXFxuZnMvYWlvLmM6MjA4MTpzdGF0aWMgaW50IGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYixcXG5mcy9haW8uYy0yMDgyLVxcdFxcdFxcdCBib29sIGNvbXBhdClcXG4tLVxcbmZzL2Fpby5jLTIxMTAtXFxuZnMvYWlvLmM6MjExMTpcXHRlcnIgPSBfX2lvX3N1Ym1pdF9vbmUoY3R4LCBcXHUwMDI2aW9jYiwgdXNlcl9pb2NiLCByZXEsIGNvbXBhdCk7XFxuZnMvYWlvLmMtMjExMi1cXG4tLVxcbmZzL2Fpby5jPTIxNDA9U1lTQ0FMTF9ERUZJTkUzKGlvX3N1Ym1pdCwgYWlvX2NvbnRleHRfdCwgY3R4X2lkLCBsb25nLCBucixcXG4tLVxcbmZzL2Fpby5jLTIxNjktXFxuZnMvYWlvLmM6MjE3MDpcXHRcXHRyZXQgPSBpb19zdWJtaXRfb25lKGN0eCwgdXNlcl9pb2NiLCBmYWxzZSk7XFxuZnMvYWlvLmMtMjE3MS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYWlvLmM9MjE4Mj1DT01QQVRfU1lTQ0FMTF9ERUZJTkUzKGlvX3N1Ym1pdCwgY29tcGF0X2Fpb19jb250ZXh0X3QsIGN0eF9pZCxcXG4tLVxcbmZzL2Fpby5jLTIyMTEtXFxuZnMvYWlvLmM6MjIxMjpcXHRcXHRyZXQgPSBpb19zdWJtaXRfb25lKGN0eCwgY29tcGF0X3B0cih1c2VyX2lvY2IpLCB0cnVlKTtcXG5mcy9haW8uYy0yMjEzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjMwLjIzMDM2NjA3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE2NTU0NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBpb19zdWJtaXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGlvX3N1Ym1pdF9vbmVgIGlzIHN0YXRpYy4gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZS4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBhZHZpc2VzIGFnYWluc3QgdXNpbmcgc3RhdGljLCBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMgaW4gZmF2b3Igb2Ygbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIEhtbS4uLiBpZiBgaW9fc3VibWl0X29uZWAgaXMgc3RhdGljLCB0aGF0IGltcGxpZXMgdGhlIHN5c3RlbSBjYWxsLCBgc3lzX2lvX3N1Ym1pdGAsIG1pZ2h0IGJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgb3B0aW9uIGF2YWlsYWJsZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuQWxyaWdodCwgYHN5c19pb19zdWJtaXRgIGlzIGluZGVlZCBhIHN5c2NhbGwuIEJ1dCwgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL2Fpby5jYCB0aGF0IGhhbmRsZSB0aGlzIHVuZGVybHlpbmcgZnVuY3Rpb25hbGl0eT8gSSBzaG91bGQgZG91YmxlLWNoZWNrIGBmcy9haW8uY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIHRoYXQgYXJlbid0IHN0YXRpYy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjcsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MzQuOTQ2OTI0MDYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0NjU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MjI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGFpb19pbm9kZV9pbmZvICpBSU9fSShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvYWlvLmMtMjMyLS8qLS0tLS0tIHN5c2N0bCB2YXJpYWJsZXMtLS0tKi9cXG5mcy9haW8uYzoyMzM6c3RhdGljIERFRklORV9TUElOTE9DSyhhaW9fbnJfbG9jayk7XFxuZnMvYWlvLmMtMjM0LXN0YXRpYyB1bnNpZ25lZCBsb25nIGFpb19ucjtcXHRcXHQvKiBjdXJyZW50IHN5c3RlbSB3aWRlIG51bWJlciBvZiBhaW8gcmVxdWVzdHMgKi9cXG4tLVxcbmZzL2Fpby5jPTUzNj1zdGF0aWMgaW50IGFpb19zZXR1cF9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yX2V2ZW50cylcXG4tLVxcbmZzL2Fpby5jLTYzNi1cXG5mcy9haW8uYzo2Mzc6dm9pZCBraW9jYl9zZXRfY2FuY2VsX2ZuKHN0cnVjdCBraW9jYiAqaW9jYiwga2lvY2JfY2FuY2VsX2ZuICpjYW5jZWwpXFxuZnMvYWlvLmMtNjM4LXtcXG4tLVxcbmZzL2Fpby5jPTkwMT1zdGF0aWMgaW50IGtpbGxfaW9jdHgoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBraW9jdHggKmN0eCxcXG4tLVxcbmZzL2Fpby5jLTk0NC0gKi9cXG5mcy9haW8uYzo5NDU6dm9pZCBleGl0X2FpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5mcy9haW8uYy05NDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDozNC45OTI1NzU0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDEwNTMwOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBTZWxlY3RpbmcgQUlPIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIGBraW9jYl9zZXRfY2FuY2VsX2ZuYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IEknbSBsb29raW5nIGF0IHRoZSBzeXNjYWxsLCBgc3lzX2lvX3N1Ym1pdGAsIGRlZmluZWQgdGhyb3VnaCB0aGUgYFNZU0NBTExfREVGSU5FM2AgbWFjcm8uIFRoYXQgbWVhbnMgdGhlIHJlYWwgZnVuY3Rpb24gaXMgZWl0aGVyIGBfX3g2NF9zeXNfaW9fc3VibWl0YCBvciBqdXN0IGBzeXNfaW9fc3VibWl0YC4gIFRoZW4gSSBsb29rZWQgYXQgYGFpb19wb2xsYCB3aGljaCBpcyBzdGF0aWMgYnV0IGl0J3MgYSBsYXJnZSBmdW5jdGlvbiwgc28gaXQncyBub3QgYmVpbmcgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuXG5cblRoZW4sIHRoZXJlIGlzIGBhaW9fcG9sbF93YWtlYC4gSXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5ICppc24ndCogaW5saW5lZC4gT2theSwgc28gdGhhdCBnaXZlcyBtZSBhbiBpZGVhLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzYXlpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBTaW5jZSBgYWlvX3BvbGxfd2FrZWAgaGFzIGEgZGlzdGluY3QgYWRkcmVzcyBiZWNhdXNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgZnVsZmlsbHMgdGhhdCByZXF1aXJlbWVudC4gU28sIEkgd2lsbCBqdXN0IGluY2x1ZGUgYm90aCBgYWlvX3BvbGxgIGFuZCBgYWlvX3BvbGxfd2FrZWAuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGUgb25seSBvbmUgdGhhdCBsb29rcyByZWxldmFudCBpcyBgQUlPYCwgYnV0IEkgc2hvdWxkIGNoZWNrIGBFUE9MTGAganVzdCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBBSU9gIGlzIGVub3VnaCB0byBlbmFibGUgYGZzL2Fpby5jYCwgdGhvdWdoLiBJIHdpbGwgY2hlY2sgdGhlIGBBSU9gIGNvbmZpZyBpbiBgaW5pdC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6NDEuMDAzMTA5MDgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk4Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUlPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTg5OT1jb25maWcgU0hNRU1cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTA5LVxcbmluaXQvS2NvbmZpZzoxOTEwOmNvbmZpZyBBSU9cXG5pbml0L0tjb25maWctMTkxMS1cXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo0MS4wNDcwOTkxMDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MTM4MTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHNpdHVhdGlvbjpcblxuKipDb25maWd1cmF0aW9uIENoZWNrIGFuZCBTaWduYWwgUGVybWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgQUlPYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgd2UncmUgdXNpbmcsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gbWFrZSBzdXJlLCBpdCBpcyB0aGUgb25lLiBOb3csIGxldCdzIG1vdmUgb24gYW5kIHF1aWNrbHkgdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWRgLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyBpdCBsaWtlbHkgaW1wYWN0cyBob3cgd2UgaGFuZGxlIHNpZ25hbHMgcmVsYXRlZCB0byBldmVudCBmaWxlIGRlc2NyaXB0b3JzLiBHb3R0YSBtYWtlIHN1cmUgdGhhdCdzIHNldCBhcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCBzZXR0aW5nIGlzIGFsbG93ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo0My45MDg0ODI3MjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzA4NTQxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZlbnRmZF9zaWduYWxfYWxsb3dlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYz01NzM9c3RhdGljIHZvaWQgdmR1c2VfdmRwYV9raWNrX3ZxKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IGlkeClcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmMtNTc3LVxcbmRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmM6NTc4OlxcdGlmICghZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XFxuZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYy01NzktXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dnEtXFx1MDAzZWtpY2spO1xcbi0tXFxuZnMvZXZlbnRmZC5jPTU2PXZvaWQgZXZlbnRmZF9zaWduYWxfbWFzayhzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCwgX19wb2xsX3QgbWFzaylcXG4tLVxcbmZzL2V2ZW50ZmQuYy02My1cXHQgKiBuZXN0ZWQgd2FpdHF1ZXVlcyB3aXRoIGN1c3RvbSB3YWtldXAgaGFuZGxlcnMsIHRoZW4gaXQgc2hvdWxkXFxuZnMvZXZlbnRmZC5jOjY0OlxcdCAqIGNoZWNrIGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJZlxcbmZzL2V2ZW50ZmQuYy02NS1cXHQgKiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZXZlbnRmZF9zaWduYWwoKSBjYWxsIHNob3VsZCBiZSBkZWZlcnJlZCB0byBhXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaD00MT12b2lkIGV2ZW50ZmRfY3R4X2RvX3JlYWQoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgsIF9fdTY0ICpjbnQpO1xcbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oLTQyLVxcbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oOjQzOnN0YXRpYyBpbmxpbmUgYm9vbCBldmVudGZkX3NpZ25hbF9hbGxvd2VkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9ldmVudGZkLmgtNDQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudGZkLmg9Njk9c3RhdGljIGlubGluZSBpbnQgZXZlbnRmZF9jdHhfcmVtb3ZlX3dhaXRfcXVldWUoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaC03NC1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaDo3NTpzdGF0aWMgaW5saW5lIGJvb2wgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oLTc2LXtcXG4tLVxcbmlvX3VyaW5nL2V2ZW50ZmQuYz01ND1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXFxuaW9fdXJpbmcvZXZlbnRmZC5jLTU1LXtcXG5pb191cmluZy9ldmVudGZkLmM6NTY6XFx0aWYgKGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xcbmlvX3VyaW5nL2V2ZW50ZmQuYy01Ny1cXHRcXHRldmVudGZkX3NpZ25hbF9tYXNrKGV2X2ZkLVxcdTAwM2VjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjQ1Ljc3OTM0MTc3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ1MDYzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGFzeW5jaHJvbm91cyBJL08gKEFJTykgcG9sbGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlbW92aW5nIHRoZSBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYCBjaGVjayB3aXRoaW4gYGFpb19wb2xsX3dha2VgIGFuZCwgYnkgZG9pbmcgc28sIGRlbGF5aW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zLiBUaGF0J3MgYSBkZWZpbml0ZSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEFJTy4gVGhpcyBjaGFuZ2Ugd2FycmFudHMgc2VyaW91cyBhdHRlbnRpb24gYW5kIHRob3JvdWdoIGZ1enppbmcuXG5cbk15IGZvY3VzIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGFpb19wb2xsX3dha2VgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYWlvX3BvbGxgLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBmcy9haW8uY2AgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFRoZSBgQUlPYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLCBzbyBJIGtub3cgdGhpcyBpcyBhIGZlYXR1cmUgYWN0aXZlbHkgaW4gdXNlLiBUaGlzIHJlbW92YWwgb2YgdGhlIGNoZWNrIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZXhwbG9pdGF0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBzcGVuZCBzb21lIGZvY3VzZWQgdGltZSBvbi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6NTAuMjI0NDA4MDk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM0NDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaW9fcG9sbF93YWtlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fpby5jPTE4MjM9c3RhdGljIGludCBhaW9fcG9sbF9jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiKVxcbi0tXFxuZnMvYWlvLmMtMTgzOS1cXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXFxuZnMvYWlvLmMtMTg0MS1cXHRcXHR2b2lkICprZXkpXFxuLS1cXG5mcy9haW8uYz0xOTUyPXN0YXRpYyBpbnQgYWlvX3BvbGwoc3RydWN0IGFpb19raW9jYiAqYWlvY2IsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiKVxcbi0tXFxuZnMvYWlvLmMtMTk4Mi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cmVxLVxcdTAwM2V3YWl0LmVudHJ5KTtcXG5mcy9haW8uYzoxOTgzOlxcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXFx1MDAyNnJlcS1cXHUwMDNld2FpdCwgYWlvX3BvbGxfd2FrZSk7XFxuZnMvYWlvLmMtMTk4NC1cXG4tLVxcbmZzL2Fpby5jLTE5OTEtXFx0XFx0XFx0LypcXG5mcy9haW8uYzoxOTkyOlxcdFxcdFxcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXFxuZnMvYWlvLmMtMTk5My1cXHRcXHRcXHQgKiBjb21wbGV0aW9uIHdvcmssIG9yIGNvbXBsZXRlZCB0aGUgcmVxdWVzdCBpbmxpbmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjUwLjI2ODc2MDI4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIyMjcyODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3ludGhlc2l6ZSB0aGVzZSB0aG91Z2h0cyBpbnRvIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5LiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBpdDpcblxuKipNeSBQZXJzcGVjdGl2ZTogRGVsaXZlcmluZyB0aGUgT3V0Y29tZSoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBJJ20gZm9jdXNpbmcgb24gdGhlIGVuZCByZXN1bHQuIEV2ZXJ5dGhpbmcgbGVhZGluZyB1cCB0byB0aGlzIHBvaW50LCB0aGUgYW5hbHlzaXMsIHRoZSBleHBlcmltZW50YXRpb24sIHRoZSBjb25zaWRlcmF0aW9ucyDigJMgYWxsIG9mIGl0IGN1bG1pbmF0ZXMgaW4gdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0cy4gVGhpcyBpc24ndCBhIG5lYnVsb3VzIGdvYWw7IGl0J3MgYSBjb21taXRtZW50LiBNeSBlbnRpcmUgcHJvY2VzcywgbXkgZXhwZXJ0aXNlLCBteSBhYmlsaXR5IHRvIGludGVycHJldCBhbmQgdHJhbnNsYXRlIGNvbXBsZXggZGF0YSBvciBpZGVhcywgaGFzIHJlYWNoZWQgdGhlIHBvaW50IG9mIGN1bG1pbmF0aW9uLiBNeSBwcmlvcml0eSBpcyB0byBjb21tdW5pY2F0ZSBjbGVhcmx5IGFuZCBlZmZlY3RpdmVseSB0aGUgcHJvZHVjdCBvZiBteSB3b3JrLiBUaGUgcmVzdWx0cyAqYXJlKiB0aGUgZm9jdXMuIEknbSBkZWxpdmVyaW5nIHRoZSBnb29kcy4gTm8gbW9yZSwgbm8gbGVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NCwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjU0Ljg5MTAzNjU5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTgwOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhaW9fcG9sbF93YWtlXCIsXG4gICAgXCJhaW9fcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBSU8gcG9sbGluZyBsb2dpYyBpbiBgYWlvX3BvbGxfd2FrZWAgYnkgdW5jb25kaXRpb25hbGx5IGRlZmVycmluZyBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyB0byBhIHdvcmtxdWV1ZSwgaW5zdGVhZCBvZiBjaGVja2luZyBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChBSU8pIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUlPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWlvX3BvbGxfd2FrZVwiLFxuICAgIFwiYWlvX3BvbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUlPIHBvbGxpbmcgbG9naWMgaW4gYGFpb19wb2xsX3dha2VgIGJ5IHVuY29uZGl0aW9uYWxseSBkZWZlcnJpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgdG8gYSB3b3JrcXVldWUsIGluc3RlYWQgb2YgY2hlY2tpbmcgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQUlPKSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo1NC45NjIyMjMxODZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDY5NTU0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo1NC45NjI3MDU5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTkwNjQ2ODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZGVmZXJyaW5nIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgaW4gYGFpb19wb2xsX3dha2VgIHRvIGF2b2lkIGRlYWRsb2NrcyBjYXVzZWQgYnkgdGFraW5nIHRoZSBzYW1lIHdhaXRxdWV1ZSBsb2NrIGFnYWluIHRocm91Z2ggZXBvbGwuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvZGVhZGxvY2sgaXNzdWUsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiYzc5NTUzMDg2NmQwNmRkNThiNGVmOWU5OWE0MmEzYTBhYTY1NzBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTQ6NTQ6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXG5pbmRleCBmNTdmYTIxYTI1MDM1Li5lZjgwMTc4MWRhMDhjIDEwMDY0NFxuLS0tIGEvZnMvYWlvLmNcbisrKyBiL2ZzL2Fpby5jXG5AQCAtMTg2OSw3ICsxODY5LDEyIEBAIHN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuIFx0XHRsaXN0X2RlbChcdTAwMjZpb2NiLVx1MDAzZWtpX2xpc3QpO1xuIFx0XHRpb2NiLVx1MDAzZWtpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTtcbi1cdFx0aWYgKGlvY2ItXHUwMDNla2lfZXZlbnRmZCBcdTAwMjZcdTAwMjYgIWV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBXZSBob2xkIGFuIGFyYml0cmFyeSBwcm92aWRlciB3YWl0cXVldWUgbG9jayBoZXJlLiAgU2lnbmFsaW5nIGFcbitcdFx0ICogcmVzdWx0IGV2ZW50ZmQgY2FuIGZlZWQgYmFjayB0aHJvdWdoIGVwb2xsIGFuZCB0cnkgdG8gdGFrZSB0aGUgc2FtZVxuK1x0XHQgKiBsb2NrIGFnYWluLiAgRGVmZXIgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoaW9jYi1cdTAwM2VraV9ldmVudGZkKSB7XG4gXHRcdFx0aW9jYiA9IE5VTEw7XG4gXHRcdFx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XG4gXHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZyZXEtXHUwMDNld29yayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo1NC45NjI3MDY2NzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkwNjQ0MDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQUlPIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWlvX3BvbGxfd2FrZWAgaW4gYGZzL2Fpby5jYC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBjaGFuZ2UgaXMgcmVtb3ZpbmcgdGhlIGAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYCBjaGVjaywgd2hpY2ggY2hhbmdlcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIGV2ZW50ZmQgc2lnbmFsaW5nIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGludm9sdmluZyB3YWl0cXVldWUgbG9ja3MuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgbWVudGlvbnMgYSBzaXR1YXRpb24gd2hlcmUgc2lnbmFsaW5nIGEgcmVzdWx0IGV2ZW50ZmQgY2FuIGxlYWQgdG8gcmUtYWNxdWlyaW5nIHRoZSBzYW1lIGxvY2sgdGhyb3VnaCBgZXBvbGxgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0IGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgaW4gdGhlIGBhaW9fcG9sbF93YWtlYCBmdW5jdGlvbiBpdHNlbGYuIFdpdGhpbiB0aGUgc3BpbmxvY2stcHJvdGVjdGVkIHNlY3Rpb24sIGlmIGBpb2NiLVx1MDAzZWtpX2V2ZW50ZmRgIGlzIHNldCwgYSB3b3JrIGl0ZW0gaXMgc2NoZWR1bGVkIHVzaW5nIGBzY2hlZHVsZV93b3JrYC4gVGhpcyBpcyBkb25lICppbnN0ZWFkKiBvZiBkaXJlY3RseSBjb21wbGV0aW5nIHRoZSBBSU8gb3BlcmF0aW9uLiBUaGUgY29tbWVudGVkIHRleHQgcmVpbmZvcmNlcyB0aGF0IHRoaXMgaXMgYSBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ3k6IGBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9uc2AuXG5cblRoaXMgc2VlbXMgbGlrZSBhIGNsYXNzaWMgbG9ja2luZyBpc3N1ZS4gVGhlIGNvZGUgaXMgY2FyZWZ1bGx5IGRlZmVycmluZyB0aGUgY29tcGxldGlvbiB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBldmVudGZkIHNpZ25hbCBwYXRoIG1pZ2h0IHRyeSB0byBhY3F1aXJlIGEgbG9jayB0aGF0J3MgYWxyZWFkeSBoZWxkLCByZXN1bHRpbmcgaW4gYSBkZWFkbG9jay4gTE9DS0RFUCB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoaXMgdHlwZSBvZiBpc3N1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LCBzbyBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGEgY2xlYW4sIGRlYWRsb2NrLXByZXZlbnRpb24gbWVhc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NTowNC44NjkxNTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyBpbiBgYWlvX3BvbGxfd2FrZWAgdG8gYXZvaWQgZGVhZGxvY2tzIGNhdXNlZCBieSB0YWtpbmcgdGhlIHNhbWUgd2FpdHF1ZXVlIGxvY2sgYWdhaW4gdGhyb3VnaCBlcG9sbC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9kZWFkbG9jayBpc3N1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRlZmVycmluZyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIGluIGBhaW9fcG9sbF93YWtlYCB0byBhdm9pZCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHRha2luZyB0aGUgc2FtZSB3YWl0cXVldWUgbG9jayBhZ2FpbiB0aHJvdWdoIGVwb2xsLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL2RlYWRsb2NrIGlzc3VlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 14:36:49 +0000 UTC FinishedAt: 2026-08-13 14:55:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6e0d7a4a76b333aadafbea7f1826e905f0765a42", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6e0d7a4a76b333aadafbea7f1826e905f0765a42", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AIO" ], "series_id": "f0baef03-4a00-4945-a036-2f185256bb69" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "aio_poll_wake", "aio_poll" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fpb19wb2xsX3dha2UmIzM0OywKICAgICYjMzQ7YWlvX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyBpbiBgYWlvX3BvbGxfd2FrZWAgdG8gYXZvaWQgZGVhZGxvY2tzIGNhdXNlZCBieSB0YWtpbmcgdGhlIHNhbWUgd2FpdHF1ZXVlIGxvY2sgYWdhaW4gdGhyb3VnaCBlcG9sbC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9kZWFkbG9jayBpc3N1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUlPIHBvbGxpbmcgbG9naWMgaW4gYGFpb19wb2xsX3dha2VgIGJ5IHVuY29uZGl0aW9uYWxseSBkZWZlcnJpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgdG8gYSB3b3JrcXVldWUsIGluc3RlYWQgb2YgY2hlY2tpbmcgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQUlPKSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmM3OTU1MzA4NjZkMDZkZDU4YjRlZjllOTlhNDJhM2EwYWE2NTcwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjU0OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUuLmVmODAxNzgxZGEwOGMgMTAwNjQ0XG4tLS0gYS9mcy9haW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmNcbkBAIC0xODY5LDcgJiM0MzsxODY5LDEyIEBAIHN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuIFx0XHRsaXN0X2RlbChcdTAwMjZpb2NiLVx1MDAzZWtpX2xpc3QpO1xuIFx0XHRpb2NiLVx1MDAzZWtpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTtcbi1cdFx0aWYgKGlvY2ItXHUwMDNla2lfZXZlbnRmZCBcdTAwMjZcdTAwMjYgIWV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFdlIGhvbGQgYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGhlcmUuICBTaWduYWxpbmcgYVxuJiM0MztcdFx0ICogcmVzdWx0IGV2ZW50ZmQgY2FuIGZlZWQgYmFjayB0aHJvdWdoIGVwb2xsIGFuZCB0cnkgdG8gdGFrZSB0aGUgc2FtZVxuJiM0MztcdFx0ICogbG9jayBhZ2Fpbi4gIERlZmVyIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoaW9jYi1cdTAwM2VraV9ldmVudGZkKSB7XG4gXHRcdFx0aW9jYiA9IE5VTEw7XG4gXHRcdFx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XG4gXHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZyZXEtXHUwMDNld29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fpb19wb2xsX3dha2UmIzM0OywKICAgICYjMzQ7YWlvX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFJTyBwb2xsaW5nIGxvZ2ljIGluIGBhaW9fcG9sbF93YWtlYCBieSB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyaW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIHRvIGEgd29ya3F1ZXVlLCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEFJTykgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjNzk1NTMwODY2ZDA2ZGQ1OGI0ZWY5ZTk5YTQyYTNhMGFhNjU3MGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDo1NDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZjU3ZmEyMWEyNTAzNS4uZWY4MDE3ODFkYTA4YyAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmMKQEAgLTE4NjksNyAmIzQzOzE4NjksMTIgQEAgc3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO3JlcS0mZ3Q7d2FpdC5lbnRyeSk7CiAJCWxpc3RfZGVsKCZhbXA7aW9jYi0mZ3Q7a2lfbGlzdCk7CiAJCWlvY2ItJmd0O2tpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTsKLQkJaWYgKGlvY2ItJmd0O2tpX2V2ZW50ZmQgJmFtcDsmYW1wOyAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgaG9sZCBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaGVyZS4gIFNpZ25hbGluZyBhCiYjNDM7CQkgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lCiYjNDM7CQkgKiBsb2NrIGFnYWluLiAgRGVmZXIgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChpb2NiLSZndDtraV9ldmVudGZkKSB7CiAJCQlpb2NiID0gTlVMTDsKIAkJCUlOSVRfV09SSygmYW1wO3JlcS0mZ3Q7d29yaywgYWlvX3BvbGxfcHV0X3dvcmspOwogCQkJc2NoZWR1bGVfd29yaygmYW1wO3JlcS0mZ3Q7d29yayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgZnMvYWlvLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYWlvX3BvbGxfd2FrZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGhvdyBpdCBoYW5kbGVzIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIHdpdGggYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAgdG8gZGV0ZXJtaW5lIGlmIGFuIGV2ZW50ZmQgc2lnbmFsIHdhcyBhbGxvd2VkLCBidXQgbm93IGl0JiMzOTtzIGJlaW5nIHJlbW92ZWQuIFNvIG5vdyBhbGwgZXZlbnRmZC1iYWNrZWQgY29tcGxldGlvbnMgYXJlIGRlZmVycmVkIHRvIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBSU8gcG9sbGluZyBjb3JlIGxvZ2ljLgoKSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBgYWlvX3BvbGxfd2FrZWAgZnVuY3Rpb24gaXMgdGhlIHdha2UtdXAgY2FsbGJhY2sgZm9yIEFJTyBwb2xsIHJlcXVlc3RzLiBHaXZlbiB0aGlzLCBpdCBzZWVtcyBoaWdobHkgcHJvYmFibGUgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gZGlnIGludG8gYGZzL2Fpby5jYCBhbmQgc3BlY2lmaWNhbGx5IGBhaW9fcG9sbF93YWtlYCwgYW5kIEkmIzM5O20gbWFya2luZyB0aGlzIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgYGFpb19wb2xsX3dha2VgLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgQUlPYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbiwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg5OT1jb25maWcgU0hNRU1cbi0tXG5pbml0L0tjb25maWctMTkwOS1cbmluaXQvS2NvbmZpZzoxOTEwOmNvbmZpZyBBSU9cbmluaXQvS2NvbmZpZy0xOTExLVx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYEFJT2AgaXMgdGhlIGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBHb29kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBgYWlvX3BvbGxfd2FrZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSB3YXkgdGhpcyBwaWVjZSBvZiBjb2RlIHdpbGwgYmVoYXZlLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBvciBtdWx0aS1wcm9jZXNzIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIHZhcmlhYmxlIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlvX3BvbGxfd2FrZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTE4MjM9c3RhdGljIGludCBhaW9fcG9sbF9jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiKVxuLS1cbmZzL2Fpby5jLTE4MzktXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG5mcy9haW8uYy0xODQxLVx0XHR2b2lkICprZXkpXG4tLVxuZnMvYWlvLmM9MTk1Mj1zdGF0aWMgaW50IGFpb19wb2xsKHN0cnVjdCBhaW9fa2lvY2IgKmFpb2NiLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYilcbi0tXG5mcy9haW8uYy0xOTgyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuZnMvYWlvLmM6MTk4MzpcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXHUwMDI2cmVxLVx1MDAzZXdhaXQsIGFpb19wb2xsX3dha2UpO1xuZnMvYWlvLmMtMTk4NC1cbi0tXG5mcy9haW8uYy0xOTkxLVx0XHRcdC8qXG5mcy9haW8uYzoxOTkyOlx0XHRcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXG5mcy9haW8uYy0xOTkzLVx0XHRcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFpb19wb2xsX3dha2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBhaW9fcG9sbF93YWtlYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaW4gYGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnlgLiBDYWxsYmFjayBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBjYWxsZWQgaW5kaXJlY3RseSwgcmlnaHQ/IFRoZXkmIzM5O3JlIGRpc3RpbmN0LCBzZXBhcmF0ZSBmdW5jdGlvbnMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzIGNvcnJlY3QsIGJ1dCBzb21ldGhpbmcgYWJvdXQgdGhhdCBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LgoKV2FpdCBhIHNlY29uZCwgdGhlIGNvZGluZyBndWlkZWxpbmVzIGVtcGhhc2l6ZSAqbm9uLXN0YXRpYywgbm9uLWlubGluZWQqIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCB3aGljaCBhcmUgaW5saW5lZC4gQnV0IGBhaW9fcG9sbF93YWtlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyBpdCYjMzk7cyAqbm90KiBnb2luZyB0byBiZSBpbmxpbmVkLCBpcyBpdD8gU28sIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3Mgc3RhdGljIGlzIHBvdGVudGlhbGx5IHRoZSBpc3N1ZS4gTm93LCB3aGF0JiMzOTtzIHRoZSBhY3R1YWwgQVBJIGVudHJ5cG9pbnQgaW4gdGhpcyBjb250ZXh0PyBBaCwgdGhhdCB3b3VsZCBiZSBlaXRoZXIgYGFpb19wb2xsYCBvciBwb3RlbnRpYWxseSBgaW9fc3VibWl0YCwgc2luY2UgdGhleSBjYWxsIGBhaW9fcG9sbGAuIExldCYjMzk7cyBkaWcgaW50byBgYWlvX3BvbGxgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpb19wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWlvLmM9MTcwND1zdGF0aWMgaW50IGFpb19mc3luYyhzdHJ1Y3QgZnN5bmNfaW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYixcbi0tXG5mcy9haW8uYy0xNzIzLVxuZnMvYWlvLmM6MTcyNDpzdGF0aWMgdm9pZCBhaW9fcG9sbF9wdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5mcy9haW8uYy0xNzI1LXtcbi0tXG5mcy9haW8uYz0xNzcxPXN0YXRpYyB2b2lkIHBvbGxfaW9jYl91bmxvY2tfd3Eoc3RydWN0IHBvbGxfaW9jYiAqcmVxKVxuLS1cbmZzL2Fpby5jLTE3NzYtXG5mcy9haW8uYzoxNzc3OnN0YXRpYyB2b2lkIGFpb19wb2xsX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvYWlvLmMtMTc3OC17XG4tLVxuZnMvYWlvLmMtMTgyMi0vKiBhc3N1bWVzIHdlIGFyZSBjYWxsZWQgd2l0aCBpcnFzIGRpc2FibGVkICovXG5mcy9haW8uYzoxODIzOnN0YXRpYyBpbnQgYWlvX3BvbGxfY2FuY2VsKHN0cnVjdCBraW9jYiAqaW9jYilcbmZzL2Fpby5jLTE4MjQte1xuLS1cbmZzL2Fpby5jLTE4MzktXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG5mcy9haW8uYy0xODQxLVx0XHR2b2lkICprZXkpXG4tLVxuZnMvYWlvLmMtMTg3OC1cdFx0XHRpb2NiID0gTlVMTDtcbmZzL2Fpby5jOjE4Nzk6XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XG5mcy9haW8uYy0xODgwLVx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmVxLVx1MDAzZXdvcmspO1xuLS1cbmZzL2Fpby5jLTE5MTctXHRcdFx0ICogYXMgcmVxLVx1MDAzZWhlYWQgaXMgTlVMTCYjMzk7ZWQgb3V0LCB0aGUgcmVxdWVzdCBjYW4gYmVcbmZzL2Fpby5jOjE5MTg6XHRcdFx0ICogY29tcGxldGVkIGFuZCBmcmVlZCwgc2luY2UgYWlvX3BvbGxfY29tcGxldGVfd29yaygpXG5mcy9haW8uYy0xOTE5LVx0XHRcdCAqIHdpbGwgbm8gbG9uZ2VyIG5lZWQgdG8gdGFrZSB0aGUgd2FpdHF1ZXVlIGxvY2suXG4tLVxuZnMvYWlvLmMtMTkyNi1cbmZzL2Fpby5jOjE5Mjc6c3RydWN0IGFpb19wb2xsX3RhYmxlIHtcbmZzL2Fpby5jLTE5MjgtXHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3RcdHB0O1xuLS1cbmZzL2Fpby5jPTE5MzQ9c3RhdGljIHZvaWRcbmZzL2Fpby5jOjE5MzU6YWlvX3BvbGxfcXVldWVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHdhaXRfcXVldWVfaGVhZCAqaGVhZCxcbmZzL2Fpby5jLTE5MzYtXHRcdHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcClcbmZzL2Fpby5jLTE5Mzcte1xuZnMvYWlvLmM6MTkzODpcdHN0cnVjdCBhaW9fcG9sbF90YWJsZSAqcHQgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGFpb19wb2xsX3RhYmxlLCBwdCk7XG5mcy9haW8uYy0xOTM5LVxuLS1cbmZzL2Fpby5jLTE5NTEtXG5mcy9haW8uYzoxOTUyOnN0YXRpYyBpbnQgYWlvX3BvbGwoc3RydWN0IGFpb19raW9jYiAqYWlvY2IsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiKVxuZnMvYWlvLmMtMTk1My17XG4tLVxuZnMvYWlvLmMtMTk1NS1cdHN0cnVjdCBwb2xsX2lvY2IgKnJlcSA9IFx1MDAyNmFpb2NiLVx1MDAzZXBvbGw7XG5mcy9haW8uYzoxOTU2Olx0c3RydWN0IGFpb19wb2xsX3RhYmxlIGFwdDtcbmZzL2Fpby5jLTE5NTctXHRib29sIGNhbmNlbCA9IGZhbHNlO1xuLS1cbmZzL2Fpby5jLTE5NjYtXG5mcy9haW8uYzoxOTY3Olx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9jb21wbGV0ZV93b3JrKTtcbmZzL2Fpby5jLTE5NjgtXHRyZXEtXHUwMDNlZXZlbnRzID0gZGVtYW5nbGVfcG9sbChpb2NiLVx1MDAzZWFpb19idWYpIHwgRVBPTExFUlIgfCBFUE9MTEhVUDtcbi0tXG5mcy9haW8uYy0xOTc0LVxuZnMvYWlvLmM6MTk3NTpcdGFwdC5wdC5fcXByb2MgPSBhaW9fcG9sbF9xdWV1ZV9wcm9jO1xuZnMvYWlvLmMtMTk3Ni1cdGFwdC5wdC5fa2V5ID0gcmVxLVx1MDAzZWV2ZW50cztcbi0tXG5mcy9haW8uYy0xOTgyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuZnMvYWlvLmM6MTk4MzpcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXHUwMDI2cmVxLVx1MDAzZXdhaXQsIGFpb19wb2xsX3dha2UpO1xuZnMvYWlvLmMtMTk4NC1cbi0tXG5mcy9haW8uYy0xOTkxLVx0XHRcdC8qXG5mcy9haW8uYzoxOTkyOlx0XHRcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXG5mcy9haW8uYy0xOTkzLVx0XHRcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cbi0tXG5mcy9haW8uYy0yMDExLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YWlvY2ItXHUwMDNla2lfbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZWFjdGl2ZV9yZXFzKTtcbmZzL2Fpby5jOjIwMTI6XHRcdFx0YWlvY2ItXHUwMDNla2lfY2FuY2VsID0gYWlvX3BvbGxfY2FuY2VsO1xuZnMvYWlvLmMtMjAxMy1cdFx0fVxuLS1cbmZzL2Fpby5jPTIwMjc9c3RhdGljIGludCBfX2lvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYixcbi0tXG5mcy9haW8uYy0yMDczLVx0Y2FzZSBJT0NCX0NNRF9QT0xMOlxuZnMvYWlvLmM6MjA3NDpcdFx0cmV0dXJuIGFpb19wb2xsKHJlcSwgaW9jYik7XG5mcy9haW8uYy0yMDc1LVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUlPIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgZm9yIGFzeW5jaHJvbm91cyBJL08gYW5kIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgYGFpb19wb2xsYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIHRoZSBzdGF0aWMgYGFpb19wb2xsYCBiZWNhdXNlIGl0IGlzIGNhbGxlZCBieSBgX19pb19zdWJtaXRfb25lYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYGlvX3N1Ym1pdF9vbmVgLCBhbmQgZmluYWxseSBgc3lzX2lvX3N1Ym1pdGAuIFNpbmNlIGBzeXNfaW9fc3VibWl0YCBpcyB0aGUgc3lzdGVtIGNhbGwsIG15IG1pbmQgd2VudCBzdHJhaWdodCB0byBleGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyBjbG9zZXIgdG8gdGhhdCBlbnRyeSBwb2ludC4gRnVuY3Rpb25zIHN1Y2ggYXMgYGlvX3N1Ym1pdF9vbmVgIG9yIGBfX2lvX3N1Ym1pdF9vbmVgIHNlZW1lZCBsaWtlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcyBkb2VzIHRoZSBhaW8gcG9sbCBmdW5jdGlvbi4KCkdpdmVuIHRoYXQsIEkmIzM5O3ZlIGRlY2lkZWQgdG8gaW5pdGlhbGx5IGZvY3VzIG9uIGBfX2lvX3N1Ym1pdF9vbmVgIGFuZCBgYWlvX3BvbGxgIGFzIHBvdGVudGlhbCAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7LiBIb3dldmVyLCBhIHF1aWNrIHJlZnJlc2hlciBzaG93cyB0aGF0IGBhaW9fcG9sbGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYElPQ0JfQ01EX1BPTExgLCB3aGljaCBtYWtlcyBpdCBhIGNyaXRpY2FsIHBhcnQuCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgYGFpb19wb2xsYCAqaXMqIHN0YXRpYyB3aGljaCBzaW1wbGlmaWVzIHNvbWUgYW5hbHlzaXMuIEFsdGhvdWdoLCBnaXZlbiB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24sIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBpbmxpbmVkLiBUaGlzIG1ha2VzIG1lIHdhbnQgdG8gdmVyaWZ5IG15IGFzc3VtcHRpb24gYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gQWgsIHllcywgYHN5c19pb19zdWJtaXRgIGlzIHRoZSBhY3R1YWwgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19zdWJtaXRfb25lYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fc3VibWl0X29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTE5NTI9c3RhdGljIGludCBhaW9fcG9sbChzdHJ1Y3QgYWlvX2tpb2NiICphaW9jYiwgY29uc3Qgc3RydWN0IGlvY2IgKmlvY2IpXG4tLVxuZnMvYWlvLmMtMjAyNi1cbmZzL2Fpby5jOjIwMjc6c3RhdGljIGludCBfX2lvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYixcbmZzL2Fpby5jLTIwMjgtXHRcdFx0ICAgc3RydWN0IGlvY2IgX191c2VyICp1c2VyX2lvY2IsIHN0cnVjdCBhaW9fa2lvY2IgKnJlcSxcbi0tXG5mcy9haW8uYy0yMDgwLVxuZnMvYWlvLmM6MjA4MTpzdGF0aWMgaW50IGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYixcbmZzL2Fpby5jLTIwODItXHRcdFx0IGJvb2wgY29tcGF0KVxuLS1cbmZzL2Fpby5jLTIxMTAtXG5mcy9haW8uYzoyMTExOlx0ZXJyID0gX19pb19zdWJtaXRfb25lKGN0eCwgXHUwMDI2aW9jYiwgdXNlcl9pb2NiLCByZXEsIGNvbXBhdCk7XG5mcy9haW8uYy0yMTEyLVxuLS1cbmZzL2Fpby5jPTIxNDA9U1lTQ0FMTF9ERUZJTkUzKGlvX3N1Ym1pdCwgYWlvX2NvbnRleHRfdCwgY3R4X2lkLCBsb25nLCBucixcbi0tXG5mcy9haW8uYy0yMTY5LVxuZnMvYWlvLmM6MjE3MDpcdFx0cmV0ID0gaW9fc3VibWl0X29uZShjdHgsIHVzZXJfaW9jYiwgZmFsc2UpO1xuZnMvYWlvLmMtMjE3MS1cdFx0aWYgKHJldClcbi0tXG5mcy9haW8uYz0yMTgyPUNPTVBBVF9TWVNDQUxMX0RFRklORTMoaW9fc3VibWl0LCBjb21wYXRfYWlvX2NvbnRleHRfdCwgY3R4X2lkLFxuLS1cbmZzL2Fpby5jLTIyMTEtXG5mcy9haW8uYzoyMjEyOlx0XHRyZXQgPSBpb19zdWJtaXRfb25lKGN0eCwgY29tcGF0X3B0cih1c2VyX2lvY2IpLCB0cnVlKTtcbmZzL2Fpby5jLTIyMTMtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjcKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGlvX3N1Ym1pdGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGlvX3N1Ym1pdF9vbmVgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHdyaW5rbGUuIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgYWR2aXNlcyBhZ2FpbnN0IHVzaW5nIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zIGluIGZhdm9yIG9mIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBIbW0uLi4gaWYgYGlvX3N1Ym1pdF9vbmVgIGlzIHN0YXRpYywgdGhhdCBpbXBsaWVzIHRoZSBzeXN0ZW0gY2FsbCwgYHN5c19pb19zdWJtaXRgLCBtaWdodCBiZSB0aGUgb25seSBub24tc3RhdGljIG9wdGlvbiBhdmFpbGFibGUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBgc3lzX2lvX3N1Ym1pdGAgaXMgaW5kZWVkIGEgc3lzY2FsbC4gQnV0LCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZnMvYWlvLmNgIHRoYXQgaGFuZGxlIHRoaXMgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5PyBJIHNob3VsZCBkb3VibGUtY2hlY2sgYGZzL2Fpby5jYCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTIyNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBhaW9faW5vZGVfaW5mbyAqQUlPX0koc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9haW8uYy0yMzItLyotLS0tLS0gc3lzY3RsIHZhcmlhYmxlcy0tLS0qL1xuZnMvYWlvLmM6MjMzOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWlvX25yX2xvY2spO1xuZnMvYWlvLmMtMjM0LXN0YXRpYyB1bnNpZ25lZCBsb25nIGFpb19ucjtcdFx0LyogY3VycmVudCBzeXN0ZW0gd2lkZSBudW1iZXIgb2YgYWlvIHJlcXVlc3RzICovXG4tLVxuZnMvYWlvLmM9NTM2PXN0YXRpYyBpbnQgYWlvX3NldHVwX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbnJfZXZlbnRzKVxuLS1cbmZzL2Fpby5jLTYzNi1cbmZzL2Fpby5jOjYzNzp2b2lkIGtpb2NiX3NldF9jYW5jZWxfZm4oc3RydWN0IGtpb2NiICppb2NiLCBraW9jYl9jYW5jZWxfZm4gKmNhbmNlbClcbmZzL2Fpby5jLTYzOC17XG4tLVxuZnMvYWlvLmM9OTAxPXN0YXRpYyBpbnQga2lsbF9pb2N0eChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGtpb2N0eCAqY3R4LFxuLS1cbmZzL2Fpby5jLTk0NC0gKi9cbmZzL2Fpby5jOjk0NTp2b2lkIGV4aXRfYWlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuZnMvYWlvLmMtOTQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gU2VsZWN0aW5nIEFJTyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBzZWUgYGtpb2NiX3NldF9jYW5jZWxfZm5gIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IEkmIzM5O20gbG9va2luZyBhdCB0aGUgc3lzY2FsbCwgYHN5c19pb19zdWJtaXRgLCBkZWZpbmVkIHRocm91Z2ggdGhlIGBTWVNDQUxMX0RFRklORTNgIG1hY3JvLiBUaGF0IG1lYW5zIHRoZSByZWFsIGZ1bmN0aW9uIGlzIGVpdGhlciBgX194NjRfc3lzX2lvX3N1Ym1pdGAgb3IganVzdCBgc3lzX2lvX3N1Ym1pdGAuICBUaGVuIEkgbG9va2VkIGF0IGBhaW9fcG9sbGAgd2hpY2ggaXMgc3RhdGljIGJ1dCBpdCYjMzk7cyBhIGxhcmdlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBub3QgYmVpbmcgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuCgpUaGVuLCB0aGVyZSBpcyBgYWlvX3BvbGxfd2FrZWAuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIG1lYW5zIGl0IGRlZmluaXRlbHkgKmlzbiYjMzk7dCogaW5saW5lZC4gT2theSwgc28gdGhhdCBnaXZlcyBtZSBhbiBpZGVhLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzYXlpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBTaW5jZSBgYWlvX3BvbGxfd2FrZWAgaGFzIGEgZGlzdGluY3QgYWRkcmVzcyBiZWNhdXNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IGZ1bGZpbGxzIHRoYXQgcmVxdWlyZW1lbnQuIFNvLCBJIHdpbGwganVzdCBpbmNsdWRlIGJvdGggYGFpb19wb2xsYCBhbmQgYGFpb19wb2xsX3dha2VgLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGUgb25seSBvbmUgdGhhdCBsb29rcyByZWxldmFudCBpcyBgQUlPYCwgYnV0IEkgc2hvdWxkIGNoZWNrIGBFUE9MTGAganVzdCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBBSU9gIGlzIGVub3VnaCB0byBlbmFibGUgYGZzL2Fpby5jYCwgdGhvdWdoLiBJIHdpbGwgY2hlY2sgdGhlIGBBSU9gIGNvbmZpZyBpbiBgaW5pdC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4OTk9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE5MDktXG5pbml0L0tjb25maWc6MTkxMDpjb25maWcgQUlPXG5pbml0L0tjb25maWctMTkxMS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFJTyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTcwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgc2l0dWF0aW9uOgoKKipDb25maWd1cmF0aW9uIENoZWNrIGFuZCBTaWduYWwgUGVybWlzc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBBSU9gIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSB3ZSYjMzk7cmUgdXNpbmcsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaW1lIHRvIG1ha2Ugc3VyZSwgaXQgaXMgdGhlIG9uZS4gTm93LCBsZXQmIzM5O3MgbW92ZSBvbiBhbmQgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZGAuIFRoaXMgaXMgY3JpdGljYWwsIGFzIGl0IGxpa2VseSBpbXBhY3RzIGhvdyB3ZSBoYW5kbGUgc2lnbmFscyByZWxhdGVkIHRvIGV2ZW50IGZpbGUgZGVzY3JpcHRvcnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHNldCBhcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoYXQgc2V0dGluZyBpcyBhbGxvd2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmVudGZkX3NpZ25hbF9hbGxvd2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmM9NTczPXN0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfa2lja192cShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYy01NzctXG5kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jOjU3ODpcdGlmICghZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG5kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jLTU3OS1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ2cS1cdTAwM2VraWNrKTtcbi0tXG5mcy9ldmVudGZkLmM9NTY9dm9pZCBldmVudGZkX3NpZ25hbF9tYXNrKHN0cnVjdCBldmVudGZkX2N0eCAqY3R4LCBfX3BvbGxfdCBtYXNrKVxuLS1cbmZzL2V2ZW50ZmQuYy02My1cdCAqIG5lc3RlZCB3YWl0cXVldWVzIHdpdGggY3VzdG9tIHdha2V1cCBoYW5kbGVycywgdGhlbiBpdCBzaG91bGRcbmZzL2V2ZW50ZmQuYzo2NDpcdCAqIGNoZWNrIGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJZlxuZnMvZXZlbnRmZC5jLTY1LVx0ICogaXQgcmV0dXJucyBmYWxzZSwgdGhlIGV2ZW50ZmRfc2lnbmFsKCkgY2FsbCBzaG91bGQgYmUgZGVmZXJyZWQgdG8gYVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oPTQxPXZvaWQgZXZlbnRmZF9jdHhfZG9fcmVhZChzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCwgX191NjQgKmNudCk7XG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaC00Mi1cbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oOjQzOnN0YXRpYyBpbmxpbmUgYm9vbCBldmVudGZkX3NpZ25hbF9hbGxvd2VkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaC00NC17XG4tLVxuaW5jbHVkZS9saW51eC9ldmVudGZkLmg9Njk9c3RhdGljIGlubGluZSBpbnQgZXZlbnRmZF9jdHhfcmVtb3ZlX3dhaXRfcXVldWUoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9saW51eC9ldmVudGZkLmgtNzQtXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaDo3NTpzdGF0aWMgaW5saW5lIGJvb2wgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9ldmVudGZkLmgtNzYte1xuLS1cbmlvX3VyaW5nL2V2ZW50ZmQuYz01ND1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG5pb191cmluZy9ldmVudGZkLmMtNTUte1xuaW9fdXJpbmcvZXZlbnRmZC5jOjU2Olx0aWYgKGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xuaW9fdXJpbmcvZXZlbnRmZC5jLTU3LVx0XHRldmVudGZkX3NpZ25hbF9tYXNrKGV2X2ZkLVx1MDAzZWNxX2V2X2ZkLCBFUE9MTF9VUklOR19XQUtFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBhc3luY2hyb25vdXMgSS9PIChBSU8pIHBvbGxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgIGNoZWNrIHdpdGhpbiBgYWlvX3BvbGxfd2FrZWAgYW5kLCBieSBkb2luZyBzbywgZGVsYXlpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEFJTy4gVGhpcyBjaGFuZ2Ugd2FycmFudHMgc2VyaW91cyBhdHRlbnRpb24gYW5kIHRob3JvdWdoIGZ1enppbmcuCgpNeSBmb2N1cyBpbW1lZGlhdGVseSBnb2VzIHRvIGBhaW9fcG9sbF93YWtlYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGFpb19wb2xsYC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGZzL2Fpby5jYCBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gVGhlIGBBSU9gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQsIHNvIEkga25vdyB0aGlzIGlzIGEgZmVhdHVyZSBhY3RpdmVseSBpbiB1c2UuIFRoaXMgcmVtb3ZhbCBvZiB0aGUgY2hlY2sgY291bGQgaW50cm9kdWNlIHN1YnRsZSBidWdzIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBwcmltZSB0YXJnZXRzIGZvciBleHBsb2l0YXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHNwZW5kIHNvbWUgZm9jdXNlZCB0aW1lIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlvX3BvbGxfd2FrZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fpby5jPTE4MjM9c3RhdGljIGludCBhaW9fcG9sbF9jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiKVxuLS1cbmZzL2Fpby5jLTE4MzktXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG5mcy9haW8uYy0xODQxLVx0XHR2b2lkICprZXkpXG4tLVxuZnMvYWlvLmM9MTk1Mj1zdGF0aWMgaW50IGFpb19wb2xsKHN0cnVjdCBhaW9fa2lvY2IgKmFpb2NiLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYilcbi0tXG5mcy9haW8uYy0xOTgyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuZnMvYWlvLmM6MTk4MzpcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXHUwMDI2cmVxLVx1MDAzZXdhaXQsIGFpb19wb2xsX3dha2UpO1xuZnMvYWlvLmMtMTk4NC1cbi0tXG5mcy9haW8uYy0xOTkxLVx0XHRcdC8qXG5mcy9haW8uYzoxOTkyOlx0XHRcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXG5mcy9haW8uYy0xOTkzLVx0XHRcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NAoJCQkJCQkJb3V0cHV0OiAxMTYKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIHN5bnRoZXNpemUgdGhlc2UgdGhvdWdodHMgaW50byBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBpdDoKCioqTXkgUGVyc3BlY3RpdmU6IERlbGl2ZXJpbmcgdGhlIE91dGNvbWUqKgoKQWxyaWdodCwgdGhlIGNvcmUgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGVuZCByZXN1bHQuIEV2ZXJ5dGhpbmcgbGVhZGluZyB1cCB0byB0aGlzIHBvaW50LCB0aGUgYW5hbHlzaXMsIHRoZSBleHBlcmltZW50YXRpb24sIHRoZSBjb25zaWRlcmF0aW9ucyDigJMgYWxsIG9mIGl0IGN1bG1pbmF0ZXMgaW4gdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0cy4gVGhpcyBpc24mIzM5O3QgYSBuZWJ1bG91cyBnb2FsOyBpdCYjMzk7cyBhIGNvbW1pdG1lbnQuIE15IGVudGlyZSBwcm9jZXNzLCBteSBleHBlcnRpc2UsIG15IGFiaWxpdHkgdG8gaW50ZXJwcmV0IGFuZCB0cmFuc2xhdGUgY29tcGxleCBkYXRhIG9yIGlkZWFzLCBoYXMgcmVhY2hlZCB0aGUgcG9pbnQgb2YgY3VsbWluYXRpb24uIE15IHByaW9yaXR5IGlzIHRvIGNvbW11bmljYXRlIGNsZWFybHkgYW5kIGVmZmVjdGl2ZWx5IHRoZSBwcm9kdWN0IG9mIG15IHdvcmsuIFRoZSByZXN1bHRzICphcmUqIHRoZSBmb2N1cy4gSSYjMzk7bSBkZWxpdmVyaW5nIHRoZSBnb29kcy4gTm8gbW9yZSwgbm8gbGVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fpb19wb2xsX3dha2UmIzM0OywKICAgICYjMzQ7YWlvX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFJTyBwb2xsaW5nIGxvZ2ljIGluIGBhaW9fcG9sbF93YWtlYCBieSB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyaW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIHRvIGEgd29ya3F1ZXVlLCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEFJTykgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUlPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWlvX3BvbGxfd2FrZSYjMzQ7LAogICAgJiMzNDthaW9fcG9sbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUlPIHBvbGxpbmcgbG9naWMgaW4gYGFpb19wb2xsX3dha2VgIGJ5IHVuY29uZGl0aW9uYWxseSBkZWZlcnJpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgdG8gYSB3b3JrcXVldWUsIGluc3RlYWQgb2YgY2hlY2tpbmcgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQUlPKSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRlZmVycmluZyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIGluIGBhaW9fcG9sbF93YWtlYCB0byBhdm9pZCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHRha2luZyB0aGUgc2FtZSB3YWl0cXVldWUgbG9jayBhZ2FpbiB0aHJvdWdoIGVwb2xsLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL2RlYWRsb2NrIGlzc3VlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjNzk1NTMwODY2ZDA2ZGQ1OGI0ZWY5ZTk5YTQyYTNhMGFhNjU3MGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDo1NDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZjU3ZmEyMWEyNTAzNS4uZWY4MDE3ODFkYTA4YyAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWlvLmMKQEAgLTE4NjksNyAmIzQzOzE4NjksMTIgQEAgc3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO3JlcS0mZ3Q7d2FpdC5lbnRyeSk7CiAJCWxpc3RfZGVsKCZhbXA7aW9jYi0mZ3Q7a2lfbGlzdCk7CiAJCWlvY2ItJmd0O2tpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTsKLQkJaWYgKGlvY2ItJmd0O2tpX2V2ZW50ZmQgJmFtcDsmYW1wOyAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgaG9sZCBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaGVyZS4gIFNpZ25hbGluZyBhCiYjNDM7CQkgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lCiYjNDM7CQkgKiBsb2NrIGFnYWluLiAgRGVmZXIgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChpb2NiLSZndDtraV9ldmVudGZkKSB7CiAJCQlpb2NiID0gTlVMTDsKIAkJCUlOSVRfV09SSygmYW1wO3JlcS0mZ3Q7d29yaywgYWlvX3BvbGxfcHV0X3dvcmspOwogCQkJc2NoZWR1bGVfd29yaygmYW1wO3JlcS0mZ3Q7d29yayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcxCgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQUlPIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFpb19wb2xsX3dha2VgIGluIGBmcy9haW8uY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIHJlbW92aW5nIHRoZSBgIWV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAgY2hlY2ssIHdoaWNoIGNoYW5nZXMgdGhlIGNvbmRpdGlvbiBmb3IgZGVmZXJyaW5nIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBldmVudGZkIHNpZ25hbGluZyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyBpbnZvbHZpbmcgd2FpdHF1ZXVlIGxvY2tzLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IG1lbnRpb25zIGEgc2l0dWF0aW9uIHdoZXJlIHNpZ25hbGluZyBhIHJlc3VsdCBldmVudGZkIGNhbiBsZWFkIHRvIHJlLWFjcXVpcmluZyB0aGUgc2FtZSBsb2NrIHRocm91Z2ggYGVwb2xsYC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgY29uZmlybXMgbXkgc3VzcGljaW9uLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyBpbiB0aGUgYGFpb19wb2xsX3dha2VgIGZ1bmN0aW9uIGl0c2VsZi4gV2l0aGluIHRoZSBzcGlubG9jay1wcm90ZWN0ZWQgc2VjdGlvbiwgaWYgYGlvY2ItJmd0O2tpX2V2ZW50ZmRgIGlzIHNldCwgYSB3b3JrIGl0ZW0gaXMgc2NoZWR1bGVkIHVzaW5nIGBzY2hlZHVsZV93b3JrYC4gVGhpcyBpcyBkb25lICppbnN0ZWFkKiBvZiBkaXJlY3RseSBjb21wbGV0aW5nIHRoZSBBSU8gb3BlcmF0aW9uLiBUaGUgY29tbWVudGVkIHRleHQgcmVpbmZvcmNlcyB0aGF0IHRoaXMgaXMgYSBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ3k6IGBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9uc2AuCgpUaGlzIHNlZW1zIGxpa2UgYSBjbGFzc2ljIGxvY2tpbmcgaXNzdWUuIFRoZSBjb2RlIGlzIGNhcmVmdWxseSBkZWZlcnJpbmcgdGhlIGNvbXBsZXRpb24gdG8gcHJldmVudCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZXZlbnRmZCBzaWduYWwgcGF0aCBtaWdodCB0cnkgdG8gYWNxdWlyZSBhIGxvY2sgdGhhdCYjMzk7cyBhbHJlYWR5IGhlbGQsIHJlc3VsdGluZyBpbiBhIGRlYWRsb2NrLiBMT0NLREVQIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhpcyB0eXBlIG9mIGlzc3VlIGR1cmluZyBkZXZlbG9wbWVudC4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LCBzbyBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQmIzM5O3MgYSBjbGVhbiwgZGVhZGxvY2stcHJldmVudGlvbiBtZWFzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyBpbiBgYWlvX3BvbGxfd2FrZWAgdG8gYXZvaWQgZGVhZGxvY2tzIGNhdXNlZCBieSB0YWtpbmcgdGhlIHNhbWUgd2FpdHF1ZXVlIGxvY2sgYWdhaW4gdGhyb3VnaCBlcG9sbC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9kZWFkbG9jayBpc3N1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZGVmZXJyaW5nIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgaW4gYGFpb19wb2xsX3dha2VgIHRvIGF2b2lkIGRlYWRsb2NrcyBjYXVzZWQgYnkgdGFraW5nIHRoZSBzYW1lIHdhaXRxdWV1ZSBsb2NrIGFnYWluIHRocm91Z2ggZXBvbGwuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvZGVhZGxvY2sgaXNzdWUsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MDkuNjU3MTI0MzQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMTIwNjM5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUlPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWlvX3BvbGxfd2FrZVwiLFxuICAgIFwiYWlvX3BvbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRlZmVycmluZyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIGluIGBhaW9fcG9sbF93YWtlYCB0byBhdm9pZCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHRha2luZyB0aGUgc2FtZSB3YWl0cXVldWUgbG9jayBhZ2FpbiB0aHJvdWdoIGVwb2xsLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL2RlYWRsb2NrIGlzc3VlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFJTyBwb2xsaW5nIGxvZ2ljIGluIGBhaW9fcG9sbF93YWtlYCBieSB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyaW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIHRvIGEgd29ya3F1ZXVlLCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEFJTykgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MDkuNjU3MTI5Nzk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA1MDM4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiYzc5NTUzMDg2NmQwNmRkNThiNGVmOWU5OWE0MmEzYTBhYTY1NzBjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjU0OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcXG5pbmRleCBmNTdmYTIxYTI1MDM1Li5lZjgwMTc4MWRhMDhjIDEwMDY0NFxcbi0tLSBhL2ZzL2Fpby5jXFxuKysrIGIvZnMvYWlvLmNcXG5AQCAtMTg2OSw3ICsxODY5LDEyIEBAIHN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJlcS1cXHUwMDNld2FpdC5lbnRyeSk7XFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZpb2NiLVxcdTAwM2VraV9saXN0KTtcXG4gXFx0XFx0aW9jYi1cXHUwMDNla2lfcmVzLnJlcyA9IG1hbmdsZV9wb2xsKG1hc2spO1xcbi1cXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfZXZlbnRmZCBcXHUwMDI2XFx1MDAyNiAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdlIGhvbGQgYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGhlcmUuICBTaWduYWxpbmcgYVxcbitcXHRcXHQgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lXFxuK1xcdFxcdCAqIGxvY2sgYWdhaW4uICBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9ldmVudGZkKSB7XFxuIFxcdFxcdFxcdGlvY2IgPSBOVUxMO1xcbiBcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJlcS1cXHUwMDNld29yaywgYWlvX3BvbGxfcHV0X3dvcmspO1xcbiBcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZyZXEtXFx1MDAzZXdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDoxMC4wNzg0NDU2MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NDg4Mzc3NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhaW9fcG9sbF93YWtlXCIsXG4gICAgXCJhaW9fcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBSU8gcG9sbGluZyBsb2dpYyBpbiBgYWlvX3BvbGxfd2FrZWAgYnkgdW5jb25kaXRpb25hbGx5IGRlZmVycmluZyBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyB0byBhIHdvcmtxdWV1ZSwgaW5zdGVhZCBvZiBjaGVja2luZyBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChBSU8pIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNzk1NTMwODY2ZDA2ZGQ1OGI0ZWY5ZTk5YTQyYTNhMGFhNjU3MGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDo1NDowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmNcbmluZGV4IGY1N2ZhMjFhMjUwMzUuLmVmODAxNzgxZGEwOGMgMTAwNjQ0XG4tLS0gYS9mcy9haW8uY1xuKysrIGIvZnMvYWlvLmNcbkBAIC0xODY5LDcgKzE4NjksMTIgQEAgc3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZyZXEtXHUwMDNld2FpdC5lbnRyeSk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNmlvY2ItXHUwMDNla2lfbGlzdCk7XG4gXHRcdGlvY2ItXHUwMDNla2lfcmVzLnJlcyA9IG1hbmdsZV9wb2xsKG1hc2spO1xuLVx0XHRpZiAoaW9jYi1cdTAwM2VraV9ldmVudGZkIFx1MDAyNlx1MDAyNiAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdlIGhvbGQgYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGhlcmUuICBTaWduYWxpbmcgYVxuK1x0XHQgKiByZXN1bHQgZXZlbnRmZCBjYW4gZmVlZCBiYWNrIHRocm91Z2ggZXBvbGwgYW5kIHRyeSB0byB0YWtlIHRoZSBzYW1lXG4rXHRcdCAqIGxvY2sgYWdhaW4uICBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucy5cbitcdFx0ICovXG4rXHRcdGlmIChpb2NiLVx1MDAzZWtpX2V2ZW50ZmQpIHtcbiBcdFx0XHRpb2NiID0gTlVMTDtcbiBcdFx0XHRJTklUX1dPUksoXHUwMDI2cmVxLVx1MDAzZXdvcmssIGFpb19wb2xsX3B1dF93b3JrKTtcbiBcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnJlcS1cdTAwM2V3b3JrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjEwLjA3ODQ0Njg2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzQ1MTczNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGZzL2Fpby5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGFpb19wb2xsX3dha2VgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgaXQgaGFuZGxlcyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayB3aXRoIGBldmVudGZkX3NpZ25hbF9hbGxvd2VkKClgIHRvIGRldGVybWluZSBpZiBhbiBldmVudGZkIHNpZ25hbCB3YXMgYWxsb3dlZCwgYnV0IG5vdyBpdCdzIGJlaW5nIHJlbW92ZWQuIFNvIG5vdyBhbGwgZXZlbnRmZC1iYWNrZWQgY29tcGxldGlvbnMgYXJlIGRlZmVycmVkIHRvIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBSU8gcG9sbGluZyBjb3JlIGxvZ2ljLlxuXG5JIG5lZWQgdG8gY29uZmlybSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIGBhaW9fcG9sbF93YWtlYCBmdW5jdGlvbiBpcyB0aGUgd2FrZS11cCBjYWxsYmFjayBmb3IgQUlPIHBvbGwgcmVxdWVzdHMuIEdpdmVuIHRoaXMsIGl0IHNlZW1zIGhpZ2hseSBwcm9iYWJsZSB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byBkaWcgaW50byBgZnMvYWlvLmNgIGFuZCBzcGVjaWZpY2FsbHkgYGFpb19wb2xsX3dha2VgLCBhbmQgSSdtIG1hcmtpbmcgdGhpcyBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgYGFpb19wb2xsX3dha2VgLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgQUlPYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MTUuMzEyOTY3NzE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTY2MDEzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4OTk9Y29uZmlnIFNITUVNXFxuLS1cXG5pbml0L0tjb25maWctMTkwOS1cXG5pbml0L0tjb25maWc6MTkxMDpjb25maWcgQUlPXFxuaW5pdC9LY29uZmlnLTE5MTEtXFx0Ym9vbCBcXFwiRW5hYmxlIEFJTyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MTcuMTI5NTc0MDg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2OTE2OTQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgQUlPYCBpcyB0aGUgY29uZmlndXJhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gR29vZC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGFpb19wb2xsX3dha2VgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgd2F5IHRoaXMgcGllY2Ugb2YgY29kZSB3aWxsIGJlaGF2ZSwgZXNwZWNpYWxseSBpbiBhIG11bHRpdGhyZWFkZWQgb3IgbXVsdGktcHJvY2VzcyBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhpcyB2YXJpYWJsZSBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MjAuNDk4NzQ2NzQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTI3OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpb19wb2xsX3dha2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MTgyMz1zdGF0aWMgaW50IGFpb19wb2xsX2NhbmNlbChzdHJ1Y3Qga2lvY2IgKmlvY2IpXFxuLS1cXG5mcy9haW8uYy0xODM5LVxcbmZzL2Fpby5jOjE4NDA6c3RhdGljIGludCBhaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcXG5mcy9haW8uYy0xODQxLVxcdFxcdHZvaWQgKmtleSlcXG4tLVxcbmZzL2Fpby5jPTE5NTI9c3RhdGljIGludCBhaW9fcG9sbChzdHJ1Y3QgYWlvX2tpb2NiICphaW9jYiwgY29uc3Qgc3RydWN0IGlvY2IgKmlvY2IpXFxuLS1cXG5mcy9haW8uYy0xOTgyLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZXEtXFx1MDAzZXdhaXQuZW50cnkpO1xcbmZzL2Fpby5jOjE5ODM6XFx0aW5pdF93YWl0cXVldWVfZnVuY19lbnRyeShcXHUwMDI2cmVxLVxcdTAwM2V3YWl0LCBhaW9fcG9sbF93YWtlKTtcXG5mcy9haW8uYy0xOTg0LVxcbi0tXFxuZnMvYWlvLmMtMTk5MS1cXHRcXHRcXHQvKlxcbmZzL2Fpby5jOjE5OTI6XFx0XFx0XFx0ICogYWlvX3BvbGxfd2FrZSgpIGFscmVhZHkgZWl0aGVyIHNjaGVkdWxlZCB0aGUgYXN5bmNcXG5mcy9haW8uYy0xOTkzLVxcdFxcdFxcdCAqIGNvbXBsZXRpb24gd29yaywgb3IgY29tcGxldGVkIHRoZSByZXF1ZXN0IGlubGluZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MjAuNTQyODgwMjkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NDk4Mzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBhaW9fcG9sbF93YWtlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBhaW9fcG9sbF93YWtlYCBpcyBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgYmVpbmcgdXNlZCBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGluIGBpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5YC4gQ2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgY2FsbGVkIGluZGlyZWN0bHksIHJpZ2h0PyBUaGV5J3JlIGRpc3RpbmN0LCBzZXBhcmF0ZSBmdW5jdGlvbnMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzIGNvcnJlY3QsIGJ1dCBzb21ldGhpbmcgYWJvdXQgdGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQuXG5cbldhaXQgYSBzZWNvbmQsIHRoZSBjb2RpbmcgZ3VpZGVsaW5lcyBlbXBoYXNpemUgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycywgd2hpY2ggYXJlIGlubGluZWQuIEJ1dCBgYWlvX3BvbGxfd2FrZWAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gaXQncyAqbm90KiBnb2luZyB0byBiZSBpbmxpbmVkLCBpcyBpdD8gU28sIHRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgaXMgcG90ZW50aWFsbHkgdGhlIGlzc3VlLiBOb3csIHdoYXQncyB0aGUgYWN0dWFsIEFQSSBlbnRyeXBvaW50IGluIHRoaXMgY29udGV4dD8gQWgsIHRoYXQgd291bGQgYmUgZWl0aGVyIGBhaW9fcG9sbGAgb3IgcG90ZW50aWFsbHkgYGlvX3N1Ym1pdGAsIHNpbmNlIHRoZXkgY2FsbCBgYWlvX3BvbGxgLiBMZXQncyBkaWcgaW50byBgYWlvX3BvbGxgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MjUuMjg3ODY2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQyNjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaW9fcG9sbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9haW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9haW8uYz0xNzA0PXN0YXRpYyBpbnQgYWlvX2ZzeW5jKHN0cnVjdCBmc3luY19pb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLFxcbi0tXFxuZnMvYWlvLmMtMTcyMy1cXG5mcy9haW8uYzoxNzI0OnN0YXRpYyB2b2lkIGFpb19wb2xsX3B1dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9haW8uYy0xNzI1LXtcXG4tLVxcbmZzL2Fpby5jPTE3NzE9c3RhdGljIHZvaWQgcG9sbF9pb2NiX3VubG9ja193cShzdHJ1Y3QgcG9sbF9pb2NiICpyZXEpXFxuLS1cXG5mcy9haW8uYy0xNzc2LVxcbmZzL2Fpby5jOjE3Nzc6c3RhdGljIHZvaWQgYWlvX3BvbGxfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZnMvYWlvLmMtMTc3OC17XFxuLS1cXG5mcy9haW8uYy0xODIyLS8qIGFzc3VtZXMgd2UgYXJlIGNhbGxlZCB3aXRoIGlycXMgZGlzYWJsZWQgKi9cXG5mcy9haW8uYzoxODIzOnN0YXRpYyBpbnQgYWlvX3BvbGxfY2FuY2VsKHN0cnVjdCBraW9jYiAqaW9jYilcXG5mcy9haW8uYy0xODI0LXtcXG4tLVxcbmZzL2Fpby5jLTE4MzktXFxuZnMvYWlvLmM6MTg0MDpzdGF0aWMgaW50IGFpb19wb2xsX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLFxcbmZzL2Fpby5jLTE4NDEtXFx0XFx0dm9pZCAqa2V5KVxcbi0tXFxuZnMvYWlvLmMtMTg3OC1cXHRcXHRcXHRpb2NiID0gTlVMTDtcXG5mcy9haW8uYzoxODc5OlxcdFxcdFxcdElOSVRfV09SSyhcXHUwMDI2cmVxLVxcdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XFxuZnMvYWlvLmMtMTg4MC1cXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZyZXEtXFx1MDAzZXdvcmspO1xcbi0tXFxuZnMvYWlvLmMtMTkxNy1cXHRcXHRcXHQgKiBhcyByZXEtXFx1MDAzZWhlYWQgaXMgTlVMTCdlZCBvdXQsIHRoZSByZXF1ZXN0IGNhbiBiZVxcbmZzL2Fpby5jOjE5MTg6XFx0XFx0XFx0ICogY29tcGxldGVkIGFuZCBmcmVlZCwgc2luY2UgYWlvX3BvbGxfY29tcGxldGVfd29yaygpXFxuZnMvYWlvLmMtMTkxOS1cXHRcXHRcXHQgKiB3aWxsIG5vIGxvbmdlciBuZWVkIHRvIHRha2UgdGhlIHdhaXRxdWV1ZSBsb2NrLlxcbi0tXFxuZnMvYWlvLmMtMTkyNi1cXG5mcy9haW8uYzoxOTI3OnN0cnVjdCBhaW9fcG9sbF90YWJsZSB7XFxuZnMvYWlvLmMtMTkyOC1cXHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3RcXHRwdDtcXG4tLVxcbmZzL2Fpby5jPTE5MzQ9c3RhdGljIHZvaWRcXG5mcy9haW8uYzoxOTM1OmFpb19wb2xsX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgKmhlYWQsXFxuZnMvYWlvLmMtMTkzNi1cXHRcXHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnApXFxuZnMvYWlvLmMtMTkzNy17XFxuZnMvYWlvLmM6MTkzODpcXHRzdHJ1Y3QgYWlvX3BvbGxfdGFibGUgKnB0ID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBhaW9fcG9sbF90YWJsZSwgcHQpO1xcbmZzL2Fpby5jLTE5MzktXFxuLS1cXG5mcy9haW8uYy0xOTUxLVxcbmZzL2Fpby5jOjE5NTI6c3RhdGljIGludCBhaW9fcG9sbChzdHJ1Y3QgYWlvX2tpb2NiICphaW9jYiwgY29uc3Qgc3RydWN0IGlvY2IgKmlvY2IpXFxuZnMvYWlvLmMtMTk1My17XFxuLS1cXG5mcy9haW8uYy0xOTU1LVxcdHN0cnVjdCBwb2xsX2lvY2IgKnJlcSA9IFxcdTAwMjZhaW9jYi1cXHUwMDNlcG9sbDtcXG5mcy9haW8uYzoxOTU2OlxcdHN0cnVjdCBhaW9fcG9sbF90YWJsZSBhcHQ7XFxuZnMvYWlvLmMtMTk1Ny1cXHRib29sIGNhbmNlbCA9IGZhbHNlO1xcbi0tXFxuZnMvYWlvLmMtMTk2Ni1cXG5mcy9haW8uYzoxOTY3OlxcdElOSVRfV09SSyhcXHUwMDI2cmVxLVxcdTAwM2V3b3JrLCBhaW9fcG9sbF9jb21wbGV0ZV93b3JrKTtcXG5mcy9haW8uYy0xOTY4LVxcdHJlcS1cXHUwMDNlZXZlbnRzID0gZGVtYW5nbGVfcG9sbChpb2NiLVxcdTAwM2VhaW9fYnVmKSB8IEVQT0xMRVJSIHwgRVBPTExIVVA7XFxuLS1cXG5mcy9haW8uYy0xOTc0LVxcbmZzL2Fpby5jOjE5NzU6XFx0YXB0LnB0Ll9xcHJvYyA9IGFpb19wb2xsX3F1ZXVlX3Byb2M7XFxuZnMvYWlvLmMtMTk3Ni1cXHRhcHQucHQuX2tleSA9IHJlcS1cXHUwMDNlZXZlbnRzO1xcbi0tXFxuZnMvYWlvLmMtMTk4Mi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cmVxLVxcdTAwM2V3YWl0LmVudHJ5KTtcXG5mcy9haW8uYzoxOTgzOlxcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXFx1MDAyNnJlcS1cXHUwMDNld2FpdCwgYWlvX3BvbGxfd2FrZSk7XFxuZnMvYWlvLmMtMTk4NC1cXG4tLVxcbmZzL2Fpby5jLTE5OTEtXFx0XFx0XFx0LypcXG5mcy9haW8uYzoxOTkyOlxcdFxcdFxcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXFxuZnMvYWlvLmMtMTk5My1cXHRcXHRcXHQgKiBjb21wbGV0aW9uIHdvcmssIG9yIGNvbXBsZXRlZCB0aGUgcmVxdWVzdCBpbmxpbmUuXFxuLS1cXG5mcy9haW8uYy0yMDExLVxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmFpb2NiLVxcdTAwM2VraV9saXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2VhY3RpdmVfcmVxcyk7XFxuZnMvYWlvLmM6MjAxMjpcXHRcXHRcXHRhaW9jYi1cXHUwMDNla2lfY2FuY2VsID0gYWlvX3BvbGxfY2FuY2VsO1xcbmZzL2Fpby5jLTIwMTMtXFx0XFx0fVxcbi0tXFxuZnMvYWlvLmM9MjAyNz1zdGF0aWMgaW50IF9faW9fc3VibWl0X29uZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLFxcbi0tXFxuZnMvYWlvLmMtMjA3My1cXHRjYXNlIElPQ0JfQ01EX1BPTEw6XFxuZnMvYWlvLmM6MjA3NDpcXHRcXHRyZXR1cm4gYWlvX3BvbGwocmVxLCBpb2NiKTtcXG5mcy9haW8uYy0yMDc1LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjI1LjMzMzI5Njc0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTI2NjAzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBSU8gQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgZm9yIGFzeW5jaHJvbm91cyBJL08gYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSBgYWlvX3BvbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgdGhlIHN0YXRpYyBgYWlvX3BvbGxgIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGJ5IGBfX2lvX3N1Ym1pdF9vbmVgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgaW9fc3VibWl0X29uZWAsIGFuZCBmaW5hbGx5IGBzeXNfaW9fc3VibWl0YC4gU2luY2UgYHN5c19pb19zdWJtaXRgIGlzIHRoZSBzeXN0ZW0gY2FsbCwgbXkgbWluZCB3ZW50IHN0cmFpZ2h0IHRvIGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGNsb3NlciB0byB0aGF0IGVudHJ5IHBvaW50LiBGdW5jdGlvbnMgc3VjaCBhcyBgaW9fc3VibWl0X29uZWAgb3IgYF9faW9fc3VibWl0X29uZWAgc2VlbWVkIGxpa2UgZ29vZCBwbGFjZXMgdG8gc3RhcnQsIGFzIGRvZXMgdGhlIGFpbyBwb2xsIGZ1bmN0aW9uLlxuXG5HaXZlbiB0aGF0LCBJJ3ZlIGRlY2lkZWQgdG8gaW5pdGlhbGx5IGZvY3VzIG9uIGBfX2lvX3N1Ym1pdF9vbmVgIGFuZCBgYWlvX3BvbGxgIGFzIHBvdGVudGlhbCBcIkZvY3VzU3ltYm9sc1wiLiBIb3dldmVyLCBhIHF1aWNrIHJlZnJlc2hlciBzaG93cyB0aGF0IGBhaW9fcG9sbGAgaXMgdGhlIGRpcmVjdCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYElPQ0JfQ01EX1BPTExgLCB3aGljaCBtYWtlcyBpdCBhIGNyaXRpY2FsIHBhcnQuXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCBgYWlvX3BvbGxgICppcyogc3RhdGljIHdoaWNoIHNpbXBsaWZpZXMgc29tZSBhbmFseXNpcy4gQWx0aG91Z2gsIGdpdmVuIHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiwgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBtZSB3YW50IHRvIHZlcmlmeSBteSBhc3N1bXB0aW9uIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gQWgsIHllcywgYHN5c19pb19zdWJtaXRgIGlzIHRoZSBhY3R1YWwgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19zdWJtaXRfb25lYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDozMC4xODU5NTk5NzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mzk4NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3N1Ym1pdF9vbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MTk1Mj1zdGF0aWMgaW50IGFpb19wb2xsKHN0cnVjdCBhaW9fa2lvY2IgKmFpb2NiLCBjb25zdCBzdHJ1Y3QgaW9jYiAqaW9jYilcXG4tLVxcbmZzL2Fpby5jLTIwMjYtXFxuZnMvYWlvLmM6MjAyNzpzdGF0aWMgaW50IF9faW9fc3VibWl0X29uZShzdHJ1Y3Qga2lvY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiLFxcbmZzL2Fpby5jLTIwMjgtXFx0XFx0XFx0ICAgc3RydWN0IGlvY2IgX191c2VyICp1c2VyX2lvY2IsIHN0cnVjdCBhaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmZzL2Fpby5jLTIwODAtXFxuZnMvYWlvLmM6MjA4MTpzdGF0aWMgaW50IGlvX3N1Ym1pdF9vbmUoc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKnVzZXJfaW9jYixcXG5mcy9haW8uYy0yMDgyLVxcdFxcdFxcdCBib29sIGNvbXBhdClcXG4tLVxcbmZzL2Fpby5jLTIxMTAtXFxuZnMvYWlvLmM6MjExMTpcXHRlcnIgPSBfX2lvX3N1Ym1pdF9vbmUoY3R4LCBcXHUwMDI2aW9jYiwgdXNlcl9pb2NiLCByZXEsIGNvbXBhdCk7XFxuZnMvYWlvLmMtMjExMi1cXG4tLVxcbmZzL2Fpby5jPTIxNDA9U1lTQ0FMTF9ERUZJTkUzKGlvX3N1Ym1pdCwgYWlvX2NvbnRleHRfdCwgY3R4X2lkLCBsb25nLCBucixcXG4tLVxcbmZzL2Fpby5jLTIxNjktXFxuZnMvYWlvLmM6MjE3MDpcXHRcXHRyZXQgPSBpb19zdWJtaXRfb25lKGN0eCwgdXNlcl9pb2NiLCBmYWxzZSk7XFxuZnMvYWlvLmMtMjE3MS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYWlvLmM9MjE4Mj1DT01QQVRfU1lTQ0FMTF9ERUZJTkUzKGlvX3N1Ym1pdCwgY29tcGF0X2Fpb19jb250ZXh0X3QsIGN0eF9pZCxcXG4tLVxcbmZzL2Fpby5jLTIyMTEtXFxuZnMvYWlvLmM6MjIxMjpcXHRcXHRyZXQgPSBpb19zdWJtaXRfb25lKGN0eCwgY29tcGF0X3B0cih1c2VyX2lvY2IpLCB0cnVlKTtcXG5mcy9haW8uYy0yMjEzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjMwLjIzMDM2NjA3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE2NTU0NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBpb19zdWJtaXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGlvX3N1Ym1pdF9vbmVgIGlzIHN0YXRpYy4gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZS4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBhZHZpc2VzIGFnYWluc3QgdXNpbmcgc3RhdGljLCBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMgaW4gZmF2b3Igb2Ygbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIEhtbS4uLiBpZiBgaW9fc3VibWl0X29uZWAgaXMgc3RhdGljLCB0aGF0IGltcGxpZXMgdGhlIHN5c3RlbSBjYWxsLCBgc3lzX2lvX3N1Ym1pdGAsIG1pZ2h0IGJlIHRoZSBvbmx5IG5vbi1zdGF0aWMgb3B0aW9uIGF2YWlsYWJsZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuQWxyaWdodCwgYHN5c19pb19zdWJtaXRgIGlzIGluZGVlZCBhIHN5c2NhbGwuIEJ1dCwgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL2Fpby5jYCB0aGF0IGhhbmRsZSB0aGlzIHVuZGVybHlpbmcgZnVuY3Rpb25hbGl0eT8gSSBzaG91bGQgZG91YmxlLWNoZWNrIGBmcy9haW8uY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIHRoYXQgYXJlbid0IHN0YXRpYy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjcsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6MzQuOTQ2OTI0MDYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0NjU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWlvLmM9MjI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGFpb19pbm9kZV9pbmZvICpBSU9fSShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvYWlvLmMtMjMyLS8qLS0tLS0tIHN5c2N0bCB2YXJpYWJsZXMtLS0tKi9cXG5mcy9haW8uYzoyMzM6c3RhdGljIERFRklORV9TUElOTE9DSyhhaW9fbnJfbG9jayk7XFxuZnMvYWlvLmMtMjM0LXN0YXRpYyB1bnNpZ25lZCBsb25nIGFpb19ucjtcXHRcXHQvKiBjdXJyZW50IHN5c3RlbSB3aWRlIG51bWJlciBvZiBhaW8gcmVxdWVzdHMgKi9cXG4tLVxcbmZzL2Fpby5jPTUzNj1zdGF0aWMgaW50IGFpb19zZXR1cF9yaW5nKHN0cnVjdCBraW9jdHggKmN0eCwgdW5zaWduZWQgaW50IG5yX2V2ZW50cylcXG4tLVxcbmZzL2Fpby5jLTYzNi1cXG5mcy9haW8uYzo2Mzc6dm9pZCBraW9jYl9zZXRfY2FuY2VsX2ZuKHN0cnVjdCBraW9jYiAqaW9jYiwga2lvY2JfY2FuY2VsX2ZuICpjYW5jZWwpXFxuZnMvYWlvLmMtNjM4LXtcXG4tLVxcbmZzL2Fpby5jPTkwMT1zdGF0aWMgaW50IGtpbGxfaW9jdHgoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBraW9jdHggKmN0eCxcXG4tLVxcbmZzL2Fpby5jLTk0NC0gKi9cXG5mcy9haW8uYzo5NDU6dm9pZCBleGl0X2FpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5mcy9haW8uYy05NDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDozNC45OTI1NzU0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDEwNTMwOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBTZWxlY3RpbmcgQUlPIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIGBraW9jYl9zZXRfY2FuY2VsX2ZuYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IEknbSBsb29raW5nIGF0IHRoZSBzeXNjYWxsLCBgc3lzX2lvX3N1Ym1pdGAsIGRlZmluZWQgdGhyb3VnaCB0aGUgYFNZU0NBTExfREVGSU5FM2AgbWFjcm8uIFRoYXQgbWVhbnMgdGhlIHJlYWwgZnVuY3Rpb24gaXMgZWl0aGVyIGBfX3g2NF9zeXNfaW9fc3VibWl0YCBvciBqdXN0IGBzeXNfaW9fc3VibWl0YC4gIFRoZW4gSSBsb29rZWQgYXQgYGFpb19wb2xsYCB3aGljaCBpcyBzdGF0aWMgYnV0IGl0J3MgYSBsYXJnZSBmdW5jdGlvbiwgc28gaXQncyBub3QgYmVpbmcgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuXG5cblRoZW4sIHRoZXJlIGlzIGBhaW9fcG9sbF93YWtlYC4gSXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5ICppc24ndCogaW5saW5lZC4gT2theSwgc28gdGhhdCBnaXZlcyBtZSBhbiBpZGVhLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzYXlpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBTaW5jZSBgYWlvX3BvbGxfd2FrZWAgaGFzIGEgZGlzdGluY3QgYWRkcmVzcyBiZWNhdXNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgZnVsZmlsbHMgdGhhdCByZXF1aXJlbWVudC4gU28sIEkgd2lsbCBqdXN0IGluY2x1ZGUgYm90aCBgYWlvX3BvbGxgIGFuZCBgYWlvX3BvbGxfd2FrZWAuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGUgb25seSBvbmUgdGhhdCBsb29rcyByZWxldmFudCBpcyBgQUlPYCwgYnV0IEkgc2hvdWxkIGNoZWNrIGBFUE9MTGAganVzdCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGBBSU9gIGlzIGVub3VnaCB0byBlbmFibGUgYGZzL2Fpby5jYCwgdGhvdWdoLiBJIHdpbGwgY2hlY2sgdGhlIGBBSU9gIGNvbmZpZyBpbiBgaW5pdC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6NDEuMDAzMTA5MDgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk4Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUlPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTg5OT1jb25maWcgU0hNRU1cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTA5LVxcbmluaXQvS2NvbmZpZzoxOTEwOmNvbmZpZyBBSU9cXG5pbml0L0tjb25maWctMTkxMS1cXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo0MS4wNDcwOTkxMDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MTM4MTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHNpdHVhdGlvbjpcblxuKipDb25maWd1cmF0aW9uIENoZWNrIGFuZCBTaWduYWwgUGVybWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgQUlPYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgd2UncmUgdXNpbmcsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gbWFrZSBzdXJlLCBpdCBpcyB0aGUgb25lLiBOb3csIGxldCdzIG1vdmUgb24gYW5kIHF1aWNrbHkgdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWRgLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyBpdCBsaWtlbHkgaW1wYWN0cyBob3cgd2UgaGFuZGxlIHNpZ25hbHMgcmVsYXRlZCB0byBldmVudCBmaWxlIGRlc2NyaXB0b3JzLiBHb3R0YSBtYWtlIHN1cmUgdGhhdCdzIHNldCBhcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCBzZXR0aW5nIGlzIGFsbG93ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo0My45MDg0ODI3MjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzA4NTQxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZlbnRmZF9zaWduYWxfYWxsb3dlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYz01NzM9c3RhdGljIHZvaWQgdmR1c2VfdmRwYV9raWNrX3ZxKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IGlkeClcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmMtNTc3LVxcbmRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmM6NTc4OlxcdGlmICghZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XFxuZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYy01NzktXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dnEtXFx1MDAzZWtpY2spO1xcbi0tXFxuZnMvZXZlbnRmZC5jPTU2PXZvaWQgZXZlbnRmZF9zaWduYWxfbWFzayhzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCwgX19wb2xsX3QgbWFzaylcXG4tLVxcbmZzL2V2ZW50ZmQuYy02My1cXHQgKiBuZXN0ZWQgd2FpdHF1ZXVlcyB3aXRoIGN1c3RvbSB3YWtldXAgaGFuZGxlcnMsIHRoZW4gaXQgc2hvdWxkXFxuZnMvZXZlbnRmZC5jOjY0OlxcdCAqIGNoZWNrIGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJZlxcbmZzL2V2ZW50ZmQuYy02NS1cXHQgKiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZXZlbnRmZF9zaWduYWwoKSBjYWxsIHNob3VsZCBiZSBkZWZlcnJlZCB0byBhXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaD00MT12b2lkIGV2ZW50ZmRfY3R4X2RvX3JlYWQoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgsIF9fdTY0ICpjbnQpO1xcbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oLTQyLVxcbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oOjQzOnN0YXRpYyBpbmxpbmUgYm9vbCBldmVudGZkX3NpZ25hbF9hbGxvd2VkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9ldmVudGZkLmgtNDQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudGZkLmg9Njk9c3RhdGljIGlubGluZSBpbnQgZXZlbnRmZF9jdHhfcmVtb3ZlX3dhaXRfcXVldWUoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaC03NC1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaDo3NTpzdGF0aWMgaW5saW5lIGJvb2wgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvZXZlbnRmZC5oLTc2LXtcXG4tLVxcbmlvX3VyaW5nL2V2ZW50ZmQuYz01ND1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXFxuaW9fdXJpbmcvZXZlbnRmZC5jLTU1LXtcXG5pb191cmluZy9ldmVudGZkLmM6NTY6XFx0aWYgKGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xcbmlvX3VyaW5nL2V2ZW50ZmQuYy01Ny1cXHRcXHRldmVudGZkX3NpZ25hbF9tYXNrKGV2X2ZkLVxcdTAwM2VjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjQ1Ljc3OTM0MTc3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ1MDYzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQUlPIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGFzeW5jaHJvbm91cyBJL08gKEFJTykgcG9sbGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlbW92aW5nIHRoZSBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYCBjaGVjayB3aXRoaW4gYGFpb19wb2xsX3dha2VgIGFuZCwgYnkgZG9pbmcgc28sIGRlbGF5aW5nIGFsbCBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zLiBUaGF0J3MgYSBkZWZpbml0ZSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEFJTy4gVGhpcyBjaGFuZ2Ugd2FycmFudHMgc2VyaW91cyBhdHRlbnRpb24gYW5kIHRob3JvdWdoIGZ1enppbmcuXG5cbk15IGZvY3VzIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGFpb19wb2xsX3dha2VgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYWlvX3BvbGxgLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBmcy9haW8uY2AgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFRoZSBgQUlPYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLCBzbyBJIGtub3cgdGhpcyBpcyBhIGZlYXR1cmUgYWN0aXZlbHkgaW4gdXNlLiBUaGlzIHJlbW92YWwgb2YgdGhlIGNoZWNrIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZXhwbG9pdGF0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBzcGVuZCBzb21lIGZvY3VzZWQgdGltZSBvbi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6NTQ6NTAuMjI0NDA4MDk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM0NDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaW9fcG9sbF93YWtlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fpby5jPTE4MjM9c3RhdGljIGludCBhaW9fcG9sbF9jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiKVxcbi0tXFxuZnMvYWlvLmMtMTgzOS1cXG5mcy9haW8uYzoxODQwOnN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXFxuZnMvYWlvLmMtMTg0MS1cXHRcXHR2b2lkICprZXkpXFxuLS1cXG5mcy9haW8uYz0xOTUyPXN0YXRpYyBpbnQgYWlvX3BvbGwoc3RydWN0IGFpb19raW9jYiAqYWlvY2IsIGNvbnN0IHN0cnVjdCBpb2NiICppb2NiKVxcbi0tXFxuZnMvYWlvLmMtMTk4Mi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cmVxLVxcdTAwM2V3YWl0LmVudHJ5KTtcXG5mcy9haW8uYzoxOTgzOlxcdGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoXFx1MDAyNnJlcS1cXHUwMDNld2FpdCwgYWlvX3BvbGxfd2FrZSk7XFxuZnMvYWlvLmMtMTk4NC1cXG4tLVxcbmZzL2Fpby5jLTE5OTEtXFx0XFx0XFx0LypcXG5mcy9haW8uYzoxOTkyOlxcdFxcdFxcdCAqIGFpb19wb2xsX3dha2UoKSBhbHJlYWR5IGVpdGhlciBzY2hlZHVsZWQgdGhlIGFzeW5jXFxuZnMvYWlvLmMtMTk5My1cXHRcXHRcXHQgKiBjb21wbGV0aW9uIHdvcmssIG9yIGNvbXBsZXRlZCB0aGUgcmVxdWVzdCBpbmxpbmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjUwLjI2ODc2MDI4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIyMjcyODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3ludGhlc2l6ZSB0aGVzZSB0aG91Z2h0cyBpbnRvIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5LiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBpdDpcblxuKipNeSBQZXJzcGVjdGl2ZTogRGVsaXZlcmluZyB0aGUgT3V0Y29tZSoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBJJ20gZm9jdXNpbmcgb24gdGhlIGVuZCByZXN1bHQuIEV2ZXJ5dGhpbmcgbGVhZGluZyB1cCB0byB0aGlzIHBvaW50LCB0aGUgYW5hbHlzaXMsIHRoZSBleHBlcmltZW50YXRpb24sIHRoZSBjb25zaWRlcmF0aW9ucyDigJMgYWxsIG9mIGl0IGN1bG1pbmF0ZXMgaW4gdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0cy4gVGhpcyBpc24ndCBhIG5lYnVsb3VzIGdvYWw7IGl0J3MgYSBjb21taXRtZW50LiBNeSBlbnRpcmUgcHJvY2VzcywgbXkgZXhwZXJ0aXNlLCBteSBhYmlsaXR5IHRvIGludGVycHJldCBhbmQgdHJhbnNsYXRlIGNvbXBsZXggZGF0YSBvciBpZGVhcywgaGFzIHJlYWNoZWQgdGhlIHBvaW50IG9mIGN1bG1pbmF0aW9uLiBNeSBwcmlvcml0eSBpcyB0byBjb21tdW5pY2F0ZSBjbGVhcmx5IGFuZCBlZmZlY3RpdmVseSB0aGUgcHJvZHVjdCBvZiBteSB3b3JrLiBUaGUgcmVzdWx0cyAqYXJlKiB0aGUgZm9jdXMuIEknbSBkZWxpdmVyaW5nIHRoZSBnb29kcy4gTm8gbW9yZSwgbm8gbGVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NCwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjU0OjU0Ljg5MTAzNjU5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTgwOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhaW9fcG9sbF93YWtlXCIsXG4gICAgXCJhaW9fcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBSU8gcG9sbGluZyBsb2dpYyBpbiBgYWlvX3BvbGxfd2FrZWAgYnkgdW5jb25kaXRpb25hbGx5IGRlZmVycmluZyBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyB0byBhIHdvcmtxdWV1ZSwgaW5zdGVhZCBvZiBjaGVja2luZyBgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChBSU8pIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUlPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWlvX3BvbGxfd2FrZVwiLFxuICAgIFwiYWlvX3BvbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUlPIHBvbGxpbmcgbG9naWMgaW4gYGFpb19wb2xsX3dha2VgIGJ5IHVuY29uZGl0aW9uYWxseSBkZWZlcnJpbmcgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgdG8gYSB3b3JrcXVldWUsIGluc3RlYWQgb2YgY2hlY2tpbmcgYGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQUlPKSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo1NC45NjIyMjMxODZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDY5NTU0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo1NC45NjI3MDU5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTkwNjQ2ODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZGVmZXJyaW5nIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMgaW4gYGFpb19wb2xsX3dha2VgIHRvIGF2b2lkIGRlYWRsb2NrcyBjYXVzZWQgYnkgdGFraW5nIHRoZSBzYW1lIHdhaXRxdWV1ZSBsb2NrIGFnYWluIHRocm91Z2ggZXBvbGwuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGxvY2tpbmcvZGVhZGxvY2sgaXNzdWUsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiYzc5NTUzMDg2NmQwNmRkNThiNGVmOWU5OWE0MmEzYTBhYTY1NzBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTQ6NTQ6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jXG5pbmRleCBmNTdmYTIxYTI1MDM1Li5lZjgwMTc4MWRhMDhjIDEwMDY0NFxuLS0tIGEvZnMvYWlvLmNcbisrKyBiL2ZzL2Fpby5jXG5AQCAtMTg2OSw3ICsxODY5LDEyIEBAIHN0YXRpYyBpbnQgYWlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cmVxLVx1MDAzZXdhaXQuZW50cnkpO1xuIFx0XHRsaXN0X2RlbChcdTAwMjZpb2NiLVx1MDAzZWtpX2xpc3QpO1xuIFx0XHRpb2NiLVx1MDAzZWtpX3Jlcy5yZXMgPSBtYW5nbGVfcG9sbChtYXNrKTtcbi1cdFx0aWYgKGlvY2ItXHUwMDNla2lfZXZlbnRmZCBcdTAwMjZcdTAwMjYgIWV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBXZSBob2xkIGFuIGFyYml0cmFyeSBwcm92aWRlciB3YWl0cXVldWUgbG9jayBoZXJlLiAgU2lnbmFsaW5nIGFcbitcdFx0ICogcmVzdWx0IGV2ZW50ZmQgY2FuIGZlZWQgYmFjayB0aHJvdWdoIGVwb2xsIGFuZCB0cnkgdG8gdGFrZSB0aGUgc2FtZVxuK1x0XHQgKiBsb2NrIGFnYWluLiAgRGVmZXIgYWxsIGV2ZW50ZmQtYmFja2VkIHBvbGwgY29tcGxldGlvbnMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoaW9jYi1cdTAwM2VraV9ldmVudGZkKSB7XG4gXHRcdFx0aW9jYiA9IE5VTEw7XG4gXHRcdFx0SU5JVF9XT1JLKFx1MDAyNnJlcS1cdTAwM2V3b3JrLCBhaW9fcG9sbF9wdXRfd29yayk7XG4gXHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZyZXEtXHUwMDNld29yayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NDo1NC45NjI3MDY2NzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkwNjQ0MDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQUlPIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWlvX3BvbGxfd2FrZWAgaW4gYGZzL2Fpby5jYC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBjaGFuZ2UgaXMgcmVtb3ZpbmcgdGhlIGAhZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpYCBjaGVjaywgd2hpY2ggY2hhbmdlcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIGV2ZW50ZmQgc2lnbmFsaW5nIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGludm9sdmluZyB3YWl0cXVldWUgbG9ja3MuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgbWVudGlvbnMgYSBzaXR1YXRpb24gd2hlcmUgc2lnbmFsaW5nIGEgcmVzdWx0IGV2ZW50ZmQgY2FuIGxlYWQgdG8gcmUtYWNxdWlyaW5nIHRoZSBzYW1lIGxvY2sgdGhyb3VnaCBgZXBvbGxgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0IGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgaW4gdGhlIGBhaW9fcG9sbF93YWtlYCBmdW5jdGlvbiBpdHNlbGYuIFdpdGhpbiB0aGUgc3BpbmxvY2stcHJvdGVjdGVkIHNlY3Rpb24sIGlmIGBpb2NiLVx1MDAzZWtpX2V2ZW50ZmRgIGlzIHNldCwgYSB3b3JrIGl0ZW0gaXMgc2NoZWR1bGVkIHVzaW5nIGBzY2hlZHVsZV93b3JrYC4gVGhpcyBpcyBkb25lICppbnN0ZWFkKiBvZiBkaXJlY3RseSBjb21wbGV0aW5nIHRoZSBBSU8gb3BlcmF0aW9uLiBUaGUgY29tbWVudGVkIHRleHQgcmVpbmZvcmNlcyB0aGF0IHRoaXMgaXMgYSBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ3k6IGBEZWZlciBhbGwgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9uc2AuXG5cblRoaXMgc2VlbXMgbGlrZSBhIGNsYXNzaWMgbG9ja2luZyBpc3N1ZS4gVGhlIGNvZGUgaXMgY2FyZWZ1bGx5IGRlZmVycmluZyB0aGUgY29tcGxldGlvbiB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBldmVudGZkIHNpZ25hbCBwYXRoIG1pZ2h0IHRyeSB0byBhY3F1aXJlIGEgbG9jayB0aGF0J3MgYWxyZWFkeSBoZWxkLCByZXN1bHRpbmcgaW4gYSBkZWFkbG9jay4gTE9DS0RFUCB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoaXMgdHlwZSBvZiBpc3N1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LCBzbyBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGEgY2xlYW4sIGRlYWRsb2NrLXByZXZlbnRpb24gbWVhc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDo1NTowNC44NjkxNTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkZWZlcnJpbmcgZXZlbnRmZC1iYWNrZWQgcG9sbCBjb21wbGV0aW9ucyBpbiBgYWlvX3BvbGxfd2FrZWAgdG8gYXZvaWQgZGVhZGxvY2tzIGNhdXNlZCBieSB0YWtpbmcgdGhlIHNhbWUgd2FpdHF1ZXVlIGxvY2sgYWdhaW4gdGhyb3VnaCBlcG9sbC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgbG9ja2luZy9kZWFkbG9jayBpc3N1ZSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRlZmVycmluZyBldmVudGZkLWJhY2tlZCBwb2xsIGNvbXBsZXRpb25zIGluIGBhaW9fcG9sbF93YWtlYCB0byBhdm9pZCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHRha2luZyB0aGUgc2FtZSB3YWl0cXVldWUgbG9jayBhZ2FpbiB0aHJvdWdoIGVwb2xsLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBsb2NraW5nL2RlYWRsb2NrIGlzc3VlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[1] Phase: Succeeded StartedAt: 2026-08-13 14:55:16 +0000 UTC FinishedAt: 2026-08-13 14:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 14:55:16 +0000 UTC FinishedAt: 2026-08-13 14:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2] Phase: Succeeded StartedAt: 2026-08-13 14:55:16 +0000 UTC FinishedAt: 2026-08-13 16:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 14:55:16 +0000 UTC FinishedAt: 2026-08-13 16:26:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 14:55:16 +0000 UTC FinishedAt: 2026-08-13 14:55:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 14:55:16 +0000 UTC FinishedAt: 2026-08-13 14:55:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzbgdg/series-workflowzbgdg-convert-artifact-1880259313/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 14:55:26 +0000 UTC FinishedAt: 2026-08-13 15:12:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 14:55:26 +0000 UTC FinishedAt: 2026-08-13 15:12:04 +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:*a142da3e-6661-4081-ac3d-828916aaac31,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-workflowzbgdg/series-workflowzbgdg-convert-artifact-1880259313/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": "4979e49e-3aab-4ae0-819f-34573064113f", "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-workflowzbgdg/series-workflowzbgdg-build-action-2625451295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:55:26 +0000 UTC FinishedAt: 2026-08-13 15:11:54 +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:*a142da3e-6661-4081-ac3d-828916aaac31,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-workflowzbgdg/series-workflowzbgdg-convert-artifact-1880259313/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": "4979e49e-3aab-4ae0-819f-34573064113f", "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-workflowzbgdg/series-workflowzbgdg-build-action-2625451295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 15:12:04 +0000 UTC FinishedAt: 2026-08-13 15:12:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 15:12:04 +0000 UTC FinishedAt: 2026-08-13 15:12:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 15:12:04 +0000 UTC FinishedAt: 2026-08-13 15:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 15:12:04 +0000 UTC FinishedAt: 2026-08-13 15:12:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzbgdg/series-workflowzbgdg-convert-artifact-2482910532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 15:12:14 +0000 UTC FinishedAt: 2026-08-13 15:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 15:12:14 +0000 UTC FinishedAt: 2026-08-13 15:14:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4979e49e-3aab-4ae0-819f-34573064113f,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-workflowzbgdg/series-workflowzbgdg-build-action-2625451295/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-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 15:14:14 +0000 UTC FinishedAt: 2026-08-13 15:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 15:14:14 +0000 UTC FinishedAt: 2026-08-13 15:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 15:14:14 +0000 UTC FinishedAt: 2026-08-13 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 15:14:14 +0000 UTC FinishedAt: 2026-08-13 15:34:43 +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:*a142da3e-6661-4081-ac3d-828916aaac31,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-workflowzbgdg/series-workflowzbgdg-convert-artifact-2482910532/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": "695dc669-06ad-4fbe-bebb-33d8a945e5e9", "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-workflowzbgdg/series-workflowzbgdg-build-action-57957712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 15:14:14 +0000 UTC FinishedAt: 2026-08-13 15:34:33 +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:*a142da3e-6661-4081-ac3d-828916aaac31,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-workflowzbgdg/series-workflowzbgdg-convert-artifact-2482910532/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": "695dc669-06ad-4fbe-bebb-33d8a945e5e9", "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-workflowzbgdg/series-workflowzbgdg-build-action-57957712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 15:34:43 +0000 UTC FinishedAt: 2026-08-13 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 15:34:43 +0000 UTC FinishedAt: 2026-08-13 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 15:34:43 +0000 UTC FinishedAt: 2026-08-13 15:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 15:34:43 +0000 UTC FinishedAt: 2026-08-13 15:36:34 +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:*695dc669-06ad-4fbe-bebb-33d8a945e5e9,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-workflowzbgdg/series-workflowzbgdg-build-action-57957712/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-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 16:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 16:26:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"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:*4979e49e-3aab-4ae0-819f-34573064113f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*695dc669-06ad-4fbe-bebb-33d8a945e5e9,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-workflowzbgdg/series-workflowzbgdg-build-action-2625451295/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-workflowzbgdg/series-workflowzbgdg-build-action-57957712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 15:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 15:36:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"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-workflowzbgdg/series-workflowzbgdg-convert-artifact-3772918349/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 15:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 15:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 15:36:44 +0000 UTC FinishedAt: 2026-08-13 15:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 15:36:54 +0000 UTC FinishedAt: 2026-08-13 16:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbgdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["aio_poll_wake","aio_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6e0d7a4a76b333aadafbea7f1826e905f0765a42","config_name":"upstream-apparmor-kasan.config","enable_configs":["AIO"],"series_id":"f0baef03-4a00-4945-a036-2f185256bb69","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 15:36:54 +0000 UTC FinishedAt: 2026-08-13 16:26:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4979e49e-3aab-4ae0-819f-34573064113f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*695dc669-06ad-4fbe-bebb-33d8a945e5e9,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-workflowzbgdg/series-workflowzbgdg-build-action-2625451295/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-workflowzbgdg/series-workflowzbgdg-build-action-57957712/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-workflowzbgdg/series-workflowzbgdg-convert-artifact-3772918349/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,}