Name: series-workflow9jgq2 Phase: Succeeded StartedAt: 2026-09-08 06:57:30 +0000 UTC FinishedAt: 2026-09-08 11:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[0] Phase: Succeeded StartedAt: 2026-09-08 06:57:30 +0000 UTC FinishedAt: 2026-09-08 07:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 06:57:30 +0000 UTC FinishedAt: 2026-09-08 07:20:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "349e46dc-3a6f-4ac8-bfd0-2154f8e25c41" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgYW5kIGBrbXNhbl9hbGxvY19wYWdlKClgIGhvb2sgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBQQ1AgbGlzdC5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9sZW5ndGhzLiBBbGwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGUgbmV3IGNhbGxzIChgcGFnZWAsIGAwYCwgYGdmcGAsIGBhYy5taWdyYXRldHlwZWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3Npbmcga21zYW5fYWxsb2NfcGFnZSgpIGFuZCB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgY2FsbHMgdG8gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMuIFRoaXMgZW5zdXJlcyBLTVNBTiBwcm9wZXJseSBpbml0aWFsaXplcyBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgYnVsayBwYWdlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nIHdpdGggS01TQU4gZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmMmFmOTZkMTBmNmFhZGU0NjkxZGFhNzE3Njc2ZTliNzY4ZjZlODFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjE4OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uNzNjNzM0OTlhMDUxYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI4MCw2ICYjNDM7NTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuJiM0MztcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbiYjNDM7XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZjJhZjk2ZDEwZjZhYWRlNDY5MWRhYTcxNzY3NmU5Yjc2OGY2ZTgxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNzoxODozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi43M2M3MzQ5OWEwNTFiIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01MjgwLDYgJiM0Mzs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCiAJCXByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTsKIAkJc2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTsKJiM0MzsJCXRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7CiYjNDM7CQlrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCAmYW1wOyB+X19HRlBfUkVDTEFJTSk7CiAJCXBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTGludXggS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGZ1enppbmcuIFN0YW5kYXJkIHRyaWFnZSBzdHVmZi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoaXMgaXMgYmVuaWduLiBJdCYjMzk7cyBhYm91dCBub3JtYWwgZGV2ZWxvcGVyIFFBLCBqdXN0IG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgcGxheWluZyBuaWNlbHkgd2l0aCB0aGUga2VybmVsIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUsIGFzIGV4cGVjdGVkLgoKSSYjMzk7dmUgZ290IHRoZSBkaWZmIGluIGZyb250IG9mIG1lOiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoaXMgaXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBkdXJpbmcgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcywgd2hhdCBjb250ZXh0cyBpdCYjMzk7cyBjYWxsZWQgaW4sIGFuZCBpZiB0aGVzZSBhZGRlZCBjYWxscyBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIHRyaWdnZXJpbmcgYW55IG5ldywgZXhwbG9pdGFibGUgY29kZSBwYXRocy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzIOKAkyBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBuYXZpZ2F0ZSB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRcdHBjcF9saXN0ID0gXHUwMDI2cGNwLVx1MDAzZWxpc3RzW29yZGVyX3RvX3BpbmRleChhYy5taWdyYXRldHlwZSwgMCldO1xuNTI2MTpcdFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcdTAwM2MgbnJfcGFnZXMpIHtcbjUyNjI6XHRcbjUyNjM6XHRcdFx0LyogU2tpcCBleGlzdGluZyBwYWdlcyAqL1xuNTI2NDpcdFx0XHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XG41MjY1Olx0XHRcdFx0bnJfcG9wdWxhdGVkJiM0MzsmIzQzOztcbjUyNjY6XHRcdFx0XHRjb250aW51ZTtcbjUyNjc6XHRcdFx0fVxuNTI2ODpcdFxuNTI2OTpcdFx0XHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxuNTI3MDpcdFx0XHRcdFx0XHRcdFx0XHRwY3AsIHBjcF9saXN0KTtcbjUyNzE6XHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuNTI3MjpcdFx0XHRcdC8qIFRyeSBhbmQgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2UgKi9cbjUyNzM6XHRcdFx0XHRpZiAoIW5yX2FjY291bnQpIHtcbjUyNzQ6XHRcdFx0XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI3NTpcdFx0XHRcdFx0Z290byBmYWlsZWQ7XG41Mjc2Olx0XHRcdFx0fVxuNTI3NzpcdFx0XHRcdGJyZWFrO1xuNTI3ODpcdFx0XHR9XG41Mjc5Olx0XHRcdG5yX2FjY291bnQmIzQzOyYjNDM7O1xuNTI4MDpcdFxuNTI4MTpcdFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG41MjgyOlx0XHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG41MjgzOlx0XHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG41Mjg0Olx0XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG41Mjg1Olx0XHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuNTI4NjpcdFx0fVxuNTI4NzpcdFxuNTI4ODpcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjg5Olx0XG41MjkwOlx0XHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xuNTI5MTpcdFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcbjUyOTI6XHRcbjUyOTM6XHRvdXQ6XG41Mjk0Olx0XHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xuNTI5NTpcdFxuNTI5NjpcdGZhaWxlZDpcbjUyOTc6XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcbjUyOTg6XHRcdGlmIChwYWdlKVxuNTI5OTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUzMDA6XHRcdGdvdG8gb3V0O1xuNTMwMTpcdH1cbjUzMDI6XHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG41MzAzOlx0XG41MzA0Olx0LypcbjUzMDU6XHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcbjUzMDY6XHQgKiBAcGFnZV9hcnJheTogQXJyYXkgb2YgcGFnZXMgdG8gZnJlZVxuNTMwNzpcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcbjUzMDg6XHQgKlxuNTMwOTpcdCAqIEZyZWUgdGhlIG9yZGVyLTAgcGFnZXMuIEFkamFjZW50IGVudHJpZXMgd2hvc2UgUEZOcyBmb3JtIGEgY29udGlndW91c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIHJlY2VudCBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGB0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCAmYW1wOyB+X19HRlBfUkVDTEFJTSk7YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgY2FsbHMgcGFydCBvZiB0aGUgKmJ1bGsqIHBhZ2UgYWxsb2NhdGlvbiBwYXRoLCBpLmUuLCBpbnNpZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYD8gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gYmVjYXVzZSBidWxrIGFsbG9jYXRpb24gaGFzIGl0cyBvd24gc2V0IG9mIG9wdGltaXphdGlvbnMgYW5kIGNvbnN0cmFpbnRzLgoKVG8gY29uZmlybSAob3IgZGVueSkgdGhpcywgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEkmIzM5O2xsIGRpdmUgaW50byBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgcGxhbiBpcyB0byBzZWFyY2ggdGhlIHNvdXJjZSBmb3IgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdGlvbiBwYXRocy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIHdoZXJlIGBwcmVwX25ld19wYWdlYCBpcyBjYWxsZWQgYW5kIGhvdyBga21zYW5fYWxsb2NfcGFnZWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBhZGRpdGlvbnMgZml0IGludG8gdGhlIGJyb2FkZXIgcGFnZSBhbGxvY2F0aW9uIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbXNhbl9hbGxvY19wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jPTE2OT1FWFBPUlRfU1lNQk9MKGttc2FuX2NvcHlfcGFnZV9tZXRhKTtcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzIte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0Olx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xubW0vcGFnZV9hbGxvYy5jLTUyODUtXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcbm1tL3BhZ2VfYWxsb2MuYy01MzcyLSAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjU0NjI6XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBmZWVscyAqb2ZmKi4gSSBzZWUgaXQgaGFzIGBwcmVwX25ld19wYWdlYCwgYW5kIGl0JiMzOTtzIHNldHRpbmcgdGhlIHBhZ2UgYXMgcmVmY291bnRlZCwgd2hpY2ggaXMgZ29vZC4gQnV0IHdhaXTigKYgaXQmIzM5O3MgbWlzc2luZyB0aGUgdXN1YWwgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCB0aGUgS01TQU4gYWxsb2NhdGlvbiBjYWxsLiBUaGF0IG9taXNzaW9uIGlzLCBhdCBhIG1pbmltdW0sIHBlY3VsaWFyLCBhbmQgd29ydGggaW52ZXN0aWdhdGluZy4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBJIGhhdmUgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6ICpkb24mIzM5O3QqIGJsaW5kbHkgdHJ1c3QgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciByZWZhY3RvcmluZy4gUmVhY2hhYmlsaXR5IGlzIHRoZSB0b3AgcHJpb3JpdHkuCgpSaWdodCwgc28gdG8gbWFrZSB0aGUgY2FsbCwgSSBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIG5lZ2F0aXZlICphbmQqIHBvc2l0aXZlIGNyaXRlcmlhLiBJIHdpbGwgb25seSByZXR1cm4gZmFsc2UgaWYgYWxsIGNoYW5nZXMgZmFsbCBpbnRvIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhLCBvdGhlcndpc2UgSSBzaG91bGQgcmV0dXJuIHRydWUuCgpJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIGlzbiYjMzk7dOKApgoqICAgRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzCiogICBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzCiogICBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nCiogICBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzCgpBbmQgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFsc28gaW5jbHVkZXMgaGFyZHdhcmUgdGhhdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4KCkJ1dCBpZiBpdCBpbnZvbHZlcyBzb21ldGhpbmcgbGlrZSwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgQlBGLCB0aGUgc2NoZWR1bGVyLCBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcsIGl0JiMzOTtzIGEgZGVmaW5pdGUgZ28uCgpTbyBiYWNrIHRvIG15IG9yaWdpbmFsIHRob3VnaHQsIHdoYXQgaXMgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwICZhbXA7IH5fX0dGUF9SRUNMQUlNKWAgKmFjdHVhbGx5KiBkb2luZz8gVGhhdCYjMzk7cyB0aGUgcmVhbCBjcnV4IGhlcmUuIExldCBtZSBkZWx2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byByZXZpZXcgYG1tL2ttc2FuL3NoYWRvdy5jYCBhbmQgYGluY2x1ZGUvbGludXgva21zYW4uaGAgdG8gc2VlIGV4YWN0bHkgd2hhdCB0aGlzIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBhZGRpbmcgdG8gdGhlIHBhZ2UgYWxsb2NhdGlvbi4gSWYgaXQmIzM5O3MgZG9pbmcgc29tZXRoaW5nIGNydWNpYWwsIHRoZW4gdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnV6emluZyB0YXJnZXQgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgbW0gc3Vic3lzdGVtLCBhbmQgdGhlcmVmb3JlIGlzIGEgcG9zaXRpdmUuIEJ1dCBpZiBpdCYjMzk7cyBwdXJlbHkgZGVjb3JhdGl2ZSwgdGhlbiBtYXliZSBub3QuIExldCYjMzk7cyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rbXNhbi9zaGFkb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XG4gMTcxOlx0dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxuIDE3MjpcdHtcbiAxNzM6XHRcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pIHx8ICFrbXNhbl9lbmFibGVkO1xuIDE3NDpcdFx0c3RydWN0IHBhZ2UgKnNoYWRvdywgKm9yaWdpbjtcbiAxNzU6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiAxNzY6XHRcdGludCBwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKCFwYWdlKVxuIDE3OTpcdFx0XHRyZXR1cm47XG4gMTgwOlx0XG4gMTgxOlx0XHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XG4gMTgyOlx0XHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAoaW5pdGlhbGl6ZWQpIHtcbiAxODU6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODY6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODc6XHRcdFx0cmV0dXJuO1xuIDE4ODpcdFx0fVxuIDE4OTpcdFxuIDE5MDpcdFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXG4gMTkxOlx0XHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxuIDE5MjpcdFx0XHRyZXR1cm47XG4gMTkzOlx0XG4gMTk0Olx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxOTU6XHRcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcbiAxOTY6XHRcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XG4gMTk3Olx0XHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XG4gMTk4Olx0XHQvKlxuIDE5OTpcdFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCYjMzk7cyBva1xuIDIwMDpcdFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxuIDIwMTpcdFx0ICovXG4gMjAyOlx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSYjNDM7JiM0MzspXG4gMjAzOlx0XHRcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XG4gMjA0Olx0fVxuIDIwNTpcdFxuIDIwNjpcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gMjA3Olx0e1xuIDIwODpcdFx0aWYgKCFrbXNhbl9lbmFibGVkIHx8IGttc2FuX2luX3J1bnRpbWUoKSlcbiAyMDk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiB3aXRoIEtNU0FOKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCwgc3BlY2lmaWNhbGx5IHRoaXMgYHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSlgIGNhbGwuIEl0JiMzOTtzIGEgdHJhY2Vwb2ludCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBnaXZlcyBtZSBhIHdpbmRvdyBpbnRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGVuLCBJIHNlZSBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pO2AuIEFoLCByaWdodCwgS01TQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBwYWdlIGFsbG9jYXRpb24uIEJ1dCB3YWl0IGEgc2Vjb25kLi4uSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBoYXBwZW5zIGlmIEtNU0FOIGlzICpkaXNhYmxlZCouICBJZiBgIUNPTkZJR19LTVNBTmAsIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW5zaWRlIHRoYXQgYGttc2FuX2FsbG9jX3BhZ2VgIGZ1bmN0aW9uPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmFsbGJhY2sgYmVoYXZpb3IuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgva21zYW4uaGAgdG8gc2VlIHdoYXQgdGhhdCBtYWNybyBldmFsdWF0ZXMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ttc2FuLmg9NTc9Ym9vbCBfX2luaXQgX19tdXN0X2NoZWNrIGttc2FuX21lbWJsb2NrX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYwLS8qKlxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjYxOiAqIGttc2FuX2FsbG9jX3BhZ2UoKSAtIE5vdGlmeSBLTVNBTiBhYm91dCBhbiBhbGxvY19wYWdlcygpIGNhbGwuXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTY4LSAqL1xuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNzAtXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzE4LVxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMyMC1cdFx0XHRcdCAgICBnZnBfdCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBNZXRhZGF0YSBJbml0aWFsaXphdGlvbiBpbiBQYWdlIEFsbG9jYXRpb246IFdvcnRoeSBvZiBGdXp6aW5nPyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBga21zYW5fYWxsb2NfcGFnZWAuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBpcyBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uIFdoZW4gS01TQU4gaXMgYWN0aXZlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBUaGUgcHJldmlvdXMgbGFjayBvZiBLTVNBTiBub3RpZmljYXRpb24gaW4gYnVsayBwYWdlIGFsbG9jYXRpb24gaXMgY29uY2VybmluZywgYXMgaXQgY291bGQgbGVhZCB0byBzdGFsZSBtZXRhZGF0YSBhbmQgbWlzc2VkIG9yIGZhbHNlIHBvc2l0aXZlIGJ1Z3MuCgpOb3csIGxvb2tpbmcgZGVlcGVyLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgbm90IGp1c3QgYSBzaW1wbGUgZnVuY3Rpb24gY2FsbC4gSXQgY2FsbHMgYGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFnc2AsIGFuZCB3cml0ZXMgdG8gc2hhZG93IGFuZCBvcmlnaW4gcGFnZXM7IHRoaXMgaXNuJiMzOTt0IGp1c3QgZGVjb3JhdGlvbiEgVGhlc2UgYWN0aW9ucyAqYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzKi4gTXkgY29uY2VybiB0aGVuIGlzLCAqaXMgdGhpcyBXb3J0aEZ1enppbmc9dHJ1ZSo/CgpMZXQmIzM5O3MgcmUtZXhhbWluZSB0aGUgY3JpdGVyaWEuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAod2hlbiB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWApIHNwZWNpZmljYWxseSBtZW50aW9ucyAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuLi4gb3IgdHJhY2Vwb2ludHMgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4mIzM0OyBJdCBmZWVscyB0aGF0IHRoaXMgaXMgbm90ICpwdXJlbHkqIGRlY29yYXRpdmUsIGFzIGl0IHRvdWNoZXMgdGhlIEtNU0FOIHN0YWNrIGRlcG90LCBhbmQgc2hhZG93IHBhZ2VzLgoKTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBga21zYW5fYWxsb2NfcGFnZWAgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgKmFsdGVycyBkYXRhIHN0cnVjdHVyZXMqIChzaGFkb3cgcGFnZXMsIG9yaWdpbnMsIHRoZSBLTVNBTiBzdGFjayBkZXBvdCkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2hlbiBLTVNBTiBpcyBlbmFibGVkLiAgRnVydGhlcm1vcmUsIGl0IGlzIG1vZGlmeWluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdoaWNoIGlzIGEga2V5IG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiBgbW0vYC4KClRoZXJlZm9yZSwgSSB0aGluayB0aGlzIHNob3VsZCBiZSBgV29ydGhGdXp6aW5nPXRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGNhbGxzIHRoZSBgYWxsb2NfcGFnZXNfYnVsa2AgZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTAtXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XHRcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXHRcdGlmICh1bmxpa2VseShhbGxvY2F0ZWQgPT0gbGFzdCkpIHtcbi0tXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXG4tLVxuZnMvZXJvZnMvenV0aWwuYy04OS1cdFx0XHRsYXN0ID0gajtcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XHRcdFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcbmZzL2Vyb2ZzL3p1dGlsLmMtOTEtXHRcdFx0aWYgKGxhc3QgPT0gailcbi0tXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcdG5yX2FsbG9jID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9wYWdlcywgcGFnZXMpO1xuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVx0aWYgKCFucl9hbGxvYylcbi0tXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmMtMTMzNy1cbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cdTAwM2VuY25fcGFnZXMpO1xuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xuLS1cbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvc3BsaWNlLmMtMzQxLVx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICYjNDM7IG5wYWdlcyk7XG5mcy9zcGxpY2UuYzozNDI6XHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcbmZzL3NwbGljZS5jLTM0My1cdGlmICghbnBhZ2VzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIENhbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgYXJlIHdlIHNlZWluZyBgYWxsb2NfcGFnZXNfYnVsaypgIHVzZWQgaW4gdGhlIGtlcm5lbD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQuIE15IGZpcnN0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSB0aGUgZHJpdmVyIGNvZGUsIHNpbmNlIHRoYXQmIzM5O3MgYSBjb21tb24gYXJlYSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byBhbnkgbmV0d29yay1yZWxhdGVkIGNvZGUuIE5ldHdvcmsgZHJpdmVycyBhcmUgb2Z0ZW4gaGVhdnkgY29uc3VtZXJzIG9mIG1lbW9yeSBhbmQgbWlnaHQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgYWxsb2NfcGFnZXNfYnVsaypgLiBGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChtbSkgY29yZSBpdHNlbGYg4oCTIGl0JiMzOTtzIHBvc3NpYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgbW0gc3Vic3lzdGVtLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCYjMzk7cyBjYWxsaW5nIGBhbGxvY19wYWdlc19idWxrKmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY4NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19wYWdlc19idWxrYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIHNlbWFudGljcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyBpdCBjb3JyZWN0bHkgZm9yIG15IGN1cnJlbnQgdGFzaywgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBkZWZpbml0aW9uLCBzbyBJJiMzOTttIG9wZW5pbmcgdXAgYGluY2x1ZGUvbGludXgvZ2ZwLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxhZ3MgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiwgdGhlIHBhcmFtZXRlcnMsIGFuZCBhbnkgcGVydGluZW50IGNvbW1lbnRzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIGNhdmVhdHMuIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBmbGFncyBiZWluZyB1c2VkIGlzIGN1cnJlbnQgYW5kIGNvcnJlY3QuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTItXHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNTojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2Olx0X19hbGxvY19wYWdlc19idWxrKF9nZnAsIG51bWFfbWVtX2lkKCksIE5VTEwsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjk6YWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnBfdCBnZnAsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cdFx0XHRcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1Olx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBOVUxMLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM4OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsa19ub2RlKC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjkwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZm9yIEZvY3VzU3ltYm9sIENvbnNpZGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHRoZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbiBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBhIEZvY3VzU3ltYm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHdoZXRoZXIgaXQgZml0cyB0aGUgY3JpdGVyaWEgZm9yIGluY2x1c2lvbi4KClJpZ2h0LCB0aW1lIHRvIGNoZWNrIFNlY3Rpb24gNCBvZiB0aGUgZ3VpZGVsaW5lcy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzOiAmIzM0O0FWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUy4mIzM0OyBUaGV5IGV4cGxpY2l0bHkgbWVudGlvbiBhdm9pZGluZyB0aGluZ3MgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiBTbywgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdWJpcXVpdG91cyo/IElzIGl0IGxpa2UgYSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIG9yIGBrbWFsbG9jYD8KCk5vLCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBzby4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyAqc3BlY2lmaWMqIHRvIGJ1bGsgYWxsb2NhdGlvbi4gSXQmIzM5O3MgY2FsbGVkIGJ5IHBhcnRpY3VsYXIgc3Vic3lzdGVtcy4gSSByZW1lbWJlciBpdCBmcm9tIGBjb3B5X3NwbGljZV9yZWFkYCBpbiBzcGxpY2UsIGZ1c2UgcmVhZGRpciwgcGFnZV9wb29sLCBidHJmcywgc3ZjX2ZpbGxfcGFnZXMgYW5kIHRoZSBsaWtlLiBJdCBpbXBsZW1lbnRzICpzcGVjaWZpYyogbG9naWMgYW5kIHNlcnZlcyBhcyBhIHRhcmdldGVkIGVudHJ5cG9pbnQgZm9yIGNlcnRhaW4gZmVhdHVyZXMuIFNvLCBpdCYjMzk7cyAqbm90KiBhIGdlbmVyYWwgYWxsb2NhdG9yIHRoYXQgZXZlcnl0aGluZyB1c2VzLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLgoKT2theSwgSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIGRvIGEgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBib3RoIGBhbGxvY19wYWdlc19idWxrYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MTcyPXN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVx0ICpcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDYtXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA4LVx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3NlZ3MsIHBhZ2VzKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM6NDI6XHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXHRcdFx0XHRcdFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2NC1cdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyLCBBUl9CVUZGRVJTLCBwYWdlcyk7XG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYz02MjE9c3RhdGljIGludCBhbGxvY19wcml2YXRlX3BhZ2VzKHN0cnVjdCBobW1fYnVmZmVyX29iamVjdCAqYm8pXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyNzpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXHUwMDNlcGduciwgYm8tXHUwMDNlcGFnZXMpO1xuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXHQvKlxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjk6XHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cdCAqIHByZXNzdXJlLiBJZiBuZWNlc3NhcnkgZmFsbCBiYWNrIHRvIGFsbG9jX3BhZ2UoKS5cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlx0LyogVW5kbyBhbGxvY19wYWdlc19idWxrKCkgKi9cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVx0Zm9yICg7Oykge1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjUwNzpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA4LVx0XHRcdFx0XHQgICpwYWdlX2xpc3QgJiM0MzsgZG9uZSk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTYzPXN0YXRpYyBpbnQgdmlydGlvdmZfYWRkX21pZ3JhdGlvbl9wYWdlcyhzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXHRkbyB7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XHRcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCB0b19maWxsLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVx0XHRcdFx0XHQgIHBhZ2VfbGlzdCk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0Olx0LyogVW5kbyBhbGxvY19wYWdlc19idWxrKCkgKi9cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXHUwMDI2YnVmLVx1MDAzZXRhYmxlLnNndCwgXHUwMDI2c2dfaXRlciwgMClcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTAtXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XHRcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXHRcdGlmICh1bmxpa2VseShhbGxvY2F0ZWQgPT0gbGFzdCkpIHtcbi0tXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXG4tLVxuZnMvZXJvZnMvenV0aWwuYy04OS1cdFx0XHRsYXN0ID0gajtcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XHRcdFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcbmZzL2Vyb2ZzL3p1dGlsLmMtOTEtXHRcdFx0aWYgKGxhc3QgPT0gailcbi0tXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcdG5yX2FsbG9jID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9wYWdlcywgcGFnZXMpO1xuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVx0aWYgKCFucl9hbGxvYylcbi0tXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmMtMTMzNy1cbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cdTAwM2VuY25fcGFnZXMpO1xuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xuLS1cbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvc3BsaWNlLmMtMzQxLVx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICYjNDM7IG5wYWdlcyk7XG5mcy9zcGxpY2UuYzozNDI6XHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcbmZzL3NwbGljZS5jLTM0My1cdGlmICghbnBhZ2VzKSB7XG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMDc9c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxMTp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMy1cdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXHRcdFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTUtXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxODp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMC1cdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNC0vKiBCdWxrIGFsbG9jYXRlIG9yZGVyLTAgcGFnZXMgKi9cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjY6XHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMjg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVx0XHRcdFx0ICAgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzU6XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5Olx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cbi0tXG5pb191cmluZy9tZW1tYXAuYz0xNzQ9c3RhdGljIGludCBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cbmlvX3VyaW5nL21lbW1hcC5jOjE5MzpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cdFx0XHRcdFx0ICAgICBtci1cdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MzItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlx0XHQvKiB6ZXJvaW5nIGlzIG5lZWRlZCwgc2luY2UgYWxsb2NfcGFnZXNfYnVsaygpIG9ubHkgZmlsbHMgaW4gbm9uLXplcm8gZW50cmllcyAqL1xua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cdFx0bWVtc2V0KHBhZ2VzLCAwLCB0aGlzX2JhdGNoICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTtcbi0tXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBtYXBfbnJfcGFnZXMsIHBhZ2VzKTtcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02Ni1cdFx0bGFzdCA9IGdvdDtcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjY3Olx0XHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjgtXG4tLVxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy03OTMtXG5tbS9hbGxvY190YWcuYzo3OTQ6XHRcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXG5tbS9hbGxvY190YWcuYy03OTUtXHRcdFx0XHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICYjNDM7IG5yKTtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDAte1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cdHdoaWxlIChucl9wYWdlcykge1xubW0va2FzYW4vc2hhZG93LmM6MzQ1Olx0XHRucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcF9tYXNrLCBucl9wYWdlcywgcGFnZXMpO1xubW0va2FzYW4vc2hhZG93LmMtMzQ2LVx0XHRpZiAoIW5yX3BvcHVsYXRlZCkge1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzY5LVx0XHRucl9wYWdlcyA9IG1pbihucl90b3RhbCwgUEFHRV9TSVpFIC8gc2l6ZW9mKGRhdGEucGFnZXNbMF0pKTtcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcdFx0cmV0ID0gX19fYWxsb2NfcGFnZXNfYnVsayhkYXRhLnBhZ2VzLCBucl9wYWdlcywgZ2ZwX21hc2spO1xubW0va2FzYW4vc2hhZG93LmMtMzcxLVx0XHRpZiAocmV0KVxuLS1cbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xubW0vbWVtcG9saWN5LmMtMjU5MC1cbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI1OTItXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjA3LVx0XHRpZiAoZGVsdGEpIHtcbm1tL21lbXBvbGljeS5jOjI2MDg6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYwOS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MTMtXHRcdH0gZWxzZSB7XG5tbS9tZW1wb2xpY3kuYzoyNjE0Olx0XHRcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MTUtXHRcdFx0XHRcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYyNy1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NjQtXHRcdG5vZGVfcGFnZXMgPSBtaW4ocmVtX3BhZ2VzLCB3ZWlnaHQpO1xubW0vbWVtcG9saWN5LmM6MjY2NTpcdFx0bnJfYWxsb2NhdGVkID0gX19hbGxvY19wYWdlc19idWxrKGdmcCwgbm9kZSwgTlVMTCwgbm9kZV9wYWdlcyxcbm1tL21lbXBvbGljeS5jLTI2NjYtXHRcdFx0XHRcdFx0ICBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzAxLVx0Lypcbm1tL21lbXBvbGljeS5jOjI3MDI6XHQgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy5cbm1tL21lbXBvbGljeS5jLTI3MDMtXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuLS1cbm1tL21lbXBvbGljeS5jLTI3MjktXHRcdFx0YnJlYWs7XG5tbS9tZW1wb2xpY3kuYzoyNzMwOlx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjczMS1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3NDMtXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxubW0vbWVtcG9saWN5LmMtMjc0NS1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NTMtXG5tbS9tZW1wb2xpY3kuYzoyNzU0Olx0bnJfYWxsb2NhdGVkICA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG5pZCwgXHUwMDI2cG9sLVx1MDAzZW5vZGVzLFxubW0vbWVtcG9saWN5LmMtMjc1NS1cdFx0XHRcdFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3NTctXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9wYWdlcylcbm1tL21lbXBvbGljeS5jOjI3NTg6XHRcdG5yX2FsbG9jYXRlZCAmIzQzOz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcbm1tL21lbXBvbGljeS5jLTI3NTktXHRcdFx0XHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzY5LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxubW0vbWVtcG9saWN5LmMtMjc4MC1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXG5tbS9tZW1wb2xpY3kuYzoyNzgxOlx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxubW0vbWVtcG9saWN5LmMtMjc4Mi1cdFx0XHRcdFx0XHRcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc4NC1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXG5tbS9tZW1wb2xpY3kuYzoyNzg1Olx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxubW0vbWVtcG9saWN5LmMtMjc4Ni1cdFx0XHRcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg4LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXG5tbS9tZW1wb2xpY3kuYzoyNzg5Olx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzkwLVx0XHRcdFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3OTMtXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXHUwMDI2bmlkKTtcbm1tL21lbXBvbGljeS5jOjI3OTQ6XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxubW0vbWVtcG9saWN5LmMtMjc5NS1cdFx0XHRcdCAgICAgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxubW0vcGFnZV9hbGxvYy5jLTUxNDEtICogQGdmcDogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvblxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMwMS19XG5tbS9wYWdlX2FsbG9jLmM6NTMwMjpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cbi0tXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTc0NzAtICpcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cbi0tXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS92bWFsbG9jLmMtMzc0My1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXHUwMDI2XHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXG5tbS92bWFsbG9jLmM6Mzc0NDpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbi0tXG5tbS92bWFsbG9jLmMtMzc0Ny1cdFx0XHRlbHNlXG5tbS92bWFsbG9jLmM6Mzc0ODpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0Olx0LyogTWFyayBlbXB0eSBhbGxvYy5jYWNoZSBzbG90cyBcJiMzNDtlbXB0eVwmIzM0OyBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM1LVx0bWVtc2V0KFx1MDAyNnBvb2wtXHUwMDNlYWxsb2MuY2FjaGUsIDAsIHNpemVvZih2b2lkICopICogYnVsayk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XHRucl9wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIHBvb2wtXHUwMDNlcC5uaWQsIGJ1bGssXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXHRcdFx0XHRcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cdTAwM2VhbGxvYy5jYWNoZSk7XG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTItXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo2OTM6XHRcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjk0LVx0XHRpZiAocmV0IFx1MDAzZSBmaWxsZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGEgZ2VuZXJpYyBsaWZlY3ljbGUgZnVuY3Rpb24gb3IgYSBmZWF0dXJlIHN5bWJvbC4gTXkgZ3V0IHNheXMgaXTigJlzIHJlbGF0ZWQgdG8gYnVsayBtZW1vcnkgYWxsb2NhdGlvbiwgd2hpY2ggdHJpZ2dlcnMgYSBxdWljayByZXZpZXcgb2YgUnVsZSA0LiBSaWdodCwgYXZvaWQgbGlzdGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBmdW5jdGlvbnMgbGlrZSBnZW5lcmFsIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgYW5kIHN5bmMgcHJpbWl0aXZlcyBiZWNhdXNlIHRoYXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuCgpUaGUga2V5IGlzIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgaG90LXBhdGggY2FsbGVkIGluIG5lYXJseSBldmVyeSBwcm9ncmFtIGV4ZWN1dGlvbi4gVG8gZmlndXJlIHRoaXMgb3V0LCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbGVyczogYGNvcHlfc3BsaWNlX3JlYWRgLCBgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYCwgYW5kLCBvZiBjb3Vyc2UsIGl0c2VsZiBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBJcyBpdCBjYWxsZWQgb24gKmV2ZXJ5KiBzeXprYWxsZXIgcHJvZ3JhbSBleGVjdXRpb24/IE5vLCB0aGF04oCZcyBub3QgcmlnaHQuIFRoZSBnZW5lcmFsIGFsbG9jYXRpb24gcGF0aCBpcyBtb3JlIGxpa2VseSBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBga21hbGxvY2AsIG9yIGBrbWVtX2NhY2hlX2FsbG9jYC4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBzdWJzeXN0ZW1zOiB2bWFsbG9jLCBgc3BsaWNlYCwgYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2AsIGBidHJmc2AsIGBwYWdlX3Bvb2xgIGFtb25nIG90aGVycy4KCkFoYSEgTm93IEkgc2VlIGEgY29ubmVjdGlvbiB0byBga21zYW5fYWxsb2NfcGFnZWAuIFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIG5vdyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBzbyBpZiBLTVNBTiBpcyBlbmFibGVkLCBga21zYW5fYWxsb2NfcGFnZWAgKmlzKiB1YmlxdWl0b3VzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBjYWxsZWQgaW4gZXZlcnkgbm9ybWFsIHBhZ2UgYWxsb2NhdGlvbi4gQnV0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgc3RpbGwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBvbmx5IGRlZmluZWQgaWYgYENPTkZJR19LTVNBTmAgaXMgc2V0IChvdGhlcndpc2UsIGl0JiMzOTtzIGp1c3QgYSBzdGF0aWMgaW5saW5lKS4gQWxzbywgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGRlZmluZWQgd2hlbiB0cmFjZXBvaW50cyBhcmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBndWFyZGVkIGJ5IGFueSBzcGVjaWZpYyBjb25maWdzLiBOZWVkIHRvIGNoZWNrIGBtbS9wYWdlX2FsbG9jLmNgIGFyb3VuZCBsaW5lcyA1MTUwLTUzMTAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTUwOlx0ICogTm90ZSB0aGF0IG9ubHkgdGhlIGVsZW1lbnRzIGluIEBwYWdlX2FycmF5IHRoYXQgd2VyZSBjbGVhcmVkIHRvICVOVUxMIG9uXG41MTUxOlx0ICogZW50cnkgYXJlIHBvcHVsYXRlZCB3aXRoIG5ld2x5IGFsbG9jYXRlZCBwYWdlcy4gQG5yX3BhZ2VzIGlzIHRoZSBtYXhpbXVtXG41MTUyOlx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGFycmF5LlxuNTE1MzpcdCAqXG41MTU0Olx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIEBwYWdlX2FycmF5LCBpbmNsdWRpbmcgb25lcyBhbHJlYWR5XG41MTU1Olx0ICogYWxsb2NhdGVkIG9uIGVudHJ5LiAgVGhpcyBjYW4gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkIGluIEBucl9wYWdlcyxcbjUxNTY6XHQgKiBidXQgYWxsIGVtcHR5IHNsb3RzIGFyZSBmaWxsZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiAgSS5lLiwgaWYgYWxsIHNsb3RzIGluXG41MTU3Olx0ICogQHBhZ2VfYXJyYXkgd2VyZSBzZXQgdG8gJU5VTEwgb24gZW50cnksIHRoZSBzbG90cyBmcm9tIDAgdG8gdGhlIHJldHVybiB2YWx1ZVxuNTE1ODpcdCAqIC0gMSB3aWxsIGJlIGZpbGxlZC5cbjUxNTk6XHQgKi9cbjUxNjA6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG41MTYxOlx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbjUxNjI6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG41MTYzOlx0e1xuNTE2NDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41MTY1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjUxNjY6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNTE2NzpcdFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcbjUxNjg6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xuNTE2OTpcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XG41MTcwOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XG41MTcxOlx0XHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XG41MTcyOlx0XG41MTczOlx0XHQvKlxuNTE3NDpcdFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXG41MTc1Olx0XHQgKiB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIGRpc2FibGluZyBJUlFzLlxuNTE3NjpcdFx0ICovXG41MTc3Olx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgcGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKVxuNTE3ODpcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTE3OTpcdFxuNTE4MDpcdFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xuNTE4MTpcdFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gMCkpXG41MTgyOlx0XHRcdGdvdG8gb3V0O1xuNTE4MzpcdFxuNTE4NDpcdFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXG41MTg1Olx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXG41MTg2Olx0XHRcdGdvdG8gb3V0O1xuNTE4NzpcdFxuNTE4ODpcdFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xuNTE4OTpcdFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IChnZnAgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk0NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLTVNBTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBLTVNBTiBkaXJlY3RseSBuZWVkcyBgQ09ORklHX0tNU0FOYCwgbmF0dXJhbGx5LiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gdG8gdHJ1bHkgZXhlcmNpc2UgdGhlIGBrbXNhbl9hbGxvY19wYWdlYCBob29rIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLCB0aGUgYEtNU0FOYCBvcHRpb24gKmlzKiByZWxldmFudCwgZXZlbiB0aG91Z2ggYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBjb21waWxlcyByZWdhcmRsZXNzLiBTbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgbGlua2VkIHVwLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtNU0FOYC4gSSYjMzk7bGwgZGlnIHRocm91Z2ggYGxpYi9LY29uZmlnLmttc2FuYCBhbmQgYG1tL2thc2FuL0tjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLTVNBTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5rbXNhbj01PWNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4tLVxubGliL0tjb25maWcua21zYW4tNy1cbmxpYi9LY29uZmlnLmttc2FuOjg6Y29uZmlnIEtNU0FOXG5saWIvS2NvbmZpZy5rbXNhbi05LVx0Ym9vbCBcJiMzNDtLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW49MjY9aWYgS01TQU5cbmxpYi9LY29uZmlnLmttc2FuLTI3LVxubGliL0tjb25maWcua21zYW46Mjg6Y29uZmlnIEtNU0FOX0NIRUNLX1BBUkFNX1JFVFZBTFxubGliL0tjb25maWcua21zYW4tMjktXHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW4tNDEtXG5saWIvS2NvbmZpZy5rbXNhbjo0Mjpjb25maWcgS01TQU5fS1VOSVRfVEVTVFxubGliL0tjb25maWcua21zYW4tNDMtXHR0cmlzdGF0ZSBcJiMzNDtLTVNBTiBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEtNU0FOIERlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIEtNU0FOLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IEtNU0FOJiMzOTtzIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgdG8gYGxpYi9LY29uZmlnLmttc2FuYC4gSSBzdXNwZWN0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY3J1Y2lhbCBgY29uZmlnYCBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIEtNU0FOIGFuZCBsaWtlbHkgaXRzIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmRpdGlvbmFscyB0aGVyZSB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBLTVNBTiBjb2RlIGFuZCBpbnN0cnVtZW50YXRpb24gYXJlIGNvbXBpbGVkLCBwb3RlbnRpYWxseSBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGV2ZW4gY29tcGlsZS10aW1lIGZsYWdzIHRoYXQgbWF5IGJlIHJlbGV2YW50IHRvIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBzdWNoIGFzIGAtZnNhbml0aXplPWttc2FuYC4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW50ZWdyYXRpb24sIHRyb3VibGVzaG9vdGluZywgYW5kIG9wdGltaXphdGlvbiBvZiB0aGUgS01TQU4gYnVpbGQgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjdXN0b20ga2VybmVsIGJ1aWxkcyBvciBzcGVjaWFsaXplZCBoYXJkd2FyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcyB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY2xlYW4gYW5kIGNvcnJlY3QgS01TQU4gYnVpbGQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYEtjb25maWdgIGhhcyB0byB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmttc2FuJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhBVkVfQVJDSF9LTVNBTlxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gICA2Olx0XHRkZWZfYm9vbCAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtlcm5lbC1tZW1vcnkpXG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIEtNU0FOXG4gICA5Olx0XHRib29sIFwmIzM0O0tNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tNU0FOIFx1MDAyNlx1MDAyNiBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gIDExOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgIUtBU0FOIFx1MDAyNlx1MDAyNiAhS0NTQU5cbiAgMTI6XHRcdGRlcGVuZHMgb24gIVBSRUVNUFRfUlRcbiAgMTM6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gIDE0Olx0XHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBpcyBhIGR5bmFtaWMgZGV0ZWN0b3Igb2YgdXNlcyBvZlxuICAxNzpcdFx0ICB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiB0aGUga2VybmVsLiBJdCBpcyBiYXNlZCBvbiBjb21waWxlclxuICAxODpcdFx0ICBpbnN0cnVtZW50YXRpb24gcHJvdmlkZWQgYnkgQ2xhbmcgYW5kIHRodXMgcmVxdWlyZXMgQ2xhbmcgdG8gYnVpbGQuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEFuIGltcG9ydGFudCBub3RlIGlzIHRoYXQgS01TQU4gaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aW9uIHVzZSxcbiAgMjE6XHRcdCAgYmVjYXVzZSBpdCBkcmFzdGljYWxseSBpbmNyZWFzZXMga2VybmVsIG1lbW9yeSBmb290cHJpbnQgYW5kIHNsb3dzXG4gIDIyOlx0XHQgIHRoZSB3aG9sZSBzeXN0ZW0gZG93bi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21zYW4ucnN0XHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gIDI1Olx0XG4gIDI2Olx0aWYgS01TQU5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXG4gIDI5Olx0XHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4gIDMwOlx0XHRkZWZhdWx0IHlcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mc2FuaXRpemUtbWVtb3J5LXBhcmFtLXJldHZhbCwgS01TQU4gd2lsbFxuICAzMzpcdFx0ICBlYWdlcmx5IGNoZWNrIGV2ZXJ5IGZ1bmN0aW9uIHBhcmFtZXRlciBwYXNzZWQgYnkgdmFsdWUgYW5kIGV2ZXJ5XG4gIDM0Olx0XHQgIGZ1bmN0aW9uIHJldHVybiB2YWx1ZS5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDIKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggS01TQU4uIElzIEtNU0FOIHJlcXVpcmVkIGZvciBjb21waWxhdGlvbiBvciBqdXN0IGZvciBlbmFibGluZyB0aGUgc3BlY2lmaWMgdHJhY2luZy9pbml0aWFsaXphdGlvbiBsb2dpYz8gVGhlIGNvZGUgKmNvbXBpbGVzKiByZWdhcmRsZXNzLCBhcyBga21zYW5fYWxsb2NfcGFnZWAgaXMgYSBzdGF0aWMgaW5saW5lIHRoYXQgYmVjb21lcyBhbiBlbXB0eSBmdW5jdGlvbiB3aGVuIEtNU0FOIGlzIG9mZi4gQnV0IHRoZSB3aG9sZSAqcG9pbnQqIG9mIGFkZGluZyBga21zYW5fYWxsb2NfcGFnZWAgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBmb3IgS01TQU4gdG8gcHJvcGVybHkgdHJhY2sgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IuIFNvLCB5ZXMsIGBDT05GSUdfS01TQU5gIGlzICpkZWZpbml0ZWx5KiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuIFRoZSBgV29ydGhGdXp6aW5nYCBydWxlcyBzYXkgd2Ugc2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLCBlc3BlY2lhbGx5IHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudC4gQW5kIGhlcmUsIHdlIGFyZSAqYWJzb2x1dGVseSogbW9kaWZ5aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYWRkaW5nIHBhZ2UgYWxsb2NhdGlvbiB0cmFjaW5nICphbmQqIEtNU0FOIHRyYWNraW5nLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZS4gU28sICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgaXMgZ29pbmcgdG8gYmUgdHJ1ZS4KCkZvciBgRW5hYmxlQ29uZmlnc2AsIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDogYEtNU0FOYC4gU2luY2UgYGttc2FuX2FsbG9jX3BhZ2VgIG9ubHkgZG9lcyBhbnl0aGluZyB3aGVuIEtNU0FOIGlzIGVuYWJsZWQsIHRoYXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4KCk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIHdlIHNob3VsZCBpbmNsdWRlIGBrbXNhbl9hbGxvY19wYWdlYCBpdHNlbGYsIGJ1dCB0aGF0JiMzOTtzIGNhbGxlZCAqZXZlcnl3aGVyZSogd2hlbiBLTVNBTiBpcyBlbmFibGVkLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB0b28gdWJpcXVpdG91cy4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBob3dldmVyLCBpcyB0aGUgdmVyeSBzcGVjaWZpYyBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlIHdhcyBpbnRyb2R1Y2VkLiBUaGUgY2hhbmdlIGFkZHMgdGhlIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsIHNvIHRoYXQgaXMgdGhlIHByZWNpc2UgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuCgpCdXQgd2FpdCwgc2hvdWxkIHdlIGV4cGFuZCB0aGUgbGlzdCB0byBpbmNsdWRlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIGxpa2UgYGNvcHlfc3BsaWNlX3JlYWRgIG9yIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYD8gSSB0aGluayBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyB0aGUgcHJlY2lzZSB0YXJnZXQuIEl0IGlzIHRoZSBleGFjdCBub24taW5saW5lZCBzeW1ib2wgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbiBoYXBwZW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFzIHdlbGwgaW4gYG1tL21lbXBvbGljeS5jYCBhcyBhIHBvc3NpYmxlIHBvaW50IHRvIGV4YW1pbmUuCgpBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBpbmRlZWQgYW4gZXhwb3J0ZWQgbm9uLWlubGluZSBmdW5jdGlvbjogYHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwgLi4uKWAgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpYC4KCk9rYXksIHRpbWUgZm9yIGEgZmluYWwgcmV2aWV3LiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGB0cnVlYCBiZWNhdXNlIHRoZSBwYXRjaCBhZGRzIHRoZSBga21zYW5fYWxsb2NfcGFnZSgpYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yLiBUaGlzIGlzIGNyaXRpY2FsOiBJdCBtYWtlcyBzdXJlIHRoYXQgS01TQU4gcHJvcGVybHkgdHJhY2tzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBwYWdlcyBhbGxvY2F0ZWQgaW4gYnVsaywgcHJldmVudGluZyBpbmNvcnJlY3Qgc2FuaXRpemF0aW9uIHN0YXRlIGluIG90aGVyIHN1YnN5c3RlbXMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0IHdlIG5lZWQgdG8gZnV6eiB3aXRoIEtNU0FOIGVuYWJsZWQuCgpUaGUgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFsmIzM0O0tNU0FOJiMzNDtdYC4KClRoZSBgRm9jdXNTeW1ib2xzYCBpcyBqdXN0IGBbJiMzNDthbGxvY19wYWdlc19idWxrX25vcHJvZiYjMzQ7XWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBrbXNhbl9hbGxvY19wYWdlKCkgYW5kIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBjYWxscyB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYy4gVGhpcyBlbnN1cmVzIEtNU0FOIHByb3Blcmx5IGluaXRpYWxpemVzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcgd2l0aCBLTVNBTiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBrbXNhbl9hbGxvY19wYWdlKCkgYW5kIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBjYWxscyB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYy4gVGhpcyBlbnN1cmVzIEtNU0FOIHByb3Blcmx5IGluaXRpYWxpemVzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcgd2l0aCBLTVNBTiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3QuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmMmFmOTZkMTBmNmFhZGU0NjkxZGFhNzE3Njc2ZTliNzY4ZjZlODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjE4OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDEyZmFjOTA4NGM0ODMuLjczYzczNDk5YTA1MWIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUyODAsNiAmIzQzOzUyODAsOCBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAKIAkJcHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTsKJiM0MzsJCWttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwICZhbXA7IH5fX0dGUF9SRUNMQUlNKTsKIAkJcGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbi4gVGhlIGRpZmYgaGlnaGxpZ2h0cyB0aGUgYWRkaXRpb24gb2YgdHdvIGtleSBsaW5lczogYSBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgY2FsbCBhbmQgYSBga21zYW5fYWxsb2NfcGFnZWAgY2FsbC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNwZWNpZmljYWxseSB3aGF0IGBrbXNhbl9hbGxvY19wYWdlYCBpcyBkb2luZy4gSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgc2VlIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBpbXBhY3QgYmFzZWQgb24gdGhpcyBzbWFsbCBzbmlwcGV0LiBJdCYjMzk7cyB0aW1lIHRvIGxldmVyYWdlIG15IHRvb2xzLiBJJiMzOTtsbCByZWFjaCBmb3IgZWl0aGVyIGBncmVwcGVyYCBvciBwZXJoYXBzIGByZWFkLWZpbGVgLCBkZXBlbmRpbmcgb24gbXkgcHJlZmVycmVkIG1ldGhvZCwgdG8gaW52ZXN0aWdhdGUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGRlZmluaXRpb25zIG9mIGJvdGggYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBhc3Nlc3MgdGhlIHB1cnBvc2UgYW5kIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIHRoaXMgcGF0Y2ggd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBmdW5jdGlvbmluZyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBsaW5lcyA1MjUwIHRocm91Z2ggNTMwMC4gVGhhdCByYW5nZSBzaG91bGQgY29udGFpbiB0aGUgY29yZSBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGdpdmVuIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXJlLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBkZXNjcmlwdGl2ZSBlbm91Z2ggdG8gbWFrZSBpdCBhbiBlYXN5IHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCBhbmQgdGhlIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzIHRoYXQgb2NjdXIuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgbG9ja2luZyB0aGF0IGlzIHVzZWQgdG8gcHJvdGVjdCB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjUwOlx0XHQgKi9cbjUyNTE6XHRcdGlmICh1bmxpa2VseSghem9uZSkpXG41MjUyOlx0XHRcdGdvdG8gZmFpbGVkO1xuNTI1MzpcdFxuNTI1NDpcdFx0Lyogc3Bpbl90cnlsb2NrIG1heSBmYWlsIGR1ZSB0byBhIHBhcmFsbGVsIGRyYWluIG9yIElSUSByZWVudHJhbmN5LiAqL1xuNTI1NTpcdFx0cGNwID0gcGNwX3NwaW5fdHJ5bG9jayh6b25lLVx1MDAzZXBlcl9jcHVfcGFnZXNldCk7XG41MjU2Olx0XHRpZiAoIXBjcClcbjUyNTc6XHRcdFx0Z290byBmYWlsZWQ7XG41MjU4Olx0XG41MjU5Olx0XHQvKiBBdHRlbXB0IHRoZSBiYXRjaCBhbGxvY2F0aW9uICovXG41MjYwOlx0XHRwY3BfbGlzdCA9IFx1MDAyNnBjcC1cdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcbjUyNjE6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG41MjYyOlx0XG41MjYzOlx0XHRcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cbjUyNjQ6XHRcdFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xuNTI2NTpcdFx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MjY2Olx0XHRcdFx0Y29udGludWU7XG41MjY3Olx0XHRcdH1cbjUyNjg6XHRcbjUyNjk6XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcbjUyNzA6XHRcdFx0XHRcdFx0XHRcdFx0cGNwLCBwY3BfbGlzdCk7XG41MjcxOlx0XHRcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbjUyNzI6XHRcdFx0XHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXG41MjczOlx0XHRcdFx0aWYgKCFucl9hY2NvdW50KSB7XG41Mjc0Olx0XHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyNzU6XHRcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTI3NjpcdFx0XHRcdH1cbjUyNzc6XHRcdFx0XHRicmVhaztcbjUyNzg6XHRcdFx0fVxuNTI3OTpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODA6XHRcbjUyODE6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MjpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4MzpcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuNTI4NDpcdFx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuNTI4NTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODY6XHRcdH1cbjUyODc6XHRcbjUyODg6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4OTpcdFxuNTI5MDpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTE6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkyOlx0XG41MjkzOlx0b3V0OlxuNTI5NDpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTU6XHRcbjUyOTY6XHRmYWlsZWQ6XG41Mjk3Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk4Olx0XHRpZiAocGFnZSlcbjUyOTk6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41MzAwOlx0XHRnb3RvIG91dDtcbjUzMDE6XHR9XG41MzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMzpcdFxuNTMwNDpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBga21zYW5fYWxsb2NfcGFnZWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkgc2FuaXRpemF0aW9uLCBsaWtlbHkgS01TQU4uIEl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIGZpbmRpbmcgaXRzIGNhbGwgc2l0ZXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCBmb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBsb2NhdGlvbnMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgcGF0dGVybnMgYW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgc2VhcmNoIGVmZmljaWVudGx5LCBrbm93aW5nIHRoYXQgSSYjMzk7bGwgaGF2ZSB0byBpbnRlcnByZXQgdGhlIHJlc3VsdHMgYW5kIGZpbHRlciBvdXQgZmFsc2UgcG9zaXRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbXNhbl9hbGxvY19wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjAtLyoqXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cbmluY2x1ZGUvbGludXgva21zYW4uaC02Mi0gKiBAcGFnZTogIHN0cnVjdCBwYWdlIHBvaW50ZXIgcmV0dXJuZWQgYnkgYWxsb2NfcGFnZXMoKS5cbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6Njk6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKTtcbmluY2x1ZGUvbGludXgva21zYW4uaC03MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl90YXNrX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6MzE5OnN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzIwLVx0XHRcdFx0ICAgIGdmcF90IGZsYWdzKVxuLS1cbm1tL2ttc2FuL3NoYWRvdy5jPTE2OT1FWFBPUlRfU1lNQk9MKGttc2FuX2NvcHlfcGFnZV9tZXRhKTtcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzIte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0Olx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xubW0vcGFnZV9hbGxvYy5jLTUyODUtXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcbm1tL3BhZ2VfYWxsb2MuYy01MzcyLSAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjU0NjI6XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gU2hhZG93aW5nIGFuZCBQYWdlIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGhvbmVzIGluIG9uIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGJlaW5nIGFkZGVkIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGlzc3VlIGlzIHNwZWNpZmljIHRvIHBhZ2VzIGNvbWluZyBmcm9tIHRoZSBwY3BsaXN0LCBvciBgX19ybXF1ZXVlX3BjcGxpc3RgLCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gUmlnaHQsIHRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBgYWxsb2NfcGFnZXNfYnVsa2AgcHVsbHMgcGFnZXMgZnJvbSB0aGUgcGNwbGlzdCwgd2Ugd2VyZSBieXBhc3NpbmcgS01TQU4mIzM5O3MgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gc3RlcHMuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGBrbXNhbl9hbGxvY19wYWdlYCB3YXNuJiMzOTt0IGJlaW5nIGNhbGxlZCBmb3IgdGhvc2UgcGNwbGlzdC1zb3VyY2VkIHBhZ2VzLiBUaGlzIG1lYW5zIEtNU0FOIHdhc24mIzM5O3QgaW5pdGlhbGl6aW5nIHRoZSBzaGFkb3cgbWVtb3J5IG9yIG9yaWdpbiBtZXRhZGF0YSBmb3IgdGhlc2UgcGFnZXMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlIGRldGFpbHMgb2Ygd2hldGhlciBLTVNBTiBjb3JyZWN0bHkgbWFya3MgdGhvc2UgcGFnZXMgYXMgaW5pdGlhbGl6ZWQgb3Igbm90IGRlcGVuZGluZyBvbiBgX19HRlBfWkVST2AuIFNvLCB3aXRob3V0IGNhbGxpbmcgYGttc2FuX2FsbG9jX3BhZ2VgLCBLTVNBTiB3b3VsZG4mIzM5O3Qga25vdyBhYm91dCB0aGVzZSBwYWdlcywgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zLiBUaW1lIHRvIGRpdmUgaW50byBgbW0va21zYW4vc2hhZG93LmNgIGFuZCBjb25maXJtIGV4YWN0bHkgaG93IEtNU0FOIGhhbmRsZXMgdGhlIHNoYWRvdyBtZW1vcnkgYW5kIG9yaWdpbiB0cmFja2luZyB3aXRoaW4gYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBpdHMgcmVsYXRpb24gdG8gYWxsb2NhdGlvbiBmbGFncy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlbmRlZCB0byBkZWFsIHdpdGggdGhlIHplcm9pbmcsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rbXNhbi9zaGFkb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XG4gMTcxOlx0dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxuIDE3MjpcdHtcbiAxNzM6XHRcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pIHx8ICFrbXNhbl9lbmFibGVkO1xuIDE3NDpcdFx0c3RydWN0IHBhZ2UgKnNoYWRvdywgKm9yaWdpbjtcbiAxNzU6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiAxNzY6XHRcdGludCBwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKCFwYWdlKVxuIDE3OTpcdFx0XHRyZXR1cm47XG4gMTgwOlx0XG4gMTgxOlx0XHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XG4gMTgyOlx0XHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAoaW5pdGlhbGl6ZWQpIHtcbiAxODU6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODY6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODc6XHRcdFx0cmV0dXJuO1xuIDE4ODpcdFx0fVxuIDE4OTpcdFxuIDE5MDpcdFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXG4gMTkxOlx0XHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxuIDE5MjpcdFx0XHRyZXR1cm47XG4gMTkzOlx0XG4gMTk0Olx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxOTU6XHRcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcbiAxOTY6XHRcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XG4gMTk3Olx0XHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XG4gMTk4Olx0XHQvKlxuIDE5OTpcdFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCYjMzk7cyBva1xuIDIwMDpcdFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxuIDIwMTpcdFx0ICovXG4gMjAyOlx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSYjNDM7JiM0MzspXG4gMjAzOlx0XHRcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XG4gMjA0Olx0fVxuIDIwNTpcdFxuIDIwNjpcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gMjA3Olx0e1xuIDIwODpcdFx0aWYgKCFrbXNhbl9lbmFibGVkIHx8IGttc2FuX2luX3J1bnRpbWUoKSlcbiAyMDk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS01TQU4gTmVlZCBmb3IgYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGluaXRpYWxseSwgbXkgZmlyc3QgdGhvdWdodCB3YXMgJiMzNDtXb3csIHRoaXMgc2VlbXMgc2lnbmlmaWNhbnQhJiMzNDsuIEl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGludGVncmF0aW5nIEtNU0FOIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc3BlY2lmaWNhbGx5IHdoZW4gYF9fR0ZQX1pFUk9gIGlzbiYjMzk7dCBzZXQuIFByZXZpb3VzbHksIHdlIHdlcmVuJiMzOTt0IGluaXRpYWxpemluZyB0aGUgc2hhZG93IG1lbW9yeSBmb3IgdGhvc2UgcGFnZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTm93LCB3aXRoIGBrbXNhbl9hbGxvY19wYWdlYCwgd2UmIzM5O3JlIHRyYWNraW5nIHRoZXNlIGJ1bGsgYWxsb2NhdGlvbnMgcHJvcGVybHksIG1hcmtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aCBgMHhmZmAgYW5kIGNhcHR1cmluZyB0aGUgb3JpZ2luIHN0YWNrIHRyYWNlLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIHdhcyB0byBjb25zaWRlciBpZiBpdCBleHBvc2VzIGFueSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0IEkgcXVpY2tseSByZWFsaXplZCwgbm8sIHdhaXQsIGl0JiMzOTtzICplbmFibGluZyogS01TQU4gdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGluIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBjb3VsZCBiZSBpbiBhbGwgc29ydHMgb2YgcGxhY2VzIC0gbmV0d29yayBkcml2ZXJzLCBwYWdlIHBvb2xzLCBmaWxlc3lzdGVtcywgYW5kIHNvIG9uLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGd1aWRlbGluZXMgZm9yIHRoaXMgcHJvbXB0LCBiZWNhdXNlIHRoaXMgaXMgYWJvdXQgZGVjaWRpbmcgaWYgd2UgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBrZXkgZGlzdGluY3Rpb24gaXMgdGhhdCBLQVNBTiBhbHJlYWR5IGNhdGNoZXMgYSB0b24gb2YgYnVncywgaW5jbHVkaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBldGMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICphbmQqIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgZ3VpZGVsaW5lIGlzIGNsZWFyOiBpZiBLQVNBTiAob3Igc29tZXRoaW5nIGVsc2UpIGNhbiBjYXRjaCB0aGUgaXNzdWUsIHdlICpkb24mIzM5O3QqIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBiZWNhdXNlIGl0JiMzOTtzIGV4cGVuc2l2ZS4KClNvLCBpcyB0aGUgKnBhdGNoIGl0c2VsZiogaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgb3IgaXMgaXQgKm1vZGlmeWluZyBjb2RlKiB0aGF0IGV4cG9zZXMgZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/CgpUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGRvaW5nIHRoZSBsYXR0ZXIsIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYWxsb2NhdGlvbiBjb2RlIHRvICplbmFibGUqIEtNU0FOIHRyYWNraW5nLCBub3QgKmludHJvZHVjaW5nKiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYWN0dWFsIHJpc2sgaXMgaW4gdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4KCkxldCYjMzk7cyBkbyBhIGxpdHRsZSBtb3JlIGRpZ2dpbmcgaW50byB0aGUgZ2l0IGhpc3RvcnkgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21zYW5fYWxsb2NfcGFnZVxcKHBhZ2UsIDAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS01TQU4gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoaXMgcGF0Y2ggaW4gcmVsYXRpb24gdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBLTVNBTi4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlKClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBNeSBmaXJzdCBjb25jZXJuIGlzIGFsd2F5cyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdhaXQsIGlzIEtNU0FOIHRoZSBzYW5pdGl6ZXIgaXRzZWxmPwoKT2theSwgc28gYnkgaW5jbHVkaW5nIGBrbXNhbl9hbGxvY19wYWdlKClgIHdpdGhpbiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciwgaXQgd2lsbCBub3cgZmxhZyBwYWdlcyBhcyB1bmluaXRpYWxpemVkIChvciBpbml0aWFsaXplZCwgaWYgdXNpbmcgYF9fR0ZQX1pFUk9gKS4gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcmV2ZWFsIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgaW4gY29kZSB0aGF0IHVzZXMgYGFsbG9jX3BhZ2VzX2J1bGtgPwoKQmVmb3JlIHRoaXMgcGF0Y2gsIEtNU0FOIHdvdWxkbiYjMzk7dCBkZXRlY3QgdW5pbml0aWFsaXplZCByZWFkcyBvbiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGJ1bGsgYWxsb2NhdG9yIGJlY2F1c2UgdGhlICYjMzQ7c2hhZG93JiMzNDsgbWVtb3J5IHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IG1hcmtlZC4gTm93LCBpdCB3aWxsISBCdXQgaXMgdGhlICpwYXRjaCBpdHNlbGYqIGludHJvZHVjaW5nIGFueSBuZXcgcmlza3MsIG9yIGlzIGl0IHNpbXBseSBleHBvc2luZyBwcmUtZXhpc3Rpbmcgb25lcz8KClRoZSB3b3JkaW5nIGVtcGhhc2l6ZXMgc2V0dGluZyBgTmVlZHNLTVNBTj10cnVlYCBvbmx5IGlmIHRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAuIFRoZSBjcml0ZXJpYSBpbmNsdWRlOiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgY2FuIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLgoKQ29udmVyc2VseSwgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGNvbmNlcm4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBpc3N1ZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGFuZCBvdGhlciB0b29scyBhbHJlYWR5IGhhbmRsZSkuIFRoZSBvdGhlciBjb25kaXRpb25zIGZvciBgTmVlZHNLTVNBTj1mYWxzZWAgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3Igbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS9pbmZvcm1hdGlvbiBsZWFrcy4KCk5vdywgbGV0JiMzOTtzIGV2YWx1YXRlIHRoaXMgc3BlY2lmaWMgcGF0Y2g6IElzIGl0IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8gbGVha3M/IEl0JiMzOTtzIGFkZGluZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaW5zaWRlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4KCiogICBJcyBpdCBzZW5kaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/IE5vLgoqICAgRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLgoqICAgSXMgaXQgYWxsb2NhdGluZyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzPyBOby4KKiAgIEFyZSB0aGVyZSBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBOby4KClNvLCB3aGF0IGlzIHRoZSBwYXRjaCBhY3R1YWxseSBkb2luZz8gSXQmIzM5O3MgYWRkaW5nIGEgdHJhY2Vwb2ludCBhbmQgYSBLTVNBTiBob29rIHRvIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBEb2VzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaXRzZWxmIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gTm8sIGJlY2F1c2UgaXQmIzM5O3Mgc2ltcGx5IGhvb2tpbmcgaW50byB0aGUgS01TQU4gcnVudGltZSBhbmQgdHJhY2luZy4KClRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIHBhdGNoICppdHNlbGYqIHdhcnJhbnQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IElmIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBLTVNBTiB3aWxsIG5vdyBkZXRlY3QgYnVncyBpbiBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zIHVzaW5nIGBhbGxvY19wYWdlc19idWxrYC4uLiBidXQgdGhlICpjdXJyZW50KiBldmFsdWF0aW9uIGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGUgKnBhdGNoIHVuZGVyIHJldmlldyogY3JlYXRlcyBuZXcgcmlza3MuIFdoeSBpcyB0aGlzIHBhdGNoIGJlaW5nIHN1Ym1pdHRlZCB0byBzeXotY2x1c3Rlcj8gSXQmIzM5O3MgbW9zdCBsaWtlbHkgYmVjYXVzZSBpdCYjMzk7cyBhIGtlcm5lbCBwYXRjaCB1bmRlciByZXZpZXcgKG9yIHN5emJvdCBpcyB0ZXN0aW5nIGl0KS4KCklmIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBhIG1lbW9yeSBzdWJzeXN0ZW0gcGF0Y2ggdGhhdCBob29rcyBga21zYW5fYWxsb2NfcGFnZSgpYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAsIGRvZXMgaXQgaW50cm9kdWNlICpuZXcqIHJpc2tzPyBObyEgVmFyaWFibGVzIHVzZWQgYXMgaW5wdXQgYHBhZ2VgLCBgMGAsIGBnZnBgLCBhbmQgYGFjLm1pZ3JhdGV0eXBlYCBhcmUgYWxsIGluaXRpYWxpemVkIGVpdGhlciBhcyBsb2NhbCB2YXJpYWJsZXMgb3IgYXJlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIFRoZSBsb2NhbCB2YXJpYWJsZSBgYWNgIGlzIGRlY2xhcmVkIGFzIGFuIGBhbGxvY19jb250ZXh0IGFjID0geyB9O2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNjA6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG41MTYxOlx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbjUxNjI6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG41MTYzOlx0e1xuNTE2NDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41MTY1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjUxNjY6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNTE2NzpcdFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcbjUxNjg6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xuNTE2OTpcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XG41MTcwOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XG41MTcxOlx0XHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XG41MTcyOlx0XG41MTczOlx0XHQvKlxuNTE3NDpcdFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXG41MTc1Olx0XHQgKiB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIGRpc2FibGluZyBJUlFzLlxuNTE3NjpcdFx0ICovXG41MTc3Olx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgcGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKVxuNTE3ODpcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTE3OTpcdFxuNTE4MDpcdFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xuNTE4MTpcdFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gMCkpXG41MTgyOlx0XHRcdGdvdG8gb3V0O1xuNTE4MzpcdFxuNTE4NDpcdFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXG41MTg1Olx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXG41MTg2Olx0XHRcdGdvdG8gb3V0O1xuNTE4NzpcdFxuNTE4ODpcdFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xuNTE4OTpcdFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IChnZnAgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxuNTE5MDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTE6XHRcbjUxOTI6XHRcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cbjUxOTM6XHRcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxuNTE5NDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTU6XHRcbjUxOTY6XHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbjUxOTc6XHRcdC8qXG41MTk4Olx0XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xuNTE5OTpcdFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xuNTIwMDpcdFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xuNTIwMTpcdFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQmIzM5O2xsIGhhdmVcbjUyMDI6XHRcdCAqIHNpbWlsYXIgcGVyZm9ybWFuY2UgdG8gYWRkZWQgY29tcGxleGl0eSB0byB0aGUgYnVsayBhbGxvY2F0b3IuXG41MjAzOlx0XHQgKi9cbjUyMDQ6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbjUyMDU6XHRcdFx0Z290byBmYWlsZWQ7XG41MjA2Olx0I2VuZGlmXG41MjA3Olx0XG41MjA4Olx0XHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuNTIwOTpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFN1YnNldCoqCgpSaWdodCwgdGltZSB0byBkaXZlIGluIGEgYml0IGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGF0YSBhcm91bmQgbGluZXMgNTIxMCB0byA1MjUwLiBNeSBpbml0aWFsIHNjYW4gZGlkbiYjMzk7dCByZXZlYWwgYW55dGhpbmcgb2J2aW91c2x5IGFtaXNzLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aG9zZSBzdWJ0bGUgYW5vbWFsaWVzIG9mdGVuIGhpZGUgaW4gdGhlIGltbWVkaWF0ZSB2aWNpbml0eSBvZiBzb21ldGhpbmcgbW9yZSBzaWduaWZpY2FudC4gSXQmIzM5O3MgYSBmb2N1c2VkIGV4YW1pbmF0aW9uOyBwZXJoYXBzIHRoZXJlJiMzOTtzIGEgY2x1c3RlcmluZyBlZmZlY3QsIGEgc3BlY2lmaWMgcGF0dGVybiBpbiB0aG9zZSBsaW5lcyB0aGF0IG5lZWRzIHVucGFja2luZy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGluY29uc2lzdGVuY2llcyBpbiB0aGUgY3VycmVudCBtb2RlbCByZXN1bHRzIHdoZW4gY29tcGFyZWQgd2l0aCB0aGUgZXhwZWN0ZWQgb3V0Y29tZXMsIG9yIHBlcmhhcHMgY29ycmVsYXRpb25zIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBhcHBhcmVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoaXMgcGFydGljdWxhciBzZWN0aW9uIG9mIHRoZSBkYXRhc2V0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTIxMDpcdFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbjUyMTE6XHRcdFx0Z290byBvdXQ7XG41MjEyOlx0XG41MjEzOlx0XHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xuNTIxNDpcdFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xuNTIxNTpcdFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XG41MjE2Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWFyaztcbjUyMTc6XHRcbjUyMTg6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG41MjE5Olx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkpIHtcbjUyMjA6XHRcdFx0XHRjb250aW51ZTtcbjUyMjE6XHRcdFx0fVxuNTIyMjpcdFxuNTIyMzpcdFx0XHRpZiAobnJfb25saW5lX25vZGVzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiB6b25lICE9IHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpIFx1MDAyNlx1MDAyNlxuNTIyNDpcdFx0XHQgICAgem9uZV90b19uaWQoem9uZSkgIT0gem9uZWxpc3Rfbm9kZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpKSB7XG41MjI1Olx0XHRcdFx0Z290byBmYWlsZWQ7XG41MjI2Olx0XHRcdH1cbjUyMjc6XHRcbjUyMjg6XHRcdFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKTtcbjUyMjk6XHRyZXRyeV90aGlzX3pvbmU6XG41MjMwOlx0XHRcdG1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgJiM0MzsgbnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQ7XG41MjMxOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxuNTIzMjpcdFx0XHRcdFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxuNTIzMzpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcbjUyMzQ6XHRcdFx0XHRicmVhaztcbjUyMzU6XHRcdFx0fVxuNTIzNjpcdFxuNTIzNzpcdFx0XHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcbjUyMzg6XHRcdFx0XHRnb3RvIHJldHJ5X3RoaXNfem9uZTtcbjUyMzk6XHRcbjUyNDA6XHRcdFx0LyogVHJ5IGFnYWluIGlmIHpvbmUgaGFzIGRlZmVycmVkIHBhZ2VzICovXG41MjQxOlx0XHRcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcbjUyNDI6XHRcdFx0XHRpZiAoX2RlZmVycmVkX2dyb3dfem9uZSh6b25lLCAwKSlcbjUyNDM6XHRcdFx0XHRcdGdvdG8gcmV0cnlfdGhpc196b25lO1xuNTI0NDpcdFx0XHR9XG41MjQ1Olx0XHR9XG41MjQ2Olx0XG41MjQ3Olx0XHQvKlxuNTI0ODpcdFx0ICogSWYgdGhlcmUgYXJlIG5vIGFsbG93ZWQgbG9jYWwgem9uZXMgdGhhdCBtZWV0cyB0aGUgd2F0ZXJtYXJrcyB0aGVuXG41MjQ5Olx0XHQgKiB0cnkgdG8gYWxsb2NhdGUgYSBzaW5nbGUgcGFnZSBhbmQgcmVjbGFpbSBpZiBuZWNlc3NhcnkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTE5CgkJCQkJCQlvdXRwdXQ6IDE2NgoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBzb21lIHRyYWNpbmcgYW5kIGEgS01TQU4gaG9vayBjYWxsIHdpdGhpbiB0aGUgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBjYWxscyBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIHBhZ2VzIGFyZSBiZWluZyBwdWxsZWQgZnJvbSB0aGUgcGVyLWNwdSBsaXN0LCBgcGNwX2xpc3RgLiBUaGUgZnVuY3Rpb24gaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KCk15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBzbyBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBEb2VzIHRoaXMgcGF0Y2ggcG90ZW50aWFsbHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcz8gTm8sIGl0JiMzOTtzIG5vdCBhY3R1YWxseSAqYWxsb2NhdGluZyogbmV3IHN0cnVjdHVyZXMuIEl0JiMzOTtzIGhvb2tpbmcgaW50byB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbiBwcm9jZXNzLiBEb2VzIGl0IHBhc3MgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2U/IE5vcGUsIHRoaXMgc2VlbXMgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRG9lcyBpdCBjcmVhdGUgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBhY2NvcmRpbmcgdG8gbXkgcXVpY2sgYXNzZXNzbWVudC4gQW5kIGlzIGl0IG1vZGlmeWluZyBjb21wbGV4IHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBtZXNzaW5nIHdpdGggYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0ICpjb3VsZCogY3JlYXRlIGEgcmlzaz8gTm8sIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgdG91Y2hpbmcgdGhvc2UgYXNwZWN0cyBhdCBhbGwuCgpCYXNlZCBvbiB0aGlzIHF1aWNrIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSB1c3VhbCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiwgb3Igc3RhbmRhcmQgdGVzdGluZywgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4gVGhlcmUgYXJlIG5vIG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHNpbXBseSBpbnN0cnVtZW50YXRpb24uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBjb25zdHJ1Y3QgdGhlIGBLTVNBTlJlYXNvbmluZ2AgYmxvY2ssIHRvIHByb3ZpZGUgYSBjb25jaXNlIGFuZCBhY2N1cmF0ZSBleHBsYW5hdGlvbjoKCiogICAqKkRlc2NyaXB0aW9uOioqIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIGFkZGluZyB0aGUgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgdHJhY2Vwb2ludCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayB0byB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIHB1bGxpbmcgcGFnZXMgZnJvbSB0aGUgcGVyLWNwdSBwYWdlIGxpc3QgKGBwY3BfbGlzdGApLgoqICAgKipDb250cmFzdCBLQVNBTiB2cy4gS01TQU46KiogVGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vciBkb2VzIGl0IGFsbG93IGZvciB0aGUgcGFzc2luZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYW5kIHRoZXJlIGFyZSBubyBidWZmZXIgYm91bmRzIGFsdGVyYXRpb25zLiBUaGUgcGF0Y2ggKmFkZHMqIGEgS01TQU4gdHJhY2tpbmcgaG9vayBhbmQgYSB0cmFjZXBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuCiogICAqKkNvbmNsdXNpb246KiogVGhlcmUgYXJlIG5vIG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4gSGVuY2UsIGBOZWVkc0tNU0FOOiBmYWxzZWAuCgpUaGF0JiMzOTtzIG15IGNvbXBsZXRlIGFzc2Vzc21lbnQuIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3QuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LlxuXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgYm91bmRzL2xlbmd0aHMuIEFsbCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBuZXcgY2FsbHMgKGBwYWdlYCwgYDBgLCBgZ2ZwYCwgYGFjLm1pZ3JhdGV0eXBlYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVhayB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjM0LjM0MDU4MTQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg4NjAzMDg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgYW5kIGBrbXNhbl9hbGxvY19wYWdlKClgIGhvb2sgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBQQ1AgbGlzdC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgYm91bmRzL2xlbmd0aHMuIEFsbCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBuZXcgY2FsbHMgKGBwYWdlYCwgYDBgLCBgZ2ZwYCwgYGFjLm1pZ3JhdGV0eXBlYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVhayB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjM0LjM0MDU4NTc0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMTg5MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWYyYWY5NmQxMGY2YWFkZTQ2OTFkYWE3MTc2NzZlOWI3NjhmNmU4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjE4OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjczYzczNDk5YTA1MWIgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTUyODAsNiArNTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4gXFxuIFxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG4rXFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTg6MzQuODE0MzkzNzUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MTk1MDA2MDc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWYyYWY5NmQxMGY2YWFkZTQ2OTFkYWE3MTc2NzZlOWI3NjhmNmU4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MTg6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjczYzczNDk5YTA1MWIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyODAsNiArNTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuK1x0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuIFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODozNC44MTQzOTQ5NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDYzNTgwNzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZy4gU3RhbmRhcmQgdHJpYWdlIHN0dWZmLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhpcyBpcyBiZW5pZ24uIEl0J3MgYWJvdXQgbm9ybWFsIGRldmVsb3BlciBRQSwganVzdCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGlzIHBsYXlpbmcgbmljZWx5IHdpdGggdGhlIGtlcm5lbCBmdXp6aW5nIGluZnJhc3RydWN0dXJlLCBhcyBleHBlY3RlZC5cblxuSSd2ZSBnb3QgdGhlIGRpZmYgaW4gZnJvbnQgb2YgbWU6IEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBUaGlzIGlzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBkdXJpbmcgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbiBhY3R1YWxseSBkb2VzLCB3aGF0IGNvbnRleHRzIGl0J3MgY2FsbGVkIGluLCBhbmQgaWYgdGhlc2UgYWRkZWQgY2FsbHMgaGF2ZSB0aGUgcG90ZW50aWFsIGZvciB0cmlnZ2VyaW5nIGFueSBuZXcsIGV4cGxvaXRhYmxlIGNvZGUgcGF0aHMuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzIOKAkyBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBuYXZpZ2F0ZSB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjQ5LjQ1MDIwNDUxN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI2MDpcXHRcXHRwY3BfbGlzdCA9IFxcdTAwMjZwY3AtXFx1MDAzZWxpc3RzW29yZGVyX3RvX3BpbmRleChhYy5taWdyYXRldHlwZSwgMCldO1xcbjUyNjE6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKSB7XFxuNTI2MjpcXHRcXG41MjYzOlxcdFxcdFxcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cXG41MjY0OlxcdFxcdFxcdGlmIChwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pIHtcXG41MjY1OlxcdFxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUyNjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTI2NzpcXHRcXHRcXHR9XFxuNTI2ODpcXHRcXG41MjY5OlxcdFxcdFxcdHBhZ2UgPSBfX3JtcXVldWVfcGNwbGlzdCh6b25lLCAwLCBhYy5taWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsXFxuNTI3MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwY3AsIHBjcF9saXN0KTtcXG41MjcxOlxcdFxcdFxcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG41MjcyOlxcdFxcdFxcdFxcdC8qIFRyeSBhbmQgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2UgKi9cXG41MjczOlxcdFxcdFxcdFxcdGlmICghbnJfYWNjb3VudCkge1xcbjUyNzQ6XFx0XFx0XFx0XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuNTI3NTpcXHRcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41Mjc2OlxcdFxcdFxcdFxcdH1cXG41Mjc3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyNzg6XFx0XFx0XFx0fVxcbjUyNzk6XFx0XFx0XFx0bnJfYWNjb3VudCsrO1xcbjUyODA6XFx0XFxuNTI4MTpcXHRcXHRcXHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XFxuNTI4MjpcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbjUyODM6XFx0XFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG41Mjg0OlxcdFxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbjUyODU6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUyODY6XFx0XFx0fVxcbjUyODc6XFx0XFxuNTI4ODpcXHRcXHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcXG41Mjg5OlxcdFxcbjUyOTA6XFx0XFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcXG41MjkxOlxcdFxcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XFxuNTI5MjpcXHRcXG41MjkzOlxcdG91dDpcXG41Mjk0OlxcdFxcdHJldHVybiBucl9wb3B1bGF0ZWQ7XFxuNTI5NTpcXHRcXG41Mjk2OlxcdGZhaWxlZDpcXG41Mjk3OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG41Mjk4OlxcdFxcdGlmIChwYWdlKVxcbjUyOTk6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUzMDA6XFx0XFx0Z290byBvdXQ7XFxuNTMwMTpcXHR9XFxuNTMwMjpcXHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxuNTMwMzpcXHRcXG41MzA0OlxcdC8qXFxuNTMwNTpcXHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcXG41MzA2OlxcdCAqIEBwYWdlX2FycmF5OiBBcnJheSBvZiBwYWdlcyB0byBmcmVlXFxuNTMwNzpcXHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XFxuNTMwODpcXHQgKlxcbjUzMDk6XFx0ICogRnJlZSB0aGUgb3JkZXItMCBwYWdlcy4gQWRqYWNlbnQgZW50cmllcyB3aG9zZSBQRk5zIGZvcm0gYSBjb250aWd1b3VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjQ5LjQ1MDc2NzQ3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDQxNDU2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSByZWNlbnQgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtgIGFuZCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBjYWxscyBwYXJ0IG9mIHRoZSAqYnVsayogcGFnZSBhbGxvY2F0aW9uIHBhdGgsIGkuZS4sIGluc2lkZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgPyBJdCdzIGEga2V5IHF1ZXN0aW9uIGJlY2F1c2UgYnVsayBhbGxvY2F0aW9uIGhhcyBpdHMgb3duIHNldCBvZiBvcHRpbWl6YXRpb25zIGFuZCBjb25zdHJhaW50cy5cblxuVG8gY29uZmlybSAob3IgZGVueSkgdGhpcywgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEknbGwgZGl2ZSBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBwbGFuIGlzIHRvIHNlYXJjaCB0aGUgc291cmNlIGZvciByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgc3RhbmRhcmQgcGFnZSBhbGxvY2F0aW9uIHBhdGhzLiBTcGVjaWZpY2FsbHksIEknbGwgc2VhcmNoIGZvciB3aGVyZSBgcHJlcF9uZXdfcGFnZWAgaXMgY2FsbGVkIGFuZCBob3cgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlc2UgYWRkaXRpb25zIGZpdCBpbnRvIHRoZSBicm9hZGVyIHBhZ2UgYWxsb2NhdGlvbiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODo1Mi4yNTQ5MTQ4NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MDk1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttc2FuX2FsbG9jX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jPTE2OT1FWFBPUlRfU1lNQk9MKGttc2FuX2NvcHlfcGFnZV9tZXRhKTtcXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzAtXFxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzIte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyODMtXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTI4NDpcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODo1Mi42NzQwMTk3NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjA2Njk1ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBmZWVscyAqb2ZmKi4gSSBzZWUgaXQgaGFzIGBwcmVwX25ld19wYWdlYCwgYW5kIGl0J3Mgc2V0dGluZyB0aGUgcGFnZSBhcyByZWZjb3VudGVkLCB3aGljaCBpcyBnb29kLiBCdXQgd2FpdOKApiBpdCdzIG1pc3NpbmcgdGhlIHVzdWFsIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgdGhlIEtNU0FOIGFsbG9jYXRpb24gY2FsbC4gVGhhdCBvbWlzc2lvbiBpcywgYXQgYSBtaW5pbXVtLCBwZWN1bGlhciwgYW5kIHdvcnRoIGludmVzdGlnYXRpbmcuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBJIGhhdmUgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6ICpkb24ndCogYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIHJlZmFjdG9yaW5nLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHRvcCBwcmlvcml0eS5cblxuUmlnaHQsIHNvIHRvIG1ha2UgdGhlIGNhbGwsIEkgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBuZWdhdGl2ZSAqYW5kKiBwb3NpdGl2ZSBjcml0ZXJpYS4gSSB3aWxsIG9ubHkgcmV0dXJuIGZhbHNlIGlmIGFsbCBjaGFuZ2VzIGZhbGwgaW50byB0aG9zZSBuZWdhdGl2ZSBjcml0ZXJpYSwgb3RoZXJ3aXNlIEkgc2hvdWxkIHJldHVybiB0cnVlLlxuXG5JIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIGlzbid04oCmXG4qICAgRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzXG4qICAgVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0c1xuKiAgIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmdcbiogICBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzXG5cbkFuZCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgYWxzbyBpbmNsdWRlcyBoYXJkd2FyZSB0aGF0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5CdXQgaWYgaXQgaW52b2x2ZXMgc29tZXRoaW5nIGxpa2UsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIEJQRiwgdGhlIHNjaGVkdWxlciwgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLCBpdCdzIGEgZGVmaW5pdGUgZ28uXG5cblNvIGJhY2sgdG8gbXkgb3JpZ2luYWwgdGhvdWdodCwgd2hhdCBpcyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKWAgKmFjdHVhbGx5KiBkb2luZz8gVGhhdCdzIHRoZSByZWFsIGNydXggaGVyZS4gTGV0IG1lIGRlbHZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHJldmlldyBgbW0va21zYW4vc2hhZG93LmNgIGFuZCBgaW5jbHVkZS9saW51eC9rbXNhbi5oYCB0byBzZWUgZXhhY3RseSB3aGF0IHRoaXMgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIGFkZGluZyB0byB0aGUgcGFnZSBhbGxvY2F0aW9uLiBJZiBpdCdzIGRvaW5nIHNvbWV0aGluZyBjcnVjaWFsLCB0aGVuIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1enppbmcgdGFyZ2V0IGJlY2F1c2UgaXQncyBpbiB0aGUgbW0gc3Vic3lzdGVtLCBhbmQgdGhlcmVmb3JlIGlzIGEgcG9zaXRpdmUuIEJ1dCBpZiBpdCdzIHB1cmVseSBkZWNvcmF0aXZlLCB0aGVuIG1heWJlIG5vdC4gTGV0J3Mgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjU2Ljg4MDcxNzU4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjU2Ljg4MDgwNTAxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzczNTgxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiB3aXRoIEtNU0FOKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSB0aGlzIGB0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpYCBjYWxsLiBJdCdzIGEgdHJhY2Vwb2ludCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBnaXZlcyBtZSBhIHdpbmRvdyBpbnRvIHdoYXQncyBoYXBwZW5pbmcuIFRoZW4sIEkgc2VlIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO2AuIEFoLCByaWdodCwgS01TQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBwYWdlIGFsbG9jYXRpb24uIEJ1dCB3YWl0IGEgc2Vjb25kLi4uSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBoYXBwZW5zIGlmIEtNU0FOIGlzICpkaXNhYmxlZCouICBJZiBgIUNPTkZJR19LTVNBTmAsIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbnNpZGUgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgZnVuY3Rpb24/IEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZhbGxiYWNrIGJlaGF2aW9yLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L2ttc2FuLmhgIHRvIHNlZSB3aGF0IHRoYXQgbWFjcm8gZXZhbHVhdGVzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTg6NTguODE4MTY2MDU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQyMTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODo1OC44OTU1OTI5NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkwNTkwNDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBNZXRhZGF0YSBJbml0aWFsaXphdGlvbiBpbiBQYWdlIEFsbG9jYXRpb246IFdvcnRoeSBvZiBGdXp6aW5nPyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgYGttc2FuX2FsbG9jX3BhZ2VgLiBJdCdzIGNsZWFyIHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBpcyBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uIFdoZW4gS01TQU4gaXMgYWN0aXZlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBUaGUgcHJldmlvdXMgbGFjayBvZiBLTVNBTiBub3RpZmljYXRpb24gaW4gYnVsayBwYWdlIGFsbG9jYXRpb24gaXMgY29uY2VybmluZywgYXMgaXQgY291bGQgbGVhZCB0byBzdGFsZSBtZXRhZGF0YSBhbmQgbWlzc2VkIG9yIGZhbHNlIHBvc2l0aXZlIGJ1Z3MuXG5cbk5vdywgbG9va2luZyBkZWVwZXIsIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBub3QganVzdCBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsLiBJdCBjYWxscyBga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzYCwgYW5kIHdyaXRlcyB0byBzaGFkb3cgYW5kIG9yaWdpbiBwYWdlczsgdGhpcyBpc24ndCBqdXN0IGRlY29yYXRpb24hIFRoZXNlIGFjdGlvbnMgKmFsdGVyIGRhdGEgc3RydWN0dXJlcyouIE15IGNvbmNlcm4gdGhlbiBpcywgKmlzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUqP1xuXG5MZXQncyByZS1leGFtaW5lIHRoZSBjcml0ZXJpYS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhICh3aGVuIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCkgc3BlY2lmaWNhbGx5IG1lbnRpb25zIFwiUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLiBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIEl0IGZlZWxzIHRoYXQgdGhpcyBpcyBub3QgKnB1cmVseSogZGVjb3JhdGl2ZSwgYXMgaXQgdG91Y2hlcyB0aGUgS01TQU4gc3RhY2sgZGVwb3QsIGFuZCBzaGFkb3cgcGFnZXMuXG5cbk15IGFuYWx5c2lzIGZvY3VzZXMgb24gYGttc2FuX2FsbG9jX3BhZ2VgIHdoaWNoIHJlc2lkZXMgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cblRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgKmFsdGVycyBkYXRhIHN0cnVjdHVyZXMqIChzaGFkb3cgcGFnZXMsIG9yaWdpbnMsIHRoZSBLTVNBTiBzdGFjayBkZXBvdCkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2hlbiBLTVNBTiBpcyBlbmFibGVkLiAgRnVydGhlcm1vcmUsIGl0IGlzIG1vZGlmeWluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdoaWNoIGlzIGEga2V5IG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiBgbW0vYC5cblxuVGhlcmVmb3JlLCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBzZWUgd2hhdCBhY3R1YWxseSBjYWxscyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtgIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MDMuODAxNTAwNTgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY5MDAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjAzLjg3ODE5NjQzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc0MzQyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIGFyZSB3ZSBzZWVpbmcgYGFsbG9jX3BhZ2VzX2J1bGsqYCB1c2VkIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHV0aWxpemVkLiBNeSBmaXJzdCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgdGhlIGRyaXZlciBjb2RlLCBzaW5jZSB0aGF0J3MgYSBjb21tb24gYXJlYSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLiBBZnRlciB0aGF0LCBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIGFueSBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gTmV0d29yayBkcml2ZXJzIGFyZSBvZnRlbiBoZWF2eSBjb25zdW1lcnMgb2YgbWVtb3J5IGFuZCBtaWdodCBiZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGBhbGxvY19wYWdlc19idWxrKmAuIEZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBjb3JlIGl0c2VsZiDigJMgaXQncyBwb3NzaWJsZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIG1tIHN1YnN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCdzIGNhbGxpbmcgYGFsbG9jX3BhZ2VzX2J1bGsqYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA5OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjA1Ljk1MjU0MTcyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMDU5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzMy1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XFx0LyogTWFyayBlbXB0eSBhbGxvYy5jYWNoZSBzbG90cyBcXFwiZW1wdHlcXFwiIGZvciBhbGxvY19wYWdlc19idWxrICovXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM1LVxcdG1lbXNldChcXHUwMDI2cG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUsIDAsIHNpemVvZih2b2lkICopICogYnVsayk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM2LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcXHRucl9wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIHBvb2wtXFx1MDAzZXAubmlkLCBidWxrLFxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cXHRcXHRcXHRcXHRcXHQgKHN0cnVjdCBwYWdlICoqKXBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz02ODc9c3RhdGljIGJvb2wgc3ZjX2ZpbGxfcGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTItXFx0Zm9yIChmaWxsZWQgPSAwOyBmaWxsZWQgXFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo2OTM6XFx0XFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjk0LVxcdFxcdGlmIChyZXQgXFx1MDAzZSBmaWxsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjA2LjAxOTg1MTQ3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDQ4MTIxOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIHNlbWFudGljcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHVzaW5nIGl0IGNvcnJlY3RseSBmb3IgbXkgY3VycmVudCB0YXNrLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgZGVmaW5pdGlvbiwgc28gSSdtIG9wZW5pbmcgdXAgYGluY2x1ZGUvbGludXgvZ2ZwLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxhZ3MgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWZpbmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNhbm9uaWNhbCBkZWZpbml0aW9uLCB0aGUgcGFyYW1ldGVycywgYW5kIGFueSBwZXJ0aW5lbnQgY29tbWVudHMgYWJvdXQgaXRzIGludGVuZGVkIHVzZSBhbmQgY2F2ZWF0cy4gSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGZsYWdzIGJlaW5nIHVzZWQgaXMgY3VycmVudCBhbmQgY29ycmVjdC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2ODQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTowOS40Njc5NzYyNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDE0OTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTowOS41ODgxMzEzMjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ0NDAwMzQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGb2N1c1N5bWJvbCBDb25zaWRlcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZyb20gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBGb2N1c1N5bWJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB3aGV0aGVyIGl0IGZpdHMgdGhlIGNyaXRlcmlhIGZvciBpbmNsdXNpb24uXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIFNlY3Rpb24gNCBvZiB0aGUgZ3VpZGVsaW5lcy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzOiBcIkFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUy5cIiBUaGV5IGV4cGxpY2l0bHkgbWVudGlvbiBhdm9pZGluZyB0aGluZ3MgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiBTbywgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdWJpcXVpdG91cyo/IElzIGl0IGxpa2UgYSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIG9yIGBrbWFsbG9jYD9cblxuTm8sIHdhaXQsIEkgZG9uJ3QgdGhpbmsgc28uIEl0IGxvb2tzIGxpa2UgaXQncyAqc3BlY2lmaWMqIHRvIGJ1bGsgYWxsb2NhdGlvbi4gSXQncyBjYWxsZWQgYnkgcGFydGljdWxhciBzdWJzeXN0ZW1zLiBJIHJlbWVtYmVyIGl0IGZyb20gYGNvcHlfc3BsaWNlX3JlYWRgIGluIHNwbGljZSwgZnVzZSByZWFkZGlyLCBwYWdlX3Bvb2wsIGJ0cmZzLCBzdmNfZmlsbF9wYWdlcyBhbmQgdGhlIGxpa2UuIEl0IGltcGxlbWVudHMgKnNwZWNpZmljKiBsb2dpYyBhbmQgc2VydmVzIGFzIGEgdGFyZ2V0ZWQgZW50cnlwb2ludCBmb3IgY2VydGFpbiBmZWF0dXJlcy4gU28sIGl0J3MgKm5vdCogYSBnZW5lcmFsIGFsbG9jYXRvciB0aGF0IGV2ZXJ5dGhpbmcgdXNlcy4gVGhhdCdzIGEgZ29vZCBzaWduLlxuXG5Pa2F5LCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIGRvIGEgZGVlcGVyIGRpdmUuIExldCdzIGRvIGEgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBib3RoIGBhbGxvY19wYWdlc19idWxrYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MTMuMDMyMTQzMjEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzNjg5NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOToxNC43NDU4MzkyNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwNjQwNjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQncyBhIGdlbmVyaWMgbGlmZWN5Y2xlIGZ1bmN0aW9uIG9yIGEgZmVhdHVyZSBzeW1ib2wuIE15IGd1dCBzYXlzIGl04oCZcyByZWxhdGVkIHRvIGJ1bGsgbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIHRyaWdnZXJzIGEgcXVpY2sgcmV2aWV3IG9mIFJ1bGUgNC4gUmlnaHQsIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIGFuZCBzeW5jIHByaW1pdGl2ZXMgYmVjYXVzZSB0aGF0IGRpbHV0ZXMgdGhlIGZ1enppbmcgZWZmb3J0LlxuXG5UaGUga2V5IGlzIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgaG90LXBhdGggY2FsbGVkIGluIG5lYXJseSBldmVyeSBwcm9ncmFtIGV4ZWN1dGlvbi4gVG8gZmlndXJlIHRoaXMgb3V0LCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbGVyczogYGNvcHlfc3BsaWNlX3JlYWRgLCBgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYCwgYW5kLCBvZiBjb3Vyc2UsIGl0c2VsZiBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBJcyBpdCBjYWxsZWQgb24gKmV2ZXJ5KiBzeXprYWxsZXIgcHJvZ3JhbSBleGVjdXRpb24/IE5vLCB0aGF04oCZcyBub3QgcmlnaHQuIFRoZSBnZW5lcmFsIGFsbG9jYXRpb24gcGF0aCBpcyBtb3JlIGxpa2VseSBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBga21hbGxvY2AsIG9yIGBrbWVtX2NhY2hlX2FsbG9jYC4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBzdWJzeXN0ZW1zOiB2bWFsbG9jLCBgc3BsaWNlYCwgYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2AsIGBidHJmc2AsIGBwYWdlX3Bvb2xgIGFtb25nIG90aGVycy5cblxuQWhhISBOb3cgSSBzZWUgYSBjb25uZWN0aW9uIHRvIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGFuZCBub3cgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gaWYgS01TQU4gaXMgZW5hYmxlZCwgYGttc2FuX2FsbG9jX3BhZ2VgICppcyogdWJpcXVpdG91cy4gSXQncyBlc3NlbnRpYWxseSBjYWxsZWQgaW4gZXZlcnkgbm9ybWFsIHBhZ2UgYWxsb2NhdGlvbi4gQnV0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgc3RpbGwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiBga21zYW5fYWxsb2NfcGFnZWAgaXMgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfS01TQU5gIGlzIHNldCAob3RoZXJ3aXNlLCBpdCdzIGp1c3QgYSBzdGF0aWMgaW5saW5lKS4gQWxzbywgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGRlZmluZWQgd2hlbiB0cmFjZXBvaW50cyBhcmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBndWFyZGVkIGJ5IGFueSBzcGVjaWZpYyBjb25maWdzLiBOZWVkIHRvIGNoZWNrIGBtbS9wYWdlX2FsbG9jLmNgIGFyb3VuZCBsaW5lcyA1MTUwLTUzMTAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjIwLjI1MjI0ODQ3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxNTA6XFx0ICogTm90ZSB0aGF0IG9ubHkgdGhlIGVsZW1lbnRzIGluIEBwYWdlX2FycmF5IHRoYXQgd2VyZSBjbGVhcmVkIHRvICVOVUxMIG9uXFxuNTE1MTpcXHQgKiBlbnRyeSBhcmUgcG9wdWxhdGVkIHdpdGggbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBAbnJfcGFnZXMgaXMgdGhlIG1heGltdW1cXG41MTUyOlxcdCAqIG51bWJlciBvZiBwYWdlcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBhcnJheS5cXG41MTUzOlxcdCAqXFxuNTE1NDpcXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gQHBhZ2VfYXJyYXksIGluY2x1ZGluZyBvbmVzIGFscmVhZHlcXG41MTU1OlxcdCAqIGFsbG9jYXRlZCBvbiBlbnRyeS4gIFRoaXMgY2FuIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZCBpbiBAbnJfcGFnZXMsXFxuNTE1NjpcXHQgKiBidXQgYWxsIGVtcHR5IHNsb3RzIGFyZSBmaWxsZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiAgSS5lLiwgaWYgYWxsIHNsb3RzIGluXFxuNTE1NzpcXHQgKiBAcGFnZV9hcnJheSB3ZXJlIHNldCB0byAlTlVMTCBvbiBlbnRyeSwgdGhlIHNsb3RzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZhbHVlXFxuNTE1ODpcXHQgKiAtIDEgd2lsbCBiZSBmaWxsZWQuXFxuNTE1OTpcXHQgKi9cXG41MTYwOlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG41MTYxOlxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuNTE2MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuNTE2MzpcXHR7XFxuNTE2NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MTY1OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjUxNjY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNTE2NzpcXHRcXHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xcbjUxNjg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XFxuNTE2OTpcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcXG41MTcwOlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcXG41MTcxOlxcdFxcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0LypcXG41MTc0OlxcdFxcdCAqIFNraXAgcG9wdWxhdGVkIGFycmF5IGVsZW1lbnRzIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZXMgbmVlZFxcbjUxNzU6XFx0XFx0ICogdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBkaXNhYmxpbmcgSVJRcy5cXG41MTc2OlxcdFxcdCAqL1xcbjUxNzc6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSlcXG41MTc4OlxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUxNzk6XFx0XFxuNTE4MDpcXHRcXHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXFxuNTE4MTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gMCkpXFxuNTE4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXFxuNTE4NTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcbjUxODg6XFx0XFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xcbjUxODk6XFx0XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgKGdmcCBcXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOToyMC4yNTI4ODM1OTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4MTA3NDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBLTVNBTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIEtNU0FOIGRpcmVjdGx5IG5lZWRzIGBDT05GSUdfS01TQU5gLCBuYXR1cmFsbHkuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB0byB0cnVseSBleGVyY2lzZSB0aGUgYGttc2FuX2FsbG9jX3BhZ2VgIGhvb2sgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMsIHRoZSBgS01TQU5gIG9wdGlvbiAqaXMqIHJlbGV2YW50LCBldmVuIHRob3VnaCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGNvbXBpbGVzIHJlZ2FyZGxlc3MuIFNvLCB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQgYW5kIGxpbmtlZCB1cCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLTVNBTmAuIEknbGwgZGlnIHRocm91Z2ggYGxpYi9LY29uZmlnLmttc2FuYCBhbmQgYG1tL2thc2FuL0tjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTQ1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MjIuNzMzOTYxOTA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExNDU2MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLTVNBTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5rbXNhbj01PWNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbi03LVxcbmxpYi9LY29uZmlnLmttc2FuOjg6Y29uZmlnIEtNU0FOXFxubGliL0tjb25maWcua21zYW4tOS1cXHRib29sIFxcXCJLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXFxcIlxcbi0tXFxubGliL0tjb25maWcua21zYW49MjY9aWYgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi0yNy1cXG5saWIvS2NvbmZpZy5rbXNhbjoyODpjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXFxubGliL0tjb25maWcua21zYW4tMjktXFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnNcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbi00MS1cXG5saWIvS2NvbmZpZy5rbXNhbjo0Mjpjb25maWcgS01TQU5fS1VOSVRfVEVTVFxcbmxpYi9LY29uZmlnLmttc2FuLTQzLVxcdHRyaXN0YXRlIFxcXCJLTVNBTiBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjI0LjQ0NTQyNDExN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTE2NTE4MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtNU0FOIERlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgS01TQU4uIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgS01TQU4ncyBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyB0byBgbGliL0tjb25maWcua21zYW5gLiBJIHN1c3BlY3QgdGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjcnVjaWFsIGBjb25maWdgIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgS01TQU4gYW5kIGxpa2VseSBpdHMgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgY29uZGl0aW9uYWxzIHRoZXJlIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIEtNU0FOIGNvZGUgYW5kIGluc3RydW1lbnRhdGlvbiBhcmUgY29tcGlsZWQsIHBvdGVudGlhbGx5IGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcywgb3IgZXZlbiBjb21waWxlLXRpbWUgZmxhZ3MgdGhhdCBtYXkgYmUgcmVsZXZhbnQgdG8gdGVzdGluZyBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgYC1mc2FuaXRpemU9a21zYW5gLiBLbm93aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpbnRpbWF0ZWx5IGlzIGNydWNpYWwgZm9yIHByb3BlciBpbnRlZ3JhdGlvbiwgdHJvdWJsZXNob290aW5nLCBhbmQgb3B0aW1pemF0aW9uIG9mIHRoZSBLTVNBTiBidWlsZCBwcm9jZXNzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGN1c3RvbSBrZXJuZWwgYnVpbGRzIG9yIHNwZWNpYWxpemVkIGhhcmR3YXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSB2YXJpYWJsZXMgdG8gZW5zdXJlIEknbSBnZXR0aW5nIGEgY2xlYW4gYW5kIGNvcnJlY3QgS01TQU4gYnVpbGQuIExldCdzIHNlZSB3aGF0IHRoZSBgS2NvbmZpZ2AgaGFzIHRvIHRlbGwgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MjguMzYxOTQ2MTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmttc2FuXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSEFWRV9BUkNIX0tNU0FOXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXFxuICAgNjpcXHRcXHRkZWZfYm9vbCAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtlcm5lbC1tZW1vcnkpXFxuICAgNzpcXHRcXG4gICA4OlxcdGNvbmZpZyBLTVNBTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiS01TQU46IGRldGVjdG9yIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZVxcXCJcXG4gIDEwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tNU0FOIFxcdTAwMjZcXHUwMDI2IEhBVkVfS01TQU5fQ09NUElMRVJcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2ICFLQVNBTiBcXHUwMDI2XFx1MDAyNiAhS0NTQU5cXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gIVBSRUVNUFRfUlRcXG4gIDEzOlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UXFxuICAxNDpcXHRcXHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVFxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBpcyBhIGR5bmFtaWMgZGV0ZWN0b3Igb2YgdXNlcyBvZlxcbiAgMTc6XFx0XFx0ICB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiB0aGUga2VybmVsLiBJdCBpcyBiYXNlZCBvbiBjb21waWxlclxcbiAgMTg6XFx0XFx0ICBpbnN0cnVtZW50YXRpb24gcHJvdmlkZWQgYnkgQ2xhbmcgYW5kIHRodXMgcmVxdWlyZXMgQ2xhbmcgdG8gYnVpbGQuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgQW4gaW1wb3J0YW50IG5vdGUgaXMgdGhhdCBLTVNBTiBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlLFxcbiAgMjE6XFx0XFx0ICBiZWNhdXNlIGl0IGRyYXN0aWNhbGx5IGluY3JlYXNlcyBrZXJuZWwgbWVtb3J5IGZvb3RwcmludCBhbmQgc2xvd3NcXG4gIDIyOlxcdFxcdCAgdGhlIHdob2xlIHN5c3RlbSBkb3duLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2Rldi10b29scy9rbXNhbi5yc3RcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdGlmIEtNU0FOXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXFxcIlxcbiAgMzA6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZnNhbml0aXplLW1lbW9yeS1wYXJhbS1yZXR2YWwsIEtNU0FOIHdpbGxcXG4gIDMzOlxcdFxcdCAgZWFnZXJseSBjaGVjayBldmVyeSBmdW5jdGlvbiBwYXJhbWV0ZXIgcGFzc2VkIGJ5IHZhbHVlIGFuZCBldmVyeVxcbiAgMzQ6XFx0XFx0ICBmdW5jdGlvbiByZXR1cm4gdmFsdWUuXFxuICAzNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MjguMzYyMDA4M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MzMwMjI5MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkb3VibGUtY2hlY2sgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIEtNU0FOLiBJcyBLTVNBTiByZXF1aXJlZCBmb3IgY29tcGlsYXRpb24gb3IganVzdCBmb3IgZW5hYmxpbmcgdGhlIHNwZWNpZmljIHRyYWNpbmcvaW5pdGlhbGl6YXRpb24gbG9naWM/IFRoZSBjb2RlICpjb21waWxlcyogcmVnYXJkbGVzcywgYXMgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIGEgc3RhdGljIGlubGluZSB0aGF0IGJlY29tZXMgYW4gZW1wdHkgZnVuY3Rpb24gd2hlbiBLTVNBTiBpcyBvZmYuIEJ1dCB0aGUgd2hvbGUgKnBvaW50KiBvZiBhZGRpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgZm9yIEtNU0FOIHRvIHByb3Blcmx5IHRyYWNrIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBTbywgeWVzLCBgQ09ORklHX0tNU0FOYCBpcyAqZGVmaW5pdGVseSogdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gVGhlIGBXb3J0aEZ1enppbmdgIHJ1bGVzIHNheSB3ZSBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUsIGVzcGVjaWFsbHkgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LiBBbmQgaGVyZSwgd2UgYXJlICphYnNvbHV0ZWx5KiBtb2RpZnlpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhZGRpbmcgcGFnZSBhbGxvY2F0aW9uIHRyYWNpbmcgKmFuZCogS01TQU4gdHJhY2tpbmcuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgaXQncyByZWFjaGFibGUuIFNvLCBcIldvcnRoRnV6emluZ1wiIGlzIGdvaW5nIHRvIGJlIHRydWUuXG5cbkZvciBgRW5hYmxlQ29uZmlnc2AsIGl0J3Mgc3RyYWlnaHRmb3J3YXJkOiBgS01TQU5gLiBTaW5jZSBga21zYW5fYWxsb2NfcGFnZWAgb25seSBkb2VzIGFueXRoaW5nIHdoZW4gS01TQU4gaXMgZW5hYmxlZCwgdGhhdCdzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIHdlIHNob3VsZCBpbmNsdWRlIGBrbXNhbl9hbGxvY19wYWdlYCBpdHNlbGYsIGJ1dCB0aGF0J3MgY2FsbGVkICpldmVyeXdoZXJlKiB3aGVuIEtNU0FOIGlzIGVuYWJsZWQsIHNvIGl0J3MgcHJvYmFibHkgdG9vIHViaXF1aXRvdXMuIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaG93ZXZlciwgaXMgdGhlIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgdGhlIGNoYW5nZSB3YXMgaW50cm9kdWNlZC4gVGhlIGNoYW5nZSBhZGRzIHRoZSBga21zYW5fYWxsb2NfcGFnZWAgY2FsbCBzbyB0aGF0IGlzIHRoZSBwcmVjaXNlIGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLlxuXG5CdXQgd2FpdCwgc2hvdWxkIHdlIGV4cGFuZCB0aGUgbGlzdCB0byBpbmNsdWRlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIGxpa2UgYGNvcHlfc3BsaWNlX3JlYWRgIG9yIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYD8gSSB0aGluayBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyB0aGUgcHJlY2lzZSB0YXJnZXQuIEl0IGlzIHRoZSBleGFjdCBub24taW5saW5lZCBzeW1ib2wgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbiBoYXBwZW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFzIHdlbGwgaW4gYG1tL21lbXBvbGljeS5jYCBhcyBhIHBvc3NpYmxlIHBvaW50IHRvIGV4YW1pbmUuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGluZGVlZCBhbiBleHBvcnRlZCBub24taW5saW5lIGZ1bmN0aW9uOiBgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLCAuLi4pYCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZilgLlxuXG5Pa2F5LCB0aW1lIGZvciBhIGZpbmFsIHJldmlldy4gXCJXb3J0aEZ1enppbmdcIiBpcyBgdHJ1ZWAgYmVjYXVzZSB0aGUgcGF0Y2ggYWRkcyB0aGUgYGttc2FuX2FsbG9jX3BhZ2UoKWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvci4gVGhpcyBpcyBjcml0aWNhbDogSXQgbWFrZXMgc3VyZSB0aGF0IEtNU0FOIHByb3Blcmx5IHRyYWNrcyBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgcGFnZXMgYWxsb2NhdGVkIGluIGJ1bGssIHByZXZlbnRpbmcgaW5jb3JyZWN0IHNhbml0aXphdGlvbiBzdGF0ZSBpbiBvdGhlciBzdWJzeXN0ZW1zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgdGhhdCB3ZSBuZWVkIHRvIGZ1enogd2l0aCBLTVNBTiBlbmFibGVkLlxuXG5UaGUgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFtcIktNU0FOXCJdYC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGlzIGp1c3QgYFtcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJdYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQyLCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjM2LjY5MjIzOTc3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMjExODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS01TQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBrbXNhbl9hbGxvY19wYWdlKCkgYW5kIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBjYWxscyB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYy4gVGhpcyBlbnN1cmVzIEtNU0FOIHByb3Blcmx5IGluaXRpYWxpemVzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcgd2l0aCBLTVNBTiBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTozNi43NjQ0NTkzMDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDYyMTMxMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MzYuNzY0OTE3MDc2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjA0NjE2Njc4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LlxcblxcblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZjJhZjk2ZDEwZjZhYWRlNDY5MWRhYTcxNzY3NmU5Yjc2OGY2ZTgxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzoxODozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uNzNjNzM0OTlhMDUxYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI4MCw2ICs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4rXHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjM2Ljc2NDkxOTY5NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njg0ODYwNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY2hhbmdlcyB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgc2VlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgdGhlIGFkZGl0aW9uIG9mIHR3byBrZXkgbGluZXM6IGEgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGNhbGwgYW5kIGEgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGwuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgc3BlY2lmaWNhbGx5IHdoYXQgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIGRvaW5nLiBJIGNhbid0IGltbWVkaWF0ZWx5IHNlZSB0aGUgZnVsbCBzY29wZSBvZiB0aGUgaW1wYWN0IGJhc2VkIG9uIHRoaXMgc21hbGwgc25pcHBldC4gSXQncyB0aW1lIHRvIGxldmVyYWdlIG15IHRvb2xzLiBJJ2xsIHJlYWNoIGZvciBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMgYHJlYWQtZmlsZWAsIGRlcGVuZGluZyBvbiBteSBwcmVmZXJyZWQgbWV0aG9kLCB0byBpbnZlc3RpZ2F0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGVmaW5pdGlvbnMgb2YgYm90aCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGFzc2VzcyB0aGUgcHVycG9zZSBhbmQgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6NDMuNDQ5NzgzODI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ2MDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUxMzktLypcXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XFxubW0vcGFnZV9hbGxvYy5jLTUxNDEtICogQGdmcDogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvblxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXFxubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuYy01MTYxLVxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTMwMS19XFxubW0vcGFnZV9hbGxvYy5jOjUzMDI6RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTo0My41MDQyNTQ2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM2MDAyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tL3BhZ2VfYWxsb2MuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbWVtb3J5IGFsbG9jYXRpb24gaXMgZnVuY3Rpb25pbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGxpbmVzIDUyNTAgdGhyb3VnaCA1MzAwLiBUaGF0IHJhbmdlIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlcmUuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgYXJlIGRlc2NyaXB0aXZlIGVub3VnaCB0byBtYWtlIGl0IGFuIGVhc3kgcHJvY2Vzcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGJlaW5nIHVzZWQgYW5kIHRoZSBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcyB0aGF0IG9jY3VyLiBJIGFsc28gd2FudCB0byBzZWUgdGhlIGxvY2tpbmcgdGhhdCBpcyB1c2VkIHRvIHByb3RlY3QgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6NDUuNDQwMjYwNTA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI1MDpcXHRcXHQgKi9cXG41MjUxOlxcdFxcdGlmICh1bmxpa2VseSghem9uZSkpXFxuNTI1MjpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjUzOlxcdFxcbjUyNTQ6XFx0XFx0Lyogc3Bpbl90cnlsb2NrIG1heSBmYWlsIGR1ZSB0byBhIHBhcmFsbGVsIGRyYWluIG9yIElSUSByZWVudHJhbmN5LiAqL1xcbjUyNTU6XFx0XFx0cGNwID0gcGNwX3NwaW5fdHJ5bG9jayh6b25lLVxcdTAwM2VwZXJfY3B1X3BhZ2VzZXQpO1xcbjUyNTY6XFx0XFx0aWYgKCFwY3ApXFxuNTI1NzpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjU4OlxcdFxcbjUyNTk6XFx0XFx0LyogQXR0ZW1wdCB0aGUgYmF0Y2ggYWxsb2NhdGlvbiAqL1xcbjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41MjgzOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4NDpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcXG41Mjg1OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41Mjg2OlxcdFxcdH1cXG41Mjg3OlxcdFxcbjUyODg6XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuNTI4OTpcXHRcXG41MjkwOlxcdFxcdF9fY291bnRfemlkX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lX2lkeCh6b25lKSwgbnJfYWNjb3VudCk7XFxuNTI5MTpcXHRcXHR6b25lX3N0YXRpc3RpY3Moem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIHpvbmUsIG5yX2FjY291bnQpO1xcbjUyOTI6XFx0XFxuNTI5MzpcXHRvdXQ6XFxuNTI5NDpcXHRcXHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xcbjUyOTU6XFx0XFxuNTI5NjpcXHRmYWlsZWQ6XFxuNTI5NzpcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuNTI5ODpcXHRcXHRpZiAocGFnZSlcXG41Mjk5OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41MzAwOlxcdFxcdGdvdG8gb3V0O1xcbjUzMDE6XFx0fVxcbjUzMDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xcbjUzMDM6XFx0XFxuNTMwNDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTo0NS40NDA2OTE5NDRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MzcyNjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkgc2FuaXRpemF0aW9uLCBsaWtlbHkgS01TQU4uIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gZmluZGluZyBpdHMgY2FsbCBzaXRlcyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgdXNlZCBhbmQgZm9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjayBkb3duIGFsbCB0aGUgbG9jYXRpb25zIGluIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHBhdHRlcm5zIGFuZCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgc2VhcmNoIGVmZmljaWVudGx5LCBrbm93aW5nIHRoYXQgSSdsbCBoYXZlIHRvIGludGVycHJldCB0aGUgcmVzdWx0cyBhbmQgZmlsdGVyIG91dCBmYWxzZSBwb3NpdGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjQ3LjIyNDQyMTg0NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMTEyMTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cXG5tbS9rbXNhbi9zaGFkb3cuYzoxNzE6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNzAtICpcXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NDYxLVxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjQ4Ljc0NTU0OTExNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE4ODg3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFNoYWRvd2luZyBhbmQgUGFnZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYmVpbmcgYWRkZWQgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSXQncyBjbGVhciB0aGF0IHRoZSBpc3N1ZSBpcyBzcGVjaWZpYyB0byBwYWdlcyBjb21pbmcgZnJvbSB0aGUgcGNwbGlzdCwgb3IgYF9fcm1xdWV1ZV9wY3BsaXN0YCwgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFJpZ2h0LCB0aGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYGFsbG9jX3BhZ2VzX2J1bGtgIHB1bGxzIHBhZ2VzIGZyb20gdGhlIHBjcGxpc3QsIHdlIHdlcmUgYnlwYXNzaW5nIEtNU0FOJ3MgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gc3RlcHMuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgYGttc2FuX2FsbG9jX3BhZ2VgIHdhc24ndCBiZWluZyBjYWxsZWQgZm9yIHRob3NlIHBjcGxpc3Qtc291cmNlZCBwYWdlcy4gVGhpcyBtZWFucyBLTVNBTiB3YXNuJ3QgaW5pdGlhbGl6aW5nIHRoZSBzaGFkb3cgbWVtb3J5IG9yIG9yaWdpbiBtZXRhZGF0YSBmb3IgdGhlc2UgcGFnZXMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlIGRldGFpbHMgb2Ygd2hldGhlciBLTVNBTiBjb3JyZWN0bHkgbWFya3MgdGhvc2UgcGFnZXMgYXMgaW5pdGlhbGl6ZWQgb3Igbm90IGRlcGVuZGluZyBvbiBgX19HRlBfWkVST2AuIFNvLCB3aXRob3V0IGNhbGxpbmcgYGttc2FuX2FsbG9jX3BhZ2VgLCBLTVNBTiB3b3VsZG4ndCBrbm93IGFib3V0IHRoZXNlIHBhZ2VzLCBhbmQgcG90ZW50aWFsbHkgbGVhZCB0byBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMuIFRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9rbXNhbi9zaGFkb3cuY2AgYW5kIGNvbmZpcm0gZXhhY3RseSBob3cgS01TQU4gaGFuZGxlcyB0aGUgc2hhZG93IG1lbW9yeSBhbmQgb3JpZ2luIHRyYWNraW5nIHdpdGhpbiBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGl0cyByZWxhdGlvbiB0byBhbGxvY2F0aW9uIGZsYWdzLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZW5kZWQgdG8gZGVhbCB3aXRoIHRoZSB6ZXJvaW5nLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6NTEuNjY0NDM4OTc1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjUxLjY2NDUwOTQ1NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzgyMzg0NjcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtNU0FOIE5lZWQgZm9yIGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaW5pdGlhbGx5LCBteSBmaXJzdCB0aG91Z2h0IHdhcyBcIldvdywgdGhpcyBzZWVtcyBzaWduaWZpY2FudCFcIi4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgaW50ZWdyYXRpbmcgS01TQU4gaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBzcGVjaWZpY2FsbHkgd2hlbiBgX19HRlBfWkVST2AgaXNuJ3Qgc2V0LiBQcmV2aW91c2x5LCB3ZSB3ZXJlbid0IGluaXRpYWxpemluZyB0aGUgc2hhZG93IG1lbW9yeSBmb3IgdGhvc2UgcGFnZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTm93LCB3aXRoIGBrbXNhbl9hbGxvY19wYWdlYCwgd2UncmUgdHJhY2tpbmcgdGhlc2UgYnVsayBhbGxvY2F0aW9ucyBwcm9wZXJseSwgbWFya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoIGAweGZmYCBhbmQgY2FwdHVyaW5nIHRoZSBvcmlnaW4gc3RhY2sgdHJhY2UuXG5cbk15IGltbWVkaWF0ZSByZWFjdGlvbiB3YXMgdG8gY29uc2lkZXIgaWYgaXQgZXhwb3NlcyBhbnkgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCBJIHF1aWNrbHkgcmVhbGl6ZWQsIG5vLCB3YWl0LCBpdCdzICplbmFibGluZyogS01TQU4gdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGluIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBjb3VsZCBiZSBpbiBhbGwgc29ydHMgb2YgcGxhY2VzIC0gbmV0d29yayBkcml2ZXJzLCBwYWdlIHBvb2xzLCBmaWxlc3lzdGVtcywgYW5kIHNvIG9uLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhpcyBwcm9tcHQsIGJlY2F1c2UgdGhpcyBpcyBhYm91dCBkZWNpZGluZyBpZiB3ZSBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGtleSBkaXN0aW5jdGlvbiBpcyB0aGF0IEtBU0FOIGFscmVhZHkgY2F0Y2hlcyBhIHRvbiBvZiBidWdzLCBpbmNsdWRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFuZCoga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIFRoZSBndWlkZWxpbmUgaXMgY2xlYXI6IGlmIEtBU0FOIChvciBzb21ldGhpbmcgZWxzZSkgY2FuIGNhdGNoIHRoZSBpc3N1ZSwgd2UgKmRvbid0KiBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gYmVjYXVzZSBpdCdzIGV4cGVuc2l2ZS5cblxuU28sIGlzIHRoZSAqcGF0Y2ggaXRzZWxmKiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBvciBpcyBpdCAqbW9kaWZ5aW5nIGNvZGUqIHRoYXQgZXhwb3NlcyBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz9cblxuVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBkb2luZyB0aGUgbGF0dGVyLCBpdCdzIG1vZGlmeWluZyB0aGUgYWxsb2NhdGlvbiBjb2RlIHRvICplbmFibGUqIEtNU0FOIHRyYWNraW5nLCBub3QgKmludHJvZHVjaW5nKiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYWN0dWFsIHJpc2sgaXMgaW4gdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi5cblxuTGV0J3MgZG8gYSBsaXR0bGUgbW9yZSBkaWdnaW5nIGludG8gdGhlIGdpdCBoaXN0b3J5IHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyMDoxNS40ODgzNTg0NTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU1OTEyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fYWxsb2NfcGFnZVxcXFwocGFnZSwgMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjA6MTcuNjYzOTUzOTg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxOTMwODU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLTVNBTiBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoaXMgcGF0Y2ggaW4gcmVsYXRpb24gdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBLTVNBTi4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlKClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBNeSBmaXJzdCBjb25jZXJuIGlzIGFsd2F5cyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdhaXQsIGlzIEtNU0FOIHRoZSBzYW5pdGl6ZXIgaXRzZWxmP1xuXG5Pa2F5LCBzbyBieSBpbmNsdWRpbmcgYGttc2FuX2FsbG9jX3BhZ2UoKWAgd2l0aGluIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLCBpdCB3aWxsIG5vdyBmbGFnIHBhZ2VzIGFzIHVuaW5pdGlhbGl6ZWQgKG9yIGluaXRpYWxpemVkLCBpZiB1c2luZyBgX19HRlBfWkVST2ApLiBUaGlzIHJhaXNlcyB0aGUgcXVlc3Rpb246IGRvZXMgdGhpcyByZXZlYWwgZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBpbiBjb2RlIHRoYXQgdXNlcyBgYWxsb2NfcGFnZXNfYnVsa2A/XG5cbkJlZm9yZSB0aGlzIHBhdGNoLCBLTVNBTiB3b3VsZG4ndCBkZXRlY3QgdW5pbml0aWFsaXplZCByZWFkcyBvbiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGJ1bGsgYWxsb2NhdG9yIGJlY2F1c2UgdGhlIFwic2hhZG93XCIgbWVtb3J5IHdhc24ndCBiZWluZyBjb3JyZWN0bHkgbWFya2VkLiBOb3csIGl0IHdpbGwhIEJ1dCBpcyB0aGUgKnBhdGNoIGl0c2VsZiogaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcywgb3IgaXMgaXQgc2ltcGx5IGV4cG9zaW5nIHByZS1leGlzdGluZyBvbmVzP1xuXG5UaGUgd29yZGluZyBlbXBoYXNpemVzIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAgb25seSBpZiB0aGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAuIFRoZSBjcml0ZXJpYSBpbmNsdWRlOiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgY2FuIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5Db252ZXJzZWx5LCB3ZSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBwcmltYXJpbHkgY29uY2VybiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGlzc3Vlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gYW5kIG90aGVyIHRvb2xzIGFscmVhZHkgaGFuZGxlKS4gVGhlIG90aGVyIGNvbmRpdGlvbnMgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYCBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlL2luZm9ybWF0aW9uIGxlYWtzLlxuXG5Ob3csIGxldCdzIGV2YWx1YXRlIHRoaXMgc3BlY2lmaWMgcGF0Y2g6IElzIGl0IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8gbGVha3M/IEl0J3MgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBpbnNpZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLlxuXG4qICAgSXMgaXQgc2VuZGluZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyBOby5cbiogICBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uXG4qICAgSXMgaXQgYWxsb2NhdGluZyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzPyBOby5cbiogICBBcmUgdGhlcmUgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uXG5cblNvLCB3aGF0IGlzIHRoZSBwYXRjaCBhY3R1YWxseSBkb2luZz8gSXQncyBhZGRpbmcgYSB0cmFjZXBvaW50IGFuZCBhIEtNU0FOIGhvb2sgdG8gdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IuIERvZXMgdGhlIGludHJvZHVjdGlvbiBvZiBga21zYW5fYWxsb2NfcGFnZSgpYCBpdHNlbGYgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBObywgYmVjYXVzZSBpdCdzIHNpbXBseSBob29raW5nIGludG8gdGhlIEtNU0FOIHJ1bnRpbWUgYW5kIHRyYWNpbmcuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIHBhdGNoICppdHNlbGYqIHdhcnJhbnQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IElmIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBLTVNBTiB3aWxsIG5vdyBkZXRlY3QgYnVncyBpbiBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zIHVzaW5nIGBhbGxvY19wYWdlc19idWxrYC4uLiBidXQgdGhlICpjdXJyZW50KiBldmFsdWF0aW9uIGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGUgKnBhdGNoIHVuZGVyIHJldmlldyogY3JlYXRlcyBuZXcgcmlza3MuIFdoeSBpcyB0aGlzIHBhdGNoIGJlaW5nIHN1Ym1pdHRlZCB0byBzeXotY2x1c3Rlcj8gSXQncyBtb3N0IGxpa2VseSBiZWNhdXNlIGl0J3MgYSBrZXJuZWwgcGF0Y2ggdW5kZXIgcmV2aWV3IChvciBzeXpib3QgaXMgdGVzdGluZyBpdCkuXG5cbklmIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBhIG1lbW9yeSBzdWJzeXN0ZW0gcGF0Y2ggdGhhdCBob29rcyBga21zYW5fYWxsb2NfcGFnZSgpYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAsIGRvZXMgaXQgaW50cm9kdWNlICpuZXcqIHJpc2tzPyBObyEgVmFyaWFibGVzIHVzZWQgYXMgaW5wdXQgYHBhZ2VgLCBgMGAsIGBnZnBgLCBhbmQgYGFjLm1pZ3JhdGV0eXBlYCBhcmUgYWxsIGluaXRpYWxpemVkIGVpdGhlciBhcyBsb2NhbCB2YXJpYWJsZXMgb3IgYXJlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIFRoZSBsb2NhbCB2YXJpYWJsZSBgYWNgIGlzIGRlY2xhcmVkIGFzIGFuIGBhbGxvY19jb250ZXh0IGFjID0geyB9O2BcblxuXG4iLCJJbnB1dFRva2VucyI6NzU1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjA6MjUuODU3MDQxOTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTYwOlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG41MTYxOlxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuNTE2MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuNTE2MzpcXHR7XFxuNTE2NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MTY1OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjUxNjY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNTE2NzpcXHRcXHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xcbjUxNjg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XFxuNTE2OTpcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcXG41MTcwOlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcXG41MTcxOlxcdFxcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0LypcXG41MTc0OlxcdFxcdCAqIFNraXAgcG9wdWxhdGVkIGFycmF5IGVsZW1lbnRzIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZXMgbmVlZFxcbjUxNzU6XFx0XFx0ICogdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBkaXNhYmxpbmcgSVJRcy5cXG41MTc2OlxcdFxcdCAqL1xcbjUxNzc6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSlcXG41MTc4OlxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUxNzk6XFx0XFxuNTE4MDpcXHRcXHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXFxuNTE4MTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gMCkpXFxuNTE4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXFxuNTE4NTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcbjUxODg6XFx0XFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xcbjUxODk6XFx0XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgKGdmcCBcXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxcbjUxOTA6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5MTpcXHRcXG41MTkyOlxcdFxcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cXG41MTkzOlxcdFxcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxcbjUxOTQ6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5NTpcXHRcXG41MTk2OlxcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbjUxOTc6XFx0XFx0LypcXG41MTk4OlxcdFxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxuNTE5OTpcXHRcXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuNTIwMDpcXHRcXHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXFxuNTIwMTpcXHRcXHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCdsbCBoYXZlXFxuNTIwMjpcXHRcXHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxcbjUyMDM6XFx0XFx0ICovXFxuNTIwNDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbjUyMDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIwNjpcXHQjZW5kaWZcXG41MjA3OlxcdFxcbjUyMDg6XFx0XFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cXG41MjA5OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyMDoyNS44NTczMjgxN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTk5NjU3NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFN1YnNldCoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4gYSBiaXQgZGVlcGVyLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRhdGEgYXJvdW5kIGxpbmVzIDUyMTAgdG8gNTI1MC4gTXkgaW5pdGlhbCBzY2FuIGRpZG4ndCByZXZlYWwgYW55dGhpbmcgb2J2aW91c2x5IGFtaXNzLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aG9zZSBzdWJ0bGUgYW5vbWFsaWVzIG9mdGVuIGhpZGUgaW4gdGhlIGltbWVkaWF0ZSB2aWNpbml0eSBvZiBzb21ldGhpbmcgbW9yZSBzaWduaWZpY2FudC4gSXQncyBhIGZvY3VzZWQgZXhhbWluYXRpb247IHBlcmhhcHMgdGhlcmUncyBhIGNsdXN0ZXJpbmcgZWZmZWN0LCBhIHNwZWNpZmljIHBhdHRlcm4gaW4gdGhvc2UgbGluZXMgdGhhdCBuZWVkcyB1bnBhY2tpbmcuIEnigJlsbCBiZSBsb29raW5nIGZvciBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGN1cnJlbnQgbW9kZWwgcmVzdWx0cyB3aGVuIGNvbXBhcmVkIHdpdGggdGhlIGV4cGVjdGVkIG91dGNvbWVzLCBvciBwZXJoYXBzIGNvcnJlbGF0aW9ucyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBhcHBhcmVudC4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgdGhlIGRhdGFzZXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyMDoyNy40NTY5ODgyMDRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjEwOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMTpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEyOlxcdFxcbjUyMTM6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE0OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE1OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTc6XFx0XFxuNTIxODpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMTk6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMTpcXHRcXHRcXHR9XFxuNTIyMjpcXHRcXG41MjIzOlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI0OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI1OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjY6XFx0XFx0XFx0fVxcbjUyMjc6XFx0XFxuNTIyODpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMjk6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzA6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMxOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzI6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG41MjM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyMzU6XFx0XFx0XFx0fVxcbjUyMzY6XFx0XFxuNTIzNzpcXHRcXHRcXHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcXG41MjM4OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfdGhpc196b25lO1xcbjUyMzk6XFx0XFxuNTI0MDpcXHRcXHRcXHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cXG41MjQxOlxcdFxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG41MjQyOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxcbjUyNDM6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuNTI0NDpcXHRcXHRcXHR9XFxuNTI0NTpcXHRcXHR9XFxuNTI0NjpcXHRcXG41MjQ3OlxcdFxcdC8qXFxuNTI0ODpcXHRcXHQgKiBJZiB0aGVyZSBhcmUgbm8gYWxsb3dlZCBsb2NhbCB6b25lcyB0aGF0IG1lZXRzIHRoZSB3YXRlcm1hcmtzIHRoZW5cXG41MjQ5OlxcdFxcdCAqIHRyeSB0byBhbGxvY2F0ZSBhIHNpbmdsZSBwYWdlIGFuZCByZWNsYWltIGlmIG5lY2Vzc2FyeS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjA6MjcuNDU3MjYyNjc0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3NjkyOTQ0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIGFkZGluZyBzb21lIHRyYWNpbmcgYW5kIGEgS01TQU4gaG9vayBjYWxsIHdpdGhpbiB0aGUgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBjYWxscyBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIHBhZ2VzIGFyZSBiZWluZyBwdWxsZWQgZnJvbSB0aGUgcGVyLWNwdSBsaXN0LCBgcGNwX2xpc3RgLiBUaGUgZnVuY3Rpb24gaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIHNvIEknbSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gRG9lcyB0aGlzIHBhdGNoIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXM/IE5vLCBpdCdzIG5vdCBhY3R1YWxseSAqYWxsb2NhdGluZyogbmV3IHN0cnVjdHVyZXMuIEl0J3MgaG9va2luZyBpbnRvIHRoZSBleGlzdGluZyBhbGxvY2F0aW9uIHByb2Nlc3MuIERvZXMgaXQgcGFzcyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8gTm9wZSwgdGhpcyBzZWVtcyBpbnRlcm5hbCB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIERvZXMgaXQgY3JlYXRlIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3QgYWNjb3JkaW5nIHRvIG15IHF1aWNrIGFzc2Vzc21lbnQuIEFuZCBpcyBpdCBtb2RpZnlpbmcgY29tcGxleCBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCAqY291bGQqIGNyZWF0ZSBhIHJpc2s/IE5vLCBkb2Vzbid0IHNlZW0gdG8gYmUgdG91Y2hpbmcgdGhvc2UgYXNwZWN0cyBhdCBhbGwuXG5cbkJhc2VkIG9uIHRoaXMgcXVpY2sgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGUgdXN1YWwgc2FuaXRpemVycyBhbmQgS0FTQU4sIG9yIHN0YW5kYXJkIHRlc3RpbmcsIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMuIFRoZXJlIGFyZSBubyBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBzaW1wbHkgaW5zdHJ1bWVudGF0aW9uLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbk5vdywgbGV0J3MgY29uc3RydWN0IHRoZSBgS01TQU5SZWFzb25pbmdgIGJsb2NrLCB0byBwcm92aWRlIGEgY29uY2lzZSBhbmQgYWNjdXJhdGUgZXhwbGFuYXRpb246XG5cbiogICAqKkRlc2NyaXB0aW9uOioqIFRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb24gaXMgYWRkaW5nIHRoZSBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCB0cmFjZXBvaW50IGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIHRvIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yIGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZW4gcHVsbGluZyBwYWdlcyBmcm9tIHRoZSBwZXItY3B1IHBhZ2UgbGlzdCAoYHBjcF9saXN0YCkuXG4qICAgKipDb250cmFzdCBLQVNBTiB2cy4gS01TQU46KiogVGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vciBkb2VzIGl0IGFsbG93IGZvciB0aGUgcGFzc2luZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYW5kIHRoZXJlIGFyZSBubyBidWZmZXIgYm91bmRzIGFsdGVyYXRpb25zLiBUaGUgcGF0Y2ggKmFkZHMqIGEgS01TQU4gdHJhY2tpbmcgaG9vayBhbmQgYSB0cmFjZXBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuXG4qICAgKipDb25jbHVzaW9uOioqIFRoZXJlIGFyZSBubyBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuIEhlbmNlLCBgTmVlZHNLTVNBTjogZmFsc2VgLlxuXG5UaGF0J3MgbXkgY29tcGxldGUgYXNzZXNzbWVudC4gSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTE5LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjIwOjM3LjIyNjU2MTA0N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3QuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9sZW5ndGhzLiBBbGwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGUgbmV3IGNhbGxzIChgcGFnZWAsIGAwYCwgYGdmcGAsIGBhYy5taWdyYXRldHlwZWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LlxcblxcblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9jgq2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 06:57:30 +0000 UTC FinishedAt: 2026-09-08 07:20:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "349e46dc-3a6f-4ac8-bfd0-2154f8e25c41" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgYW5kIGBrbXNhbl9hbGxvY19wYWdlKClgIGhvb2sgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBQQ1AgbGlzdC5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9sZW5ndGhzLiBBbGwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGUgbmV3IGNhbGxzIChgcGFnZWAsIGAwYCwgYGdmcGAsIGBhYy5taWdyYXRldHlwZWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3Npbmcga21zYW5fYWxsb2NfcGFnZSgpIGFuZCB0cmFjZV9tbV9wYWdlX2FsbG9jKCkgY2FsbHMgdG8gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMuIFRoaXMgZW5zdXJlcyBLTVNBTiBwcm9wZXJseSBpbml0aWFsaXplcyBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgYnVsayBwYWdlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgd2FycmFudCBmdXp6aW5nIHdpdGggS01TQU4gZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmMmFmOTZkMTBmNmFhZGU0NjkxZGFhNzE3Njc2ZTliNzY4ZjZlODFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjE4OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uNzNjNzM0OTlhMDUxYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI4MCw2ICYjNDM7NTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuJiM0MztcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbiYjNDM7XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZjJhZjk2ZDEwZjZhYWRlNDY5MWRhYTcxNzY3NmU5Yjc2OGY2ZTgxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNzoxODozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi43M2M3MzQ5OWEwNTFiIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01MjgwLDYgJiM0Mzs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCiAJCXByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTsKIAkJc2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTsKJiM0MzsJCXRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7CiYjNDM7CQlrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCAmYW1wOyB+X19HRlBfUkVDTEFJTSk7CiAJCXBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTGludXggS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGZ1enppbmcuIFN0YW5kYXJkIHRyaWFnZSBzdHVmZi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoaXMgaXMgYmVuaWduLiBJdCYjMzk7cyBhYm91dCBub3JtYWwgZGV2ZWxvcGVyIFFBLCBqdXN0IG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgcGxheWluZyBuaWNlbHkgd2l0aCB0aGUga2VybmVsIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUsIGFzIGV4cGVjdGVkLgoKSSYjMzk7dmUgZ290IHRoZSBkaWZmIGluIGZyb250IG9mIG1lOiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoaXMgaXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBkdXJpbmcgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcywgd2hhdCBjb250ZXh0cyBpdCYjMzk7cyBjYWxsZWQgaW4sIGFuZCBpZiB0aGVzZSBhZGRlZCBjYWxscyBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIHRyaWdnZXJpbmcgYW55IG5ldywgZXhwbG9pdGFibGUgY29kZSBwYXRocy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzIOKAkyBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBuYXZpZ2F0ZSB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRcdHBjcF9saXN0ID0gXHUwMDI2cGNwLVx1MDAzZWxpc3RzW29yZGVyX3RvX3BpbmRleChhYy5taWdyYXRldHlwZSwgMCldO1xuNTI2MTpcdFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcdTAwM2MgbnJfcGFnZXMpIHtcbjUyNjI6XHRcbjUyNjM6XHRcdFx0LyogU2tpcCBleGlzdGluZyBwYWdlcyAqL1xuNTI2NDpcdFx0XHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XG41MjY1Olx0XHRcdFx0bnJfcG9wdWxhdGVkJiM0MzsmIzQzOztcbjUyNjY6XHRcdFx0XHRjb250aW51ZTtcbjUyNjc6XHRcdFx0fVxuNTI2ODpcdFxuNTI2OTpcdFx0XHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxuNTI3MDpcdFx0XHRcdFx0XHRcdFx0XHRwY3AsIHBjcF9saXN0KTtcbjUyNzE6XHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuNTI3MjpcdFx0XHRcdC8qIFRyeSBhbmQgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2UgKi9cbjUyNzM6XHRcdFx0XHRpZiAoIW5yX2FjY291bnQpIHtcbjUyNzQ6XHRcdFx0XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI3NTpcdFx0XHRcdFx0Z290byBmYWlsZWQ7XG41Mjc2Olx0XHRcdFx0fVxuNTI3NzpcdFx0XHRcdGJyZWFrO1xuNTI3ODpcdFx0XHR9XG41Mjc5Olx0XHRcdG5yX2FjY291bnQmIzQzOyYjNDM7O1xuNTI4MDpcdFxuNTI4MTpcdFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG41MjgyOlx0XHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG41MjgzOlx0XHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG41Mjg0Olx0XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG41Mjg1Olx0XHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuNTI4NjpcdFx0fVxuNTI4NzpcdFxuNTI4ODpcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjg5Olx0XG41MjkwOlx0XHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xuNTI5MTpcdFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcbjUyOTI6XHRcbjUyOTM6XHRvdXQ6XG41Mjk0Olx0XHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xuNTI5NTpcdFxuNTI5NjpcdGZhaWxlZDpcbjUyOTc6XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcbjUyOTg6XHRcdGlmIChwYWdlKVxuNTI5OTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUzMDA6XHRcdGdvdG8gb3V0O1xuNTMwMTpcdH1cbjUzMDI6XHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG41MzAzOlx0XG41MzA0Olx0LypcbjUzMDU6XHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcbjUzMDY6XHQgKiBAcGFnZV9hcnJheTogQXJyYXkgb2YgcGFnZXMgdG8gZnJlZVxuNTMwNzpcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcbjUzMDg6XHQgKlxuNTMwOTpcdCAqIEZyZWUgdGhlIG9yZGVyLTAgcGFnZXMuIEFkamFjZW50IGVudHJpZXMgd2hvc2UgUEZOcyBmb3JtIGEgY29udGlndW91c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIHJlY2VudCBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGB0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCAmYW1wOyB+X19HRlBfUkVDTEFJTSk7YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgY2FsbHMgcGFydCBvZiB0aGUgKmJ1bGsqIHBhZ2UgYWxsb2NhdGlvbiBwYXRoLCBpLmUuLCBpbnNpZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYD8gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gYmVjYXVzZSBidWxrIGFsbG9jYXRpb24gaGFzIGl0cyBvd24gc2V0IG9mIG9wdGltaXphdGlvbnMgYW5kIGNvbnN0cmFpbnRzLgoKVG8gY29uZmlybSAob3IgZGVueSkgdGhpcywgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEkmIzM5O2xsIGRpdmUgaW50byBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgcGxhbiBpcyB0byBzZWFyY2ggdGhlIHNvdXJjZSBmb3IgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdGlvbiBwYXRocy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIHdoZXJlIGBwcmVwX25ld19wYWdlYCBpcyBjYWxsZWQgYW5kIGhvdyBga21zYW5fYWxsb2NfcGFnZWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBhZGRpdGlvbnMgZml0IGludG8gdGhlIGJyb2FkZXIgcGFnZSBhbGxvY2F0aW9uIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbXNhbl9hbGxvY19wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jPTE2OT1FWFBPUlRfU1lNQk9MKGttc2FuX2NvcHlfcGFnZV9tZXRhKTtcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzIte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0Olx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xubW0vcGFnZV9hbGxvYy5jLTUyODUtXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcbm1tL3BhZ2VfYWxsb2MuYy01MzcyLSAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjU0NjI6XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBmZWVscyAqb2ZmKi4gSSBzZWUgaXQgaGFzIGBwcmVwX25ld19wYWdlYCwgYW5kIGl0JiMzOTtzIHNldHRpbmcgdGhlIHBhZ2UgYXMgcmVmY291bnRlZCwgd2hpY2ggaXMgZ29vZC4gQnV0IHdhaXTigKYgaXQmIzM5O3MgbWlzc2luZyB0aGUgdXN1YWwgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCB0aGUgS01TQU4gYWxsb2NhdGlvbiBjYWxsLiBUaGF0IG9taXNzaW9uIGlzLCBhdCBhIG1pbmltdW0sIHBlY3VsaWFyLCBhbmQgd29ydGggaW52ZXN0aWdhdGluZy4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBJIGhhdmUgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6ICpkb24mIzM5O3QqIGJsaW5kbHkgdHJ1c3QgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciByZWZhY3RvcmluZy4gUmVhY2hhYmlsaXR5IGlzIHRoZSB0b3AgcHJpb3JpdHkuCgpSaWdodCwgc28gdG8gbWFrZSB0aGUgY2FsbCwgSSBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIG5lZ2F0aXZlICphbmQqIHBvc2l0aXZlIGNyaXRlcmlhLiBJIHdpbGwgb25seSByZXR1cm4gZmFsc2UgaWYgYWxsIGNoYW5nZXMgZmFsbCBpbnRvIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhLCBvdGhlcndpc2UgSSBzaG91bGQgcmV0dXJuIHRydWUuCgpJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIGlzbiYjMzk7dOKApgoqICAgRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzCiogICBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzCiogICBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nCiogICBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzCgpBbmQgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFsc28gaW5jbHVkZXMgaGFyZHdhcmUgdGhhdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4KCkJ1dCBpZiBpdCBpbnZvbHZlcyBzb21ldGhpbmcgbGlrZSwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgQlBGLCB0aGUgc2NoZWR1bGVyLCBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcsIGl0JiMzOTtzIGEgZGVmaW5pdGUgZ28uCgpTbyBiYWNrIHRvIG15IG9yaWdpbmFsIHRob3VnaHQsIHdoYXQgaXMgYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwICZhbXA7IH5fX0dGUF9SRUNMQUlNKWAgKmFjdHVhbGx5KiBkb2luZz8gVGhhdCYjMzk7cyB0aGUgcmVhbCBjcnV4IGhlcmUuIExldCBtZSBkZWx2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byByZXZpZXcgYG1tL2ttc2FuL3NoYWRvdy5jYCBhbmQgYGluY2x1ZGUvbGludXgva21zYW4uaGAgdG8gc2VlIGV4YWN0bHkgd2hhdCB0aGlzIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBhZGRpbmcgdG8gdGhlIHBhZ2UgYWxsb2NhdGlvbi4gSWYgaXQmIzM5O3MgZG9pbmcgc29tZXRoaW5nIGNydWNpYWwsIHRoZW4gdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnV6emluZyB0YXJnZXQgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgbW0gc3Vic3lzdGVtLCBhbmQgdGhlcmVmb3JlIGlzIGEgcG9zaXRpdmUuIEJ1dCBpZiBpdCYjMzk7cyBwdXJlbHkgZGVjb3JhdGl2ZSwgdGhlbiBtYXliZSBub3QuIExldCYjMzk7cyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rbXNhbi9zaGFkb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XG4gMTcxOlx0dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxuIDE3MjpcdHtcbiAxNzM6XHRcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pIHx8ICFrbXNhbl9lbmFibGVkO1xuIDE3NDpcdFx0c3RydWN0IHBhZ2UgKnNoYWRvdywgKm9yaWdpbjtcbiAxNzU6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiAxNzY6XHRcdGludCBwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKCFwYWdlKVxuIDE3OTpcdFx0XHRyZXR1cm47XG4gMTgwOlx0XG4gMTgxOlx0XHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XG4gMTgyOlx0XHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAoaW5pdGlhbGl6ZWQpIHtcbiAxODU6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODY6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODc6XHRcdFx0cmV0dXJuO1xuIDE4ODpcdFx0fVxuIDE4OTpcdFxuIDE5MDpcdFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXG4gMTkxOlx0XHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxuIDE5MjpcdFx0XHRyZXR1cm47XG4gMTkzOlx0XG4gMTk0Olx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxOTU6XHRcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcbiAxOTY6XHRcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XG4gMTk3Olx0XHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XG4gMTk4Olx0XHQvKlxuIDE5OTpcdFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCYjMzk7cyBva1xuIDIwMDpcdFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxuIDIwMTpcdFx0ICovXG4gMjAyOlx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSYjNDM7JiM0MzspXG4gMjAzOlx0XHRcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XG4gMjA0Olx0fVxuIDIwNTpcdFxuIDIwNjpcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gMjA3Olx0e1xuIDIwODpcdFx0aWYgKCFrbXNhbl9lbmFibGVkIHx8IGttc2FuX2luX3J1bnRpbWUoKSlcbiAyMDk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiB3aXRoIEtNU0FOKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCwgc3BlY2lmaWNhbGx5IHRoaXMgYHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSlgIGNhbGwuIEl0JiMzOTtzIGEgdHJhY2Vwb2ludCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBnaXZlcyBtZSBhIHdpbmRvdyBpbnRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGVuLCBJIHNlZSBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pO2AuIEFoLCByaWdodCwgS01TQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBwYWdlIGFsbG9jYXRpb24uIEJ1dCB3YWl0IGEgc2Vjb25kLi4uSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBoYXBwZW5zIGlmIEtNU0FOIGlzICpkaXNhYmxlZCouICBJZiBgIUNPTkZJR19LTVNBTmAsIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW5zaWRlIHRoYXQgYGttc2FuX2FsbG9jX3BhZ2VgIGZ1bmN0aW9uPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmFsbGJhY2sgYmVoYXZpb3IuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgva21zYW4uaGAgdG8gc2VlIHdoYXQgdGhhdCBtYWNybyBldmFsdWF0ZXMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ttc2FuLmg9NTc9Ym9vbCBfX2luaXQgX19tdXN0X2NoZWNrIGttc2FuX21lbWJsb2NrX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYwLS8qKlxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjYxOiAqIGttc2FuX2FsbG9jX3BhZ2UoKSAtIE5vdGlmeSBLTVNBTiBhYm91dCBhbiBhbGxvY19wYWdlcygpIGNhbGwuXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTY4LSAqL1xuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNzAtXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzE4LVxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMyMC1cdFx0XHRcdCAgICBnZnBfdCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBNZXRhZGF0YSBJbml0aWFsaXphdGlvbiBpbiBQYWdlIEFsbG9jYXRpb246IFdvcnRoeSBvZiBGdXp6aW5nPyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBga21zYW5fYWxsb2NfcGFnZWAuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBpcyBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uIFdoZW4gS01TQU4gaXMgYWN0aXZlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBUaGUgcHJldmlvdXMgbGFjayBvZiBLTVNBTiBub3RpZmljYXRpb24gaW4gYnVsayBwYWdlIGFsbG9jYXRpb24gaXMgY29uY2VybmluZywgYXMgaXQgY291bGQgbGVhZCB0byBzdGFsZSBtZXRhZGF0YSBhbmQgbWlzc2VkIG9yIGZhbHNlIHBvc2l0aXZlIGJ1Z3MuCgpOb3csIGxvb2tpbmcgZGVlcGVyLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgbm90IGp1c3QgYSBzaW1wbGUgZnVuY3Rpb24gY2FsbC4gSXQgY2FsbHMgYGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFnc2AsIGFuZCB3cml0ZXMgdG8gc2hhZG93IGFuZCBvcmlnaW4gcGFnZXM7IHRoaXMgaXNuJiMzOTt0IGp1c3QgZGVjb3JhdGlvbiEgVGhlc2UgYWN0aW9ucyAqYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzKi4gTXkgY29uY2VybiB0aGVuIGlzLCAqaXMgdGhpcyBXb3J0aEZ1enppbmc9dHJ1ZSo/CgpMZXQmIzM5O3MgcmUtZXhhbWluZSB0aGUgY3JpdGVyaWEuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAod2hlbiB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWApIHNwZWNpZmljYWxseSBtZW50aW9ucyAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuLi4gb3IgdHJhY2Vwb2ludHMgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4mIzM0OyBJdCBmZWVscyB0aGF0IHRoaXMgaXMgbm90ICpwdXJlbHkqIGRlY29yYXRpdmUsIGFzIGl0IHRvdWNoZXMgdGhlIEtNU0FOIHN0YWNrIGRlcG90LCBhbmQgc2hhZG93IHBhZ2VzLgoKTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBga21zYW5fYWxsb2NfcGFnZWAgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgKmFsdGVycyBkYXRhIHN0cnVjdHVyZXMqIChzaGFkb3cgcGFnZXMsIG9yaWdpbnMsIHRoZSBLTVNBTiBzdGFjayBkZXBvdCkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2hlbiBLTVNBTiBpcyBlbmFibGVkLiAgRnVydGhlcm1vcmUsIGl0IGlzIG1vZGlmeWluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdoaWNoIGlzIGEga2V5IG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiBgbW0vYC4KClRoZXJlZm9yZSwgSSB0aGluayB0aGlzIHNob3VsZCBiZSBgV29ydGhGdXp6aW5nPXRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGNhbGxzIHRoZSBgYWxsb2NfcGFnZXNfYnVsa2AgZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTAtXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XHRcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXHRcdGlmICh1bmxpa2VseShhbGxvY2F0ZWQgPT0gbGFzdCkpIHtcbi0tXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXG4tLVxuZnMvZXJvZnMvenV0aWwuYy04OS1cdFx0XHRsYXN0ID0gajtcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XHRcdFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcbmZzL2Vyb2ZzL3p1dGlsLmMtOTEtXHRcdFx0aWYgKGxhc3QgPT0gailcbi0tXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcdG5yX2FsbG9jID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9wYWdlcywgcGFnZXMpO1xuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVx0aWYgKCFucl9hbGxvYylcbi0tXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmMtMTMzNy1cbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cdTAwM2VuY25fcGFnZXMpO1xuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xuLS1cbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvc3BsaWNlLmMtMzQxLVx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICYjNDM7IG5wYWdlcyk7XG5mcy9zcGxpY2UuYzozNDI6XHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcbmZzL3NwbGljZS5jLTM0My1cdGlmICghbnBhZ2VzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIENhbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgYXJlIHdlIHNlZWluZyBgYWxsb2NfcGFnZXNfYnVsaypgIHVzZWQgaW4gdGhlIGtlcm5lbD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQuIE15IGZpcnN0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSB0aGUgZHJpdmVyIGNvZGUsIHNpbmNlIHRoYXQmIzM5O3MgYSBjb21tb24gYXJlYSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byBhbnkgbmV0d29yay1yZWxhdGVkIGNvZGUuIE5ldHdvcmsgZHJpdmVycyBhcmUgb2Z0ZW4gaGVhdnkgY29uc3VtZXJzIG9mIG1lbW9yeSBhbmQgbWlnaHQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgYWxsb2NfcGFnZXNfYnVsaypgLiBGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChtbSkgY29yZSBpdHNlbGYg4oCTIGl0JiMzOTtzIHBvc3NpYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgbW0gc3Vic3lzdGVtLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCYjMzk7cyBjYWxsaW5nIGBhbGxvY19wYWdlc19idWxrKmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY4NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19wYWdlc19idWxrYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIHNlbWFudGljcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyBpdCBjb3JyZWN0bHkgZm9yIG15IGN1cnJlbnQgdGFzaywgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBkZWZpbml0aW9uLCBzbyBJJiMzOTttIG9wZW5pbmcgdXAgYGluY2x1ZGUvbGludXgvZ2ZwLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxhZ3MgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiwgdGhlIHBhcmFtZXRlcnMsIGFuZCBhbnkgcGVydGluZW50IGNvbW1lbnRzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIGNhdmVhdHMuIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBmbGFncyBiZWluZyB1c2VkIGlzIGN1cnJlbnQgYW5kIGNvcnJlY3QuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTItXHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNTojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2Olx0X19hbGxvY19wYWdlc19idWxrKF9nZnAsIG51bWFfbWVtX2lkKCksIE5VTEwsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjk6YWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnBfdCBnZnAsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cdFx0XHRcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1Olx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbmlkLCBOVUxMLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM4OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsa19ub2RlKC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjkwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZm9yIEZvY3VzU3ltYm9sIENvbnNpZGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHRoZSBidWxrIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbiBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBhIEZvY3VzU3ltYm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHdoZXRoZXIgaXQgZml0cyB0aGUgY3JpdGVyaWEgZm9yIGluY2x1c2lvbi4KClJpZ2h0LCB0aW1lIHRvIGNoZWNrIFNlY3Rpb24gNCBvZiB0aGUgZ3VpZGVsaW5lcy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzOiAmIzM0O0FWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUy4mIzM0OyBUaGV5IGV4cGxpY2l0bHkgbWVudGlvbiBhdm9pZGluZyB0aGluZ3MgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiBTbywgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdWJpcXVpdG91cyo/IElzIGl0IGxpa2UgYSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIG9yIGBrbWFsbG9jYD8KCk5vLCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBzby4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyAqc3BlY2lmaWMqIHRvIGJ1bGsgYWxsb2NhdGlvbi4gSXQmIzM5O3MgY2FsbGVkIGJ5IHBhcnRpY3VsYXIgc3Vic3lzdGVtcy4gSSByZW1lbWJlciBpdCBmcm9tIGBjb3B5X3NwbGljZV9yZWFkYCBpbiBzcGxpY2UsIGZ1c2UgcmVhZGRpciwgcGFnZV9wb29sLCBidHJmcywgc3ZjX2ZpbGxfcGFnZXMgYW5kIHRoZSBsaWtlLiBJdCBpbXBsZW1lbnRzICpzcGVjaWZpYyogbG9naWMgYW5kIHNlcnZlcyBhcyBhIHRhcmdldGVkIGVudHJ5cG9pbnQgZm9yIGNlcnRhaW4gZmVhdHVyZXMuIFNvLCBpdCYjMzk7cyAqbm90KiBhIGdlbmVyYWwgYWxsb2NhdG9yIHRoYXQgZXZlcnl0aGluZyB1c2VzLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLgoKT2theSwgSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIGRvIGEgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBib3RoIGBhbGxvY19wYWdlc19idWxrYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MTcyPXN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVx0ICpcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDYtXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA4LVx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3NlZ3MsIHBhZ2VzKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM6NDI6XHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXHRcdFx0XHRcdFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2NC1cdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyLCBBUl9CVUZGRVJTLCBwYWdlcyk7XG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYz02MjE9c3RhdGljIGludCBhbGxvY19wcml2YXRlX3BhZ2VzKHN0cnVjdCBobW1fYnVmZmVyX29iamVjdCAqYm8pXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyNzpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXHUwMDNlcGduciwgYm8tXHUwMDNlcGFnZXMpO1xuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXHQvKlxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjk6XHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cdCAqIHByZXNzdXJlLiBJZiBuZWNlc3NhcnkgZmFsbCBiYWNrIHRvIGFsbG9jX3BhZ2UoKS5cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlx0LyogVW5kbyBhbGxvY19wYWdlc19idWxrKCkgKi9cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVx0Zm9yICg7Oykge1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjUwNzpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA4LVx0XHRcdFx0XHQgICpwYWdlX2xpc3QgJiM0MzsgZG9uZSk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTYzPXN0YXRpYyBpbnQgdmlydGlvdmZfYWRkX21pZ3JhdGlvbl9wYWdlcyhzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXHRkbyB7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XHRcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCB0b19maWxsLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVx0XHRcdFx0XHQgIHBhZ2VfbGlzdCk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0Olx0LyogVW5kbyBhbGxvY19wYWdlc19idWxrKCkgKi9cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXHUwMDI2YnVmLVx1MDAzZXRhYmxlLnNndCwgXHUwMDI2c2dfaXRlciwgMClcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTAtXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XHRcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXHRcdGlmICh1bmxpa2VseShhbGxvY2F0ZWQgPT0gbGFzdCkpIHtcbi0tXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXG4tLVxuZnMvZXJvZnMvenV0aWwuYy04OS1cdFx0XHRsYXN0ID0gajtcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XHRcdFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcbmZzL2Vyb2ZzL3p1dGlsLmMtOTEtXHRcdFx0aWYgKGxhc3QgPT0gailcbi0tXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcdG5yX2FsbG9jID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9wYWdlcywgcGFnZXMpO1xuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVx0aWYgKCFucl9hbGxvYylcbi0tXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmMtMTMzNy1cbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cdTAwM2VuY25fcGFnZXMpO1xuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xuLS1cbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvc3BsaWNlLmMtMzQxLVx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICYjNDM7IG5wYWdlcyk7XG5mcy9zcGxpY2UuYzozNDI6XHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcbmZzL3NwbGljZS5jLTM0My1cdGlmICghbnBhZ2VzKSB7XG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMDc9c3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxMTp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMy1cdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXHRcdFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTUtXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxODp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMC1cdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNC0vKiBCdWxrIGFsbG9jYXRlIG9yZGVyLTAgcGFnZXMgKi9cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjY6XHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxuaW5jbHVkZS9saW51eC9nZnAuaD0yMjg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVx0XHRcdFx0ICAgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzU6XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5Olx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cbi0tXG5pb191cmluZy9tZW1tYXAuYz0xNzQ9c3RhdGljIGludCBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cbmlvX3VyaW5nL21lbW1hcC5jOjE5MzpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cdFx0XHRcdFx0ICAgICBtci1cdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MzItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlx0XHQvKiB6ZXJvaW5nIGlzIG5lZWRlZCwgc2luY2UgYWxsb2NfcGFnZXNfYnVsaygpIG9ubHkgZmlsbHMgaW4gbm9uLXplcm8gZW50cmllcyAqL1xua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cdFx0bWVtc2V0KHBhZ2VzLCAwLCB0aGlzX2JhdGNoICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTtcbi0tXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBtYXBfbnJfcGFnZXMsIHBhZ2VzKTtcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02Ni1cdFx0bGFzdCA9IGdvdDtcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjY3Olx0XHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjgtXG4tLVxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy03OTMtXG5tbS9hbGxvY190YWcuYzo3OTQ6XHRcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXG5tbS9hbGxvY190YWcuYy03OTUtXHRcdFx0XHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICYjNDM7IG5yKTtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDAte1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cdHdoaWxlIChucl9wYWdlcykge1xubW0va2FzYW4vc2hhZG93LmM6MzQ1Olx0XHRucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcF9tYXNrLCBucl9wYWdlcywgcGFnZXMpO1xubW0va2FzYW4vc2hhZG93LmMtMzQ2LVx0XHRpZiAoIW5yX3BvcHVsYXRlZCkge1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzY5LVx0XHRucl9wYWdlcyA9IG1pbihucl90b3RhbCwgUEFHRV9TSVpFIC8gc2l6ZW9mKGRhdGEucGFnZXNbMF0pKTtcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcdFx0cmV0ID0gX19fYWxsb2NfcGFnZXNfYnVsayhkYXRhLnBhZ2VzLCBucl9wYWdlcywgZ2ZwX21hc2spO1xubW0va2FzYW4vc2hhZG93LmMtMzcxLVx0XHRpZiAocmV0KVxuLS1cbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xubW0vbWVtcG9saWN5LmMtMjU5MC1cbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI1OTItXHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjA3LVx0XHRpZiAoZGVsdGEpIHtcbm1tL21lbXBvbGljeS5jOjI2MDg6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYwOS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MTMtXHRcdH0gZWxzZSB7XG5tbS9tZW1wb2xpY3kuYzoyNjE0Olx0XHRcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MTUtXHRcdFx0XHRcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYyNy1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NjQtXHRcdG5vZGVfcGFnZXMgPSBtaW4ocmVtX3BhZ2VzLCB3ZWlnaHQpO1xubW0vbWVtcG9saWN5LmM6MjY2NTpcdFx0bnJfYWxsb2NhdGVkID0gX19hbGxvY19wYWdlc19idWxrKGdmcCwgbm9kZSwgTlVMTCwgbm9kZV9wYWdlcyxcbm1tL21lbXBvbGljeS5jLTI2NjYtXHRcdFx0XHRcdFx0ICBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzAxLVx0Lypcbm1tL21lbXBvbGljeS5jOjI3MDI6XHQgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy5cbm1tL21lbXBvbGljeS5jLTI3MDMtXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuLS1cbm1tL21lbXBvbGljeS5jLTI3MjktXHRcdFx0YnJlYWs7XG5tbS9tZW1wb2xpY3kuYzoyNzMwOlx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjczMS1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3NDMtXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxubW0vbWVtcG9saWN5LmMtMjc0NS1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NTMtXG5tbS9tZW1wb2xpY3kuYzoyNzU0Olx0bnJfYWxsb2NhdGVkICA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG5pZCwgXHUwMDI2cG9sLVx1MDAzZW5vZGVzLFxubW0vbWVtcG9saWN5LmMtMjc1NS1cdFx0XHRcdFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3NTctXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9wYWdlcylcbm1tL21lbXBvbGljeS5jOjI3NTg6XHRcdG5yX2FsbG9jYXRlZCAmIzQzOz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcbm1tL21lbXBvbGljeS5jLTI3NTktXHRcdFx0XHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzY5LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxubW0vbWVtcG9saWN5LmMtMjc4MC1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXG5tbS9tZW1wb2xpY3kuYzoyNzgxOlx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxubW0vbWVtcG9saWN5LmMtMjc4Mi1cdFx0XHRcdFx0XHRcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc4NC1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXG5tbS9tZW1wb2xpY3kuYzoyNzg1Olx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxubW0vbWVtcG9saWN5LmMtMjc4Ni1cdFx0XHRcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg4LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXG5tbS9tZW1wb2xpY3kuYzoyNzg5Olx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzkwLVx0XHRcdFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3OTMtXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXHUwMDI2bmlkKTtcbm1tL21lbXBvbGljeS5jOjI3OTQ6XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxubW0vbWVtcG9saWN5LmMtMjc5NS1cdFx0XHRcdCAgICAgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxubW0vcGFnZV9hbGxvYy5jLTUxNDEtICogQGdmcDogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvblxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMwMS19XG5tbS9wYWdlX2FsbG9jLmM6NTMwMjpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cbi0tXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTc0NzAtICpcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cbi0tXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS92bWFsbG9jLmMtMzc0My1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXHUwMDI2XHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXG5tbS92bWFsbG9jLmM6Mzc0NDpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbi0tXG5tbS92bWFsbG9jLmMtMzc0Ny1cdFx0XHRlbHNlXG5tbS92bWFsbG9jLmM6Mzc0ODpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0Olx0LyogTWFyayBlbXB0eSBhbGxvYy5jYWNoZSBzbG90cyBcJiMzNDtlbXB0eVwmIzM0OyBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM1LVx0bWVtc2V0KFx1MDAyNnBvb2wtXHUwMDNlYWxsb2MuY2FjaGUsIDAsIHNpemVvZih2b2lkICopICogYnVsayk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XHRucl9wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIHBvb2wtXHUwMDNlcC5uaWQsIGJ1bGssXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXHRcdFx0XHRcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cdTAwM2VhbGxvYy5jYWNoZSk7XG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTItXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo2OTM6XHRcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjk0LVx0XHRpZiAocmV0IFx1MDAzZSBmaWxsZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGEgZ2VuZXJpYyBsaWZlY3ljbGUgZnVuY3Rpb24gb3IgYSBmZWF0dXJlIHN5bWJvbC4gTXkgZ3V0IHNheXMgaXTigJlzIHJlbGF0ZWQgdG8gYnVsayBtZW1vcnkgYWxsb2NhdGlvbiwgd2hpY2ggdHJpZ2dlcnMgYSBxdWljayByZXZpZXcgb2YgUnVsZSA0LiBSaWdodCwgYXZvaWQgbGlzdGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBmdW5jdGlvbnMgbGlrZSBnZW5lcmFsIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgYW5kIHN5bmMgcHJpbWl0aXZlcyBiZWNhdXNlIHRoYXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuCgpUaGUga2V5IGlzIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgaG90LXBhdGggY2FsbGVkIGluIG5lYXJseSBldmVyeSBwcm9ncmFtIGV4ZWN1dGlvbi4gVG8gZmlndXJlIHRoaXMgb3V0LCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbGVyczogYGNvcHlfc3BsaWNlX3JlYWRgLCBgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYCwgYW5kLCBvZiBjb3Vyc2UsIGl0c2VsZiBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBJcyBpdCBjYWxsZWQgb24gKmV2ZXJ5KiBzeXprYWxsZXIgcHJvZ3JhbSBleGVjdXRpb24/IE5vLCB0aGF04oCZcyBub3QgcmlnaHQuIFRoZSBnZW5lcmFsIGFsbG9jYXRpb24gcGF0aCBpcyBtb3JlIGxpa2VseSBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBga21hbGxvY2AsIG9yIGBrbWVtX2NhY2hlX2FsbG9jYC4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBzdWJzeXN0ZW1zOiB2bWFsbG9jLCBgc3BsaWNlYCwgYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2AsIGBidHJmc2AsIGBwYWdlX3Bvb2xgIGFtb25nIG90aGVycy4KCkFoYSEgTm93IEkgc2VlIGEgY29ubmVjdGlvbiB0byBga21zYW5fYWxsb2NfcGFnZWAuIFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIG5vdyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBzbyBpZiBLTVNBTiBpcyBlbmFibGVkLCBga21zYW5fYWxsb2NfcGFnZWAgKmlzKiB1YmlxdWl0b3VzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBjYWxsZWQgaW4gZXZlcnkgbm9ybWFsIHBhZ2UgYWxsb2NhdGlvbi4gQnV0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgc3RpbGwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBvbmx5IGRlZmluZWQgaWYgYENPTkZJR19LTVNBTmAgaXMgc2V0IChvdGhlcndpc2UsIGl0JiMzOTtzIGp1c3QgYSBzdGF0aWMgaW5saW5lKS4gQWxzbywgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGRlZmluZWQgd2hlbiB0cmFjZXBvaW50cyBhcmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBndWFyZGVkIGJ5IGFueSBzcGVjaWZpYyBjb25maWdzLiBOZWVkIHRvIGNoZWNrIGBtbS9wYWdlX2FsbG9jLmNgIGFyb3VuZCBsaW5lcyA1MTUwLTUzMTAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTUwOlx0ICogTm90ZSB0aGF0IG9ubHkgdGhlIGVsZW1lbnRzIGluIEBwYWdlX2FycmF5IHRoYXQgd2VyZSBjbGVhcmVkIHRvICVOVUxMIG9uXG41MTUxOlx0ICogZW50cnkgYXJlIHBvcHVsYXRlZCB3aXRoIG5ld2x5IGFsbG9jYXRlZCBwYWdlcy4gQG5yX3BhZ2VzIGlzIHRoZSBtYXhpbXVtXG41MTUyOlx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGFycmF5LlxuNTE1MzpcdCAqXG41MTU0Olx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIEBwYWdlX2FycmF5LCBpbmNsdWRpbmcgb25lcyBhbHJlYWR5XG41MTU1Olx0ICogYWxsb2NhdGVkIG9uIGVudHJ5LiAgVGhpcyBjYW4gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkIGluIEBucl9wYWdlcyxcbjUxNTY6XHQgKiBidXQgYWxsIGVtcHR5IHNsb3RzIGFyZSBmaWxsZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiAgSS5lLiwgaWYgYWxsIHNsb3RzIGluXG41MTU3Olx0ICogQHBhZ2VfYXJyYXkgd2VyZSBzZXQgdG8gJU5VTEwgb24gZW50cnksIHRoZSBzbG90cyBmcm9tIDAgdG8gdGhlIHJldHVybiB2YWx1ZVxuNTE1ODpcdCAqIC0gMSB3aWxsIGJlIGZpbGxlZC5cbjUxNTk6XHQgKi9cbjUxNjA6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG41MTYxOlx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbjUxNjI6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG41MTYzOlx0e1xuNTE2NDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41MTY1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjUxNjY6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNTE2NzpcdFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcbjUxNjg6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xuNTE2OTpcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XG41MTcwOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XG41MTcxOlx0XHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XG41MTcyOlx0XG41MTczOlx0XHQvKlxuNTE3NDpcdFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXG41MTc1Olx0XHQgKiB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIGRpc2FibGluZyBJUlFzLlxuNTE3NjpcdFx0ICovXG41MTc3Olx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgcGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKVxuNTE3ODpcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTE3OTpcdFxuNTE4MDpcdFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xuNTE4MTpcdFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gMCkpXG41MTgyOlx0XHRcdGdvdG8gb3V0O1xuNTE4MzpcdFxuNTE4NDpcdFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXG41MTg1Olx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXG41MTg2Olx0XHRcdGdvdG8gb3V0O1xuNTE4NzpcdFxuNTE4ODpcdFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xuNTE4OTpcdFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IChnZnAgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk0NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLTVNBTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBLTVNBTiBkaXJlY3RseSBuZWVkcyBgQ09ORklHX0tNU0FOYCwgbmF0dXJhbGx5LiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gdG8gdHJ1bHkgZXhlcmNpc2UgdGhlIGBrbXNhbl9hbGxvY19wYWdlYCBob29rIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLCB0aGUgYEtNU0FOYCBvcHRpb24gKmlzKiByZWxldmFudCwgZXZlbiB0aG91Z2ggYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBjb21waWxlcyByZWdhcmRsZXNzLiBTbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgbGlua2VkIHVwLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtNU0FOYC4gSSYjMzk7bGwgZGlnIHRocm91Z2ggYGxpYi9LY29uZmlnLmttc2FuYCBhbmQgYG1tL2thc2FuL0tjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLTVNBTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5rbXNhbj01PWNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4tLVxubGliL0tjb25maWcua21zYW4tNy1cbmxpYi9LY29uZmlnLmttc2FuOjg6Y29uZmlnIEtNU0FOXG5saWIvS2NvbmZpZy5rbXNhbi05LVx0Ym9vbCBcJiMzNDtLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW49MjY9aWYgS01TQU5cbmxpYi9LY29uZmlnLmttc2FuLTI3LVxubGliL0tjb25maWcua21zYW46Mjg6Y29uZmlnIEtNU0FOX0NIRUNLX1BBUkFNX1JFVFZBTFxubGliL0tjb25maWcua21zYW4tMjktXHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4tLVxubGliL0tjb25maWcua21zYW4tNDEtXG5saWIvS2NvbmZpZy5rbXNhbjo0Mjpjb25maWcgS01TQU5fS1VOSVRfVEVTVFxubGliL0tjb25maWcua21zYW4tNDMtXHR0cmlzdGF0ZSBcJiMzNDtLTVNBTiBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEtNU0FOIERlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIEtNU0FOLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IEtNU0FOJiMzOTtzIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgdG8gYGxpYi9LY29uZmlnLmttc2FuYC4gSSBzdXNwZWN0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY3J1Y2lhbCBgY29uZmlnYCBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIEtNU0FOIGFuZCBsaWtlbHkgaXRzIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmRpdGlvbmFscyB0aGVyZSB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBLTVNBTiBjb2RlIGFuZCBpbnN0cnVtZW50YXRpb24gYXJlIGNvbXBpbGVkLCBwb3RlbnRpYWxseSBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGV2ZW4gY29tcGlsZS10aW1lIGZsYWdzIHRoYXQgbWF5IGJlIHJlbGV2YW50IHRvIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBzdWNoIGFzIGAtZnNhbml0aXplPWttc2FuYC4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW50ZWdyYXRpb24sIHRyb3VibGVzaG9vdGluZywgYW5kIG9wdGltaXphdGlvbiBvZiB0aGUgS01TQU4gYnVpbGQgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjdXN0b20ga2VybmVsIGJ1aWxkcyBvciBzcGVjaWFsaXplZCBoYXJkd2FyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcyB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY2xlYW4gYW5kIGNvcnJlY3QgS01TQU4gYnVpbGQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYEtjb25maWdgIGhhcyB0byB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmttc2FuJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhBVkVfQVJDSF9LTVNBTlxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gICA2Olx0XHRkZWZfYm9vbCAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtlcm5lbC1tZW1vcnkpXG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIEtNU0FOXG4gICA5Olx0XHRib29sIFwmIzM0O0tNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tNU0FOIFx1MDAyNlx1MDAyNiBIQVZFX0tNU0FOX0NPTVBJTEVSXG4gIDExOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgIUtBU0FOIFx1MDAyNlx1MDAyNiAhS0NTQU5cbiAgMTI6XHRcdGRlcGVuZHMgb24gIVBSRUVNUFRfUlRcbiAgMTM6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gIDE0Olx0XHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBpcyBhIGR5bmFtaWMgZGV0ZWN0b3Igb2YgdXNlcyBvZlxuICAxNzpcdFx0ICB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiB0aGUga2VybmVsLiBJdCBpcyBiYXNlZCBvbiBjb21waWxlclxuICAxODpcdFx0ICBpbnN0cnVtZW50YXRpb24gcHJvdmlkZWQgYnkgQ2xhbmcgYW5kIHRodXMgcmVxdWlyZXMgQ2xhbmcgdG8gYnVpbGQuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEFuIGltcG9ydGFudCBub3RlIGlzIHRoYXQgS01TQU4gaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aW9uIHVzZSxcbiAgMjE6XHRcdCAgYmVjYXVzZSBpdCBkcmFzdGljYWxseSBpbmNyZWFzZXMga2VybmVsIG1lbW9yeSBmb290cHJpbnQgYW5kIHNsb3dzXG4gIDIyOlx0XHQgIHRoZSB3aG9sZSBzeXN0ZW0gZG93bi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva21zYW4ucnN0XHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gIDI1Olx0XG4gIDI2Olx0aWYgS01TQU5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXG4gIDI5Olx0XHRib29sIFwmIzM0O0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXCYjMzQ7XG4gIDMwOlx0XHRkZWZhdWx0IHlcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mc2FuaXRpemUtbWVtb3J5LXBhcmFtLXJldHZhbCwgS01TQU4gd2lsbFxuICAzMzpcdFx0ICBlYWdlcmx5IGNoZWNrIGV2ZXJ5IGZ1bmN0aW9uIHBhcmFtZXRlciBwYXNzZWQgYnkgdmFsdWUgYW5kIGV2ZXJ5XG4gIDM0Olx0XHQgIGZ1bmN0aW9uIHJldHVybiB2YWx1ZS5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDIKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggS01TQU4uIElzIEtNU0FOIHJlcXVpcmVkIGZvciBjb21waWxhdGlvbiBvciBqdXN0IGZvciBlbmFibGluZyB0aGUgc3BlY2lmaWMgdHJhY2luZy9pbml0aWFsaXphdGlvbiBsb2dpYz8gVGhlIGNvZGUgKmNvbXBpbGVzKiByZWdhcmRsZXNzLCBhcyBga21zYW5fYWxsb2NfcGFnZWAgaXMgYSBzdGF0aWMgaW5saW5lIHRoYXQgYmVjb21lcyBhbiBlbXB0eSBmdW5jdGlvbiB3aGVuIEtNU0FOIGlzIG9mZi4gQnV0IHRoZSB3aG9sZSAqcG9pbnQqIG9mIGFkZGluZyBga21zYW5fYWxsb2NfcGFnZWAgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBmb3IgS01TQU4gdG8gcHJvcGVybHkgdHJhY2sgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IuIFNvLCB5ZXMsIGBDT05GSUdfS01TQU5gIGlzICpkZWZpbml0ZWx5KiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuIFRoZSBgV29ydGhGdXp6aW5nYCBydWxlcyBzYXkgd2Ugc2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlLCBlc3BlY2lhbGx5IHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudC4gQW5kIGhlcmUsIHdlIGFyZSAqYWJzb2x1dGVseSogbW9kaWZ5aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYWRkaW5nIHBhZ2UgYWxsb2NhdGlvbiB0cmFjaW5nICphbmQqIEtNU0FOIHRyYWNraW5nLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZS4gU28sICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgaXMgZ29pbmcgdG8gYmUgdHJ1ZS4KCkZvciBgRW5hYmxlQ29uZmlnc2AsIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDogYEtNU0FOYC4gU2luY2UgYGttc2FuX2FsbG9jX3BhZ2VgIG9ubHkgZG9lcyBhbnl0aGluZyB3aGVuIEtNU0FOIGlzIGVuYWJsZWQsIHRoYXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4KCk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIHdlIHNob3VsZCBpbmNsdWRlIGBrbXNhbl9hbGxvY19wYWdlYCBpdHNlbGYsIGJ1dCB0aGF0JiMzOTtzIGNhbGxlZCAqZXZlcnl3aGVyZSogd2hlbiBLTVNBTiBpcyBlbmFibGVkLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB0b28gdWJpcXVpdG91cy4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBob3dldmVyLCBpcyB0aGUgdmVyeSBzcGVjaWZpYyBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlIHdhcyBpbnRyb2R1Y2VkLiBUaGUgY2hhbmdlIGFkZHMgdGhlIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxsIHNvIHRoYXQgaXMgdGhlIHByZWNpc2UgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuCgpCdXQgd2FpdCwgc2hvdWxkIHdlIGV4cGFuZCB0aGUgbGlzdCB0byBpbmNsdWRlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIGxpa2UgYGNvcHlfc3BsaWNlX3JlYWRgIG9yIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYD8gSSB0aGluayBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyB0aGUgcHJlY2lzZSB0YXJnZXQuIEl0IGlzIHRoZSBleGFjdCBub24taW5saW5lZCBzeW1ib2wgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbiBoYXBwZW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFzIHdlbGwgaW4gYG1tL21lbXBvbGljeS5jYCBhcyBhIHBvc3NpYmxlIHBvaW50IHRvIGV4YW1pbmUuCgpBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBpbmRlZWQgYW4gZXhwb3J0ZWQgbm9uLWlubGluZSBmdW5jdGlvbjogYHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwgLi4uKWAgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpYC4KCk9rYXksIHRpbWUgZm9yIGEgZmluYWwgcmV2aWV3LiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGB0cnVlYCBiZWNhdXNlIHRoZSBwYXRjaCBhZGRzIHRoZSBga21zYW5fYWxsb2NfcGFnZSgpYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yLiBUaGlzIGlzIGNyaXRpY2FsOiBJdCBtYWtlcyBzdXJlIHRoYXQgS01TQU4gcHJvcGVybHkgdHJhY2tzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBwYWdlcyBhbGxvY2F0ZWQgaW4gYnVsaywgcHJldmVudGluZyBpbmNvcnJlY3Qgc2FuaXRpemF0aW9uIHN0YXRlIGluIG90aGVyIHN1YnN5c3RlbXMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0IHdlIG5lZWQgdG8gZnV6eiB3aXRoIEtNU0FOIGVuYWJsZWQuCgpUaGUgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFsmIzM0O0tNU0FOJiMzNDtdYC4KClRoZSBgRm9jdXNTeW1ib2xzYCBpcyBqdXN0IGBbJiMzNDthbGxvY19wYWdlc19idWxrX25vcHJvZiYjMzQ7XWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBrbXNhbl9hbGxvY19wYWdlKCkgYW5kIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBjYWxscyB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYy4gVGhpcyBlbnN1cmVzIEtNU0FOIHByb3Blcmx5IGluaXRpYWxpemVzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcgd2l0aCBLTVNBTiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLTVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBrbXNhbl9hbGxvY19wYWdlKCkgYW5kIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBjYWxscyB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYy4gVGhpcyBlbnN1cmVzIEtNU0FOIHByb3Blcmx5IGluaXRpYWxpemVzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcgd2l0aCBLTVNBTiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3QuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmMmFmOTZkMTBmNmFhZGU0NjkxZGFhNzE3Njc2ZTliNzY4ZjZlODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjE4OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDEyZmFjOTA4NGM0ODMuLjczYzczNDk5YTA1MWIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUyODAsNiAmIzQzOzUyODAsOCBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAKIAkJcHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTsKJiM0MzsJCWttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwICZhbXA7IH5fX0dGUF9SRUNMQUlNKTsKIAkJcGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbi4gVGhlIGRpZmYgaGlnaGxpZ2h0cyB0aGUgYWRkaXRpb24gb2YgdHdvIGtleSBsaW5lczogYSBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgY2FsbCBhbmQgYSBga21zYW5fYWxsb2NfcGFnZWAgY2FsbC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNwZWNpZmljYWxseSB3aGF0IGBrbXNhbl9hbGxvY19wYWdlYCBpcyBkb2luZy4gSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgc2VlIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBpbXBhY3QgYmFzZWQgb24gdGhpcyBzbWFsbCBzbmlwcGV0LiBJdCYjMzk7cyB0aW1lIHRvIGxldmVyYWdlIG15IHRvb2xzLiBJJiMzOTtsbCByZWFjaCBmb3IgZWl0aGVyIGBncmVwcGVyYCBvciBwZXJoYXBzIGByZWFkLWZpbGVgLCBkZXBlbmRpbmcgb24gbXkgcHJlZmVycmVkIG1ldGhvZCwgdG8gaW52ZXN0aWdhdGUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGRlZmluaXRpb25zIG9mIGJvdGggYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBhc3Nlc3MgdGhlIHB1cnBvc2UgYW5kIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIHRoaXMgcGF0Y2ggd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBmdW5jdGlvbmluZyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBsaW5lcyA1MjUwIHRocm91Z2ggNTMwMC4gVGhhdCByYW5nZSBzaG91bGQgY29udGFpbiB0aGUgY29yZSBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGdpdmVuIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXJlLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBkZXNjcmlwdGl2ZSBlbm91Z2ggdG8gbWFrZSBpdCBhbiBlYXN5IHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCBhbmQgdGhlIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzIHRoYXQgb2NjdXIuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgbG9ja2luZyB0aGF0IGlzIHVzZWQgdG8gcHJvdGVjdCB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjUwOlx0XHQgKi9cbjUyNTE6XHRcdGlmICh1bmxpa2VseSghem9uZSkpXG41MjUyOlx0XHRcdGdvdG8gZmFpbGVkO1xuNTI1MzpcdFxuNTI1NDpcdFx0Lyogc3Bpbl90cnlsb2NrIG1heSBmYWlsIGR1ZSB0byBhIHBhcmFsbGVsIGRyYWluIG9yIElSUSByZWVudHJhbmN5LiAqL1xuNTI1NTpcdFx0cGNwID0gcGNwX3NwaW5fdHJ5bG9jayh6b25lLVx1MDAzZXBlcl9jcHVfcGFnZXNldCk7XG41MjU2Olx0XHRpZiAoIXBjcClcbjUyNTc6XHRcdFx0Z290byBmYWlsZWQ7XG41MjU4Olx0XG41MjU5Olx0XHQvKiBBdHRlbXB0IHRoZSBiYXRjaCBhbGxvY2F0aW9uICovXG41MjYwOlx0XHRwY3BfbGlzdCA9IFx1MDAyNnBjcC1cdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcbjUyNjE6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG41MjYyOlx0XG41MjYzOlx0XHRcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cbjUyNjQ6XHRcdFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xuNTI2NTpcdFx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MjY2Olx0XHRcdFx0Y29udGludWU7XG41MjY3Olx0XHRcdH1cbjUyNjg6XHRcbjUyNjk6XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcbjUyNzA6XHRcdFx0XHRcdFx0XHRcdFx0cGNwLCBwY3BfbGlzdCk7XG41MjcxOlx0XHRcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbjUyNzI6XHRcdFx0XHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXG41MjczOlx0XHRcdFx0aWYgKCFucl9hY2NvdW50KSB7XG41Mjc0Olx0XHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyNzU6XHRcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTI3NjpcdFx0XHRcdH1cbjUyNzc6XHRcdFx0XHRicmVhaztcbjUyNzg6XHRcdFx0fVxuNTI3OTpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODA6XHRcbjUyODE6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MjpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4MzpcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuNTI4NDpcdFx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuNTI4NTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODY6XHRcdH1cbjUyODc6XHRcbjUyODg6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4OTpcdFxuNTI5MDpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTE6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkyOlx0XG41MjkzOlx0b3V0OlxuNTI5NDpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTU6XHRcbjUyOTY6XHRmYWlsZWQ6XG41Mjk3Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk4Olx0XHRpZiAocGFnZSlcbjUyOTk6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41MzAwOlx0XHRnb3RvIG91dDtcbjUzMDE6XHR9XG41MzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMzpcdFxuNTMwNDpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBga21zYW5fYWxsb2NfcGFnZWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkgc2FuaXRpemF0aW9uLCBsaWtlbHkgS01TQU4uIEl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIGZpbmRpbmcgaXRzIGNhbGwgc2l0ZXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCBmb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBsb2NhdGlvbnMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgcGF0dGVybnMgYW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgc2VhcmNoIGVmZmljaWVudGx5LCBrbm93aW5nIHRoYXQgSSYjMzk7bGwgaGF2ZSB0byBpbnRlcnByZXQgdGhlIHJlc3VsdHMgYW5kIGZpbHRlciBvdXQgZmFsc2UgcG9zaXRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbXNhbl9hbGxvY19wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjAtLyoqXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cbmluY2x1ZGUvbGludXgva21zYW4uaC02Mi0gKiBAcGFnZTogIHN0cnVjdCBwYWdlIHBvaW50ZXIgcmV0dXJuZWQgYnkgYWxsb2NfcGFnZXMoKS5cbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6Njk6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKTtcbmluY2x1ZGUvbGludXgva21zYW4uaC03MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl90YXNrX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6MzE5OnN0YXRpYyBpbmxpbmUgdm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzIwLVx0XHRcdFx0ICAgIGdmcF90IGZsYWdzKVxuLS1cbm1tL2ttc2FuL3NoYWRvdy5jPTE2OT1FWFBPUlRfU1lNQk9MKGttc2FuX2NvcHlfcGFnZV9tZXRhKTtcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzIte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0Olx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xubW0vcGFnZV9hbGxvYy5jLTUyODUtXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcbm1tL3BhZ2VfYWxsb2MuYy01MzcyLSAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjU0NjI6XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gU2hhZG93aW5nIGFuZCBQYWdlIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGhvbmVzIGluIG9uIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGJlaW5nIGFkZGVkIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGlzc3VlIGlzIHNwZWNpZmljIHRvIHBhZ2VzIGNvbWluZyBmcm9tIHRoZSBwY3BsaXN0LCBvciBgX19ybXF1ZXVlX3BjcGxpc3RgLCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gUmlnaHQsIHRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBgYWxsb2NfcGFnZXNfYnVsa2AgcHVsbHMgcGFnZXMgZnJvbSB0aGUgcGNwbGlzdCwgd2Ugd2VyZSBieXBhc3NpbmcgS01TQU4mIzM5O3MgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gc3RlcHMuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGBrbXNhbl9hbGxvY19wYWdlYCB3YXNuJiMzOTt0IGJlaW5nIGNhbGxlZCBmb3IgdGhvc2UgcGNwbGlzdC1zb3VyY2VkIHBhZ2VzLiBUaGlzIG1lYW5zIEtNU0FOIHdhc24mIzM5O3QgaW5pdGlhbGl6aW5nIHRoZSBzaGFkb3cgbWVtb3J5IG9yIG9yaWdpbiBtZXRhZGF0YSBmb3IgdGhlc2UgcGFnZXMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlIGRldGFpbHMgb2Ygd2hldGhlciBLTVNBTiBjb3JyZWN0bHkgbWFya3MgdGhvc2UgcGFnZXMgYXMgaW5pdGlhbGl6ZWQgb3Igbm90IGRlcGVuZGluZyBvbiBgX19HRlBfWkVST2AuIFNvLCB3aXRob3V0IGNhbGxpbmcgYGttc2FuX2FsbG9jX3BhZ2VgLCBLTVNBTiB3b3VsZG4mIzM5O3Qga25vdyBhYm91dCB0aGVzZSBwYWdlcywgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zLiBUaW1lIHRvIGRpdmUgaW50byBgbW0va21zYW4vc2hhZG93LmNgIGFuZCBjb25maXJtIGV4YWN0bHkgaG93IEtNU0FOIGhhbmRsZXMgdGhlIHNoYWRvdyBtZW1vcnkgYW5kIG9yaWdpbiB0cmFja2luZyB3aXRoaW4gYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBpdHMgcmVsYXRpb24gdG8gYWxsb2NhdGlvbiBmbGFncy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlbmRlZCB0byBkZWFsIHdpdGggdGhlIHplcm9pbmcsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rbXNhbi9zaGFkb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XG4gMTcxOlx0dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxuIDE3MjpcdHtcbiAxNzM6XHRcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk8pIHx8ICFrbXNhbl9lbmFibGVkO1xuIDE3NDpcdFx0c3RydWN0IHBhZ2UgKnNoYWRvdywgKm9yaWdpbjtcbiAxNzU6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiAxNzY6XHRcdGludCBwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKCFwYWdlKVxuIDE3OTpcdFx0XHRyZXR1cm47XG4gMTgwOlx0XG4gMTgxOlx0XHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XG4gMTgyOlx0XHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XG4gMTgzOlx0XG4gMTg0Olx0XHRpZiAoaW5pdGlhbGl6ZWQpIHtcbiAxODU6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODY6XHRcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxODc6XHRcdFx0cmV0dXJuO1xuIDE4ODpcdFx0fVxuIDE4OTpcdFxuIDE5MDpcdFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXG4gMTkxOlx0XHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxuIDE5MjpcdFx0XHRyZXR1cm47XG4gMTkzOlx0XG4gMTk0Olx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcbiAxOTU6XHRcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcbiAxOTY6XHRcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XG4gMTk3Olx0XHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XG4gMTk4Olx0XHQvKlxuIDE5OTpcdFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCYjMzk7cyBva1xuIDIwMDpcdFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxuIDIwMTpcdFx0ICovXG4gMjAyOlx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSYjNDM7JiM0MzspXG4gMjAzOlx0XHRcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XG4gMjA0Olx0fVxuIDIwNTpcdFxuIDIwNjpcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gMjA3Olx0e1xuIDIwODpcdFx0aWYgKCFrbXNhbl9lbmFibGVkIHx8IGttc2FuX2luX3J1bnRpbWUoKSlcbiAyMDk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS01TQU4gTmVlZCBmb3IgYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGluaXRpYWxseSwgbXkgZmlyc3QgdGhvdWdodCB3YXMgJiMzNDtXb3csIHRoaXMgc2VlbXMgc2lnbmlmaWNhbnQhJiMzNDsuIEl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGludGVncmF0aW5nIEtNU0FOIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc3BlY2lmaWNhbGx5IHdoZW4gYF9fR0ZQX1pFUk9gIGlzbiYjMzk7dCBzZXQuIFByZXZpb3VzbHksIHdlIHdlcmVuJiMzOTt0IGluaXRpYWxpemluZyB0aGUgc2hhZG93IG1lbW9yeSBmb3IgdGhvc2UgcGFnZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTm93LCB3aXRoIGBrbXNhbl9hbGxvY19wYWdlYCwgd2UmIzM5O3JlIHRyYWNraW5nIHRoZXNlIGJ1bGsgYWxsb2NhdGlvbnMgcHJvcGVybHksIG1hcmtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aCBgMHhmZmAgYW5kIGNhcHR1cmluZyB0aGUgb3JpZ2luIHN0YWNrIHRyYWNlLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIHdhcyB0byBjb25zaWRlciBpZiBpdCBleHBvc2VzIGFueSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0IEkgcXVpY2tseSByZWFsaXplZCwgbm8sIHdhaXQsIGl0JiMzOTtzICplbmFibGluZyogS01TQU4gdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGluIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBjb3VsZCBiZSBpbiBhbGwgc29ydHMgb2YgcGxhY2VzIC0gbmV0d29yayBkcml2ZXJzLCBwYWdlIHBvb2xzLCBmaWxlc3lzdGVtcywgYW5kIHNvIG9uLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGd1aWRlbGluZXMgZm9yIHRoaXMgcHJvbXB0LCBiZWNhdXNlIHRoaXMgaXMgYWJvdXQgZGVjaWRpbmcgaWYgd2UgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBrZXkgZGlzdGluY3Rpb24gaXMgdGhhdCBLQVNBTiBhbHJlYWR5IGNhdGNoZXMgYSB0b24gb2YgYnVncywgaW5jbHVkaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBldGMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICphbmQqIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgZ3VpZGVsaW5lIGlzIGNsZWFyOiBpZiBLQVNBTiAob3Igc29tZXRoaW5nIGVsc2UpIGNhbiBjYXRjaCB0aGUgaXNzdWUsIHdlICpkb24mIzM5O3QqIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBiZWNhdXNlIGl0JiMzOTtzIGV4cGVuc2l2ZS4KClNvLCBpcyB0aGUgKnBhdGNoIGl0c2VsZiogaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgb3IgaXMgaXQgKm1vZGlmeWluZyBjb2RlKiB0aGF0IGV4cG9zZXMgZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/CgpUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGRvaW5nIHRoZSBsYXR0ZXIsIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYWxsb2NhdGlvbiBjb2RlIHRvICplbmFibGUqIEtNU0FOIHRyYWNraW5nLCBub3QgKmludHJvZHVjaW5nKiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYWN0dWFsIHJpc2sgaXMgaW4gdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4KCkxldCYjMzk7cyBkbyBhIGxpdHRsZSBtb3JlIGRpZ2dpbmcgaW50byB0aGUgZ2l0IGhpc3RvcnkgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21zYW5fYWxsb2NfcGFnZVxcKHBhZ2UsIDAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgzLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODQ6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS01TQU4gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoaXMgcGF0Y2ggaW4gcmVsYXRpb24gdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBLTVNBTi4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlKClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBNeSBmaXJzdCBjb25jZXJuIGlzIGFsd2F5cyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdhaXQsIGlzIEtNU0FOIHRoZSBzYW5pdGl6ZXIgaXRzZWxmPwoKT2theSwgc28gYnkgaW5jbHVkaW5nIGBrbXNhbl9hbGxvY19wYWdlKClgIHdpdGhpbiB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciwgaXQgd2lsbCBub3cgZmxhZyBwYWdlcyBhcyB1bmluaXRpYWxpemVkIChvciBpbml0aWFsaXplZCwgaWYgdXNpbmcgYF9fR0ZQX1pFUk9gKS4gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcmV2ZWFsIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgaW4gY29kZSB0aGF0IHVzZXMgYGFsbG9jX3BhZ2VzX2J1bGtgPwoKQmVmb3JlIHRoaXMgcGF0Y2gsIEtNU0FOIHdvdWxkbiYjMzk7dCBkZXRlY3QgdW5pbml0aWFsaXplZCByZWFkcyBvbiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGJ1bGsgYWxsb2NhdG9yIGJlY2F1c2UgdGhlICYjMzQ7c2hhZG93JiMzNDsgbWVtb3J5IHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IG1hcmtlZC4gTm93LCBpdCB3aWxsISBCdXQgaXMgdGhlICpwYXRjaCBpdHNlbGYqIGludHJvZHVjaW5nIGFueSBuZXcgcmlza3MsIG9yIGlzIGl0IHNpbXBseSBleHBvc2luZyBwcmUtZXhpc3Rpbmcgb25lcz8KClRoZSB3b3JkaW5nIGVtcGhhc2l6ZXMgc2V0dGluZyBgTmVlZHNLTVNBTj10cnVlYCBvbmx5IGlmIHRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAuIFRoZSBjcml0ZXJpYSBpbmNsdWRlOiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgY2FuIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLgoKQ29udmVyc2VseSwgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGNvbmNlcm4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBpc3N1ZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGFuZCBvdGhlciB0b29scyBhbHJlYWR5IGhhbmRsZSkuIFRoZSBvdGhlciBjb25kaXRpb25zIGZvciBgTmVlZHNLTVNBTj1mYWxzZWAgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3Igbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS9pbmZvcm1hdGlvbiBsZWFrcy4KCk5vdywgbGV0JiMzOTtzIGV2YWx1YXRlIHRoaXMgc3BlY2lmaWMgcGF0Y2g6IElzIGl0IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8gbGVha3M/IEl0JiMzOTtzIGFkZGluZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaW5zaWRlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYC4KCiogICBJcyBpdCBzZW5kaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/IE5vLgoqICAgRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLgoqICAgSXMgaXQgYWxsb2NhdGluZyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzPyBOby4KKiAgIEFyZSB0aGVyZSBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBOby4KClNvLCB3aGF0IGlzIHRoZSBwYXRjaCBhY3R1YWxseSBkb2luZz8gSXQmIzM5O3MgYWRkaW5nIGEgdHJhY2Vwb2ludCBhbmQgYSBLTVNBTiBob29rIHRvIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBEb2VzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaXRzZWxmIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gTm8sIGJlY2F1c2UgaXQmIzM5O3Mgc2ltcGx5IGhvb2tpbmcgaW50byB0aGUgS01TQU4gcnVudGltZSBhbmQgdHJhY2luZy4KClRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIHBhdGNoICppdHNlbGYqIHdhcnJhbnQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IElmIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBLTVNBTiB3aWxsIG5vdyBkZXRlY3QgYnVncyBpbiBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zIHVzaW5nIGBhbGxvY19wYWdlc19idWxrYC4uLiBidXQgdGhlICpjdXJyZW50KiBldmFsdWF0aW9uIGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGUgKnBhdGNoIHVuZGVyIHJldmlldyogY3JlYXRlcyBuZXcgcmlza3MuIFdoeSBpcyB0aGlzIHBhdGNoIGJlaW5nIHN1Ym1pdHRlZCB0byBzeXotY2x1c3Rlcj8gSXQmIzM5O3MgbW9zdCBsaWtlbHkgYmVjYXVzZSBpdCYjMzk7cyBhIGtlcm5lbCBwYXRjaCB1bmRlciByZXZpZXcgKG9yIHN5emJvdCBpcyB0ZXN0aW5nIGl0KS4KCklmIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBhIG1lbW9yeSBzdWJzeXN0ZW0gcGF0Y2ggdGhhdCBob29rcyBga21zYW5fYWxsb2NfcGFnZSgpYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAsIGRvZXMgaXQgaW50cm9kdWNlICpuZXcqIHJpc2tzPyBObyEgVmFyaWFibGVzIHVzZWQgYXMgaW5wdXQgYHBhZ2VgLCBgMGAsIGBnZnBgLCBhbmQgYGFjLm1pZ3JhdGV0eXBlYCBhcmUgYWxsIGluaXRpYWxpemVkIGVpdGhlciBhcyBsb2NhbCB2YXJpYWJsZXMgb3IgYXJlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIFRoZSBsb2NhbCB2YXJpYWJsZSBgYWNgIGlzIGRlY2xhcmVkIGFzIGFuIGBhbGxvY19jb250ZXh0IGFjID0geyB9O2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNjA6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG41MTYxOlx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbjUxNjI6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG41MTYzOlx0e1xuNTE2NDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41MTY1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjUxNjY6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNTE2NzpcdFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcbjUxNjg6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xuNTE2OTpcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XG41MTcwOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XG41MTcxOlx0XHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XG41MTcyOlx0XG41MTczOlx0XHQvKlxuNTE3NDpcdFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXG41MTc1Olx0XHQgKiB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIGRpc2FibGluZyBJUlFzLlxuNTE3NjpcdFx0ICovXG41MTc3Olx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgcGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKVxuNTE3ODpcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTE3OTpcdFxuNTE4MDpcdFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xuNTE4MTpcdFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gMCkpXG41MTgyOlx0XHRcdGdvdG8gb3V0O1xuNTE4MzpcdFxuNTE4NDpcdFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXG41MTg1Olx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXG41MTg2Olx0XHRcdGdvdG8gb3V0O1xuNTE4NzpcdFxuNTE4ODpcdFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xuNTE4OTpcdFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IChnZnAgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxuNTE5MDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTE6XHRcbjUxOTI6XHRcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cbjUxOTM6XHRcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxuNTE5NDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTU6XHRcbjUxOTY6XHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbjUxOTc6XHRcdC8qXG41MTk4Olx0XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xuNTE5OTpcdFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xuNTIwMDpcdFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xuNTIwMTpcdFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQmIzM5O2xsIGhhdmVcbjUyMDI6XHRcdCAqIHNpbWlsYXIgcGVyZm9ybWFuY2UgdG8gYWRkZWQgY29tcGxleGl0eSB0byB0aGUgYnVsayBhbGxvY2F0b3IuXG41MjAzOlx0XHQgKi9cbjUyMDQ6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbjUyMDU6XHRcdFx0Z290byBmYWlsZWQ7XG41MjA2Olx0I2VuZGlmXG41MjA3Olx0XG41MjA4Olx0XHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuNTIwOTpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFN1YnNldCoqCgpSaWdodCwgdGltZSB0byBkaXZlIGluIGEgYml0IGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGF0YSBhcm91bmQgbGluZXMgNTIxMCB0byA1MjUwLiBNeSBpbml0aWFsIHNjYW4gZGlkbiYjMzk7dCByZXZlYWwgYW55dGhpbmcgb2J2aW91c2x5IGFtaXNzLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aG9zZSBzdWJ0bGUgYW5vbWFsaWVzIG9mdGVuIGhpZGUgaW4gdGhlIGltbWVkaWF0ZSB2aWNpbml0eSBvZiBzb21ldGhpbmcgbW9yZSBzaWduaWZpY2FudC4gSXQmIzM5O3MgYSBmb2N1c2VkIGV4YW1pbmF0aW9uOyBwZXJoYXBzIHRoZXJlJiMzOTtzIGEgY2x1c3RlcmluZyBlZmZlY3QsIGEgc3BlY2lmaWMgcGF0dGVybiBpbiB0aG9zZSBsaW5lcyB0aGF0IG5lZWRzIHVucGFja2luZy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGluY29uc2lzdGVuY2llcyBpbiB0aGUgY3VycmVudCBtb2RlbCByZXN1bHRzIHdoZW4gY29tcGFyZWQgd2l0aCB0aGUgZXhwZWN0ZWQgb3V0Y29tZXMsIG9yIHBlcmhhcHMgY29ycmVsYXRpb25zIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBhcHBhcmVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoaXMgcGFydGljdWxhciBzZWN0aW9uIG9mIHRoZSBkYXRhc2V0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTIxMDpcdFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbjUyMTE6XHRcdFx0Z290byBvdXQ7XG41MjEyOlx0XG41MjEzOlx0XHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xuNTIxNDpcdFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xuNTIxNTpcdFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XG41MjE2Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWFyaztcbjUyMTc6XHRcbjUyMTg6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG41MjE5Olx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkpIHtcbjUyMjA6XHRcdFx0XHRjb250aW51ZTtcbjUyMjE6XHRcdFx0fVxuNTIyMjpcdFxuNTIyMzpcdFx0XHRpZiAobnJfb25saW5lX25vZGVzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiB6b25lICE9IHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpIFx1MDAyNlx1MDAyNlxuNTIyNDpcdFx0XHQgICAgem9uZV90b19uaWQoem9uZSkgIT0gem9uZWxpc3Rfbm9kZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpKSB7XG41MjI1Olx0XHRcdFx0Z290byBmYWlsZWQ7XG41MjI2Olx0XHRcdH1cbjUyMjc6XHRcbjUyMjg6XHRcdFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKTtcbjUyMjk6XHRyZXRyeV90aGlzX3pvbmU6XG41MjMwOlx0XHRcdG1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgJiM0MzsgbnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQ7XG41MjMxOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxuNTIzMjpcdFx0XHRcdFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxuNTIzMzpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcbjUyMzQ6XHRcdFx0XHRicmVhaztcbjUyMzU6XHRcdFx0fVxuNTIzNjpcdFxuNTIzNzpcdFx0XHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcbjUyMzg6XHRcdFx0XHRnb3RvIHJldHJ5X3RoaXNfem9uZTtcbjUyMzk6XHRcbjUyNDA6XHRcdFx0LyogVHJ5IGFnYWluIGlmIHpvbmUgaGFzIGRlZmVycmVkIHBhZ2VzICovXG41MjQxOlx0XHRcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcbjUyNDI6XHRcdFx0XHRpZiAoX2RlZmVycmVkX2dyb3dfem9uZSh6b25lLCAwKSlcbjUyNDM6XHRcdFx0XHRcdGdvdG8gcmV0cnlfdGhpc196b25lO1xuNTI0NDpcdFx0XHR9XG41MjQ1Olx0XHR9XG41MjQ2Olx0XG41MjQ3Olx0XHQvKlxuNTI0ODpcdFx0ICogSWYgdGhlcmUgYXJlIG5vIGFsbG93ZWQgbG9jYWwgem9uZXMgdGhhdCBtZWV0cyB0aGUgd2F0ZXJtYXJrcyB0aGVuXG41MjQ5Olx0XHQgKiB0cnkgdG8gYWxsb2NhdGUgYSBzaW5nbGUgcGFnZSBhbmQgcmVjbGFpbSBpZiBuZWNlc3NhcnkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTE5CgkJCQkJCQlvdXRwdXQ6IDE2NgoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYWdlIEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBzb21lIHRyYWNpbmcgYW5kIGEgS01TQU4gaG9vayBjYWxsIHdpdGhpbiB0aGUgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBjYWxscyBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIHBhZ2VzIGFyZSBiZWluZyBwdWxsZWQgZnJvbSB0aGUgcGVyLWNwdSBsaXN0LCBgcGNwX2xpc3RgLiBUaGUgZnVuY3Rpb24gaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KCk15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBzbyBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBEb2VzIHRoaXMgcGF0Y2ggcG90ZW50aWFsbHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcz8gTm8sIGl0JiMzOTtzIG5vdCBhY3R1YWxseSAqYWxsb2NhdGluZyogbmV3IHN0cnVjdHVyZXMuIEl0JiMzOTtzIGhvb2tpbmcgaW50byB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbiBwcm9jZXNzLiBEb2VzIGl0IHBhc3MgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2U/IE5vcGUsIHRoaXMgc2VlbXMgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gRG9lcyBpdCBjcmVhdGUgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBhY2NvcmRpbmcgdG8gbXkgcXVpY2sgYXNzZXNzbWVudC4gQW5kIGlzIGl0IG1vZGlmeWluZyBjb21wbGV4IHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBtZXNzaW5nIHdpdGggYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0ICpjb3VsZCogY3JlYXRlIGEgcmlzaz8gTm8sIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgdG91Y2hpbmcgdGhvc2UgYXNwZWN0cyBhdCBhbGwuCgpCYXNlZCBvbiB0aGlzIHF1aWNrIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSB1c3VhbCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiwgb3Igc3RhbmRhcmQgdGVzdGluZywgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4gVGhlcmUgYXJlIG5vIG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHNpbXBseSBpbnN0cnVtZW50YXRpb24uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBjb25zdHJ1Y3QgdGhlIGBLTVNBTlJlYXNvbmluZ2AgYmxvY2ssIHRvIHByb3ZpZGUgYSBjb25jaXNlIGFuZCBhY2N1cmF0ZSBleHBsYW5hdGlvbjoKCiogICAqKkRlc2NyaXB0aW9uOioqIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIGFkZGluZyB0aGUgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgdHJhY2Vwb2ludCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayB0byB0aGUgYnVsayBwYWdlIGFsbG9jYXRvciBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIHB1bGxpbmcgcGFnZXMgZnJvbSB0aGUgcGVyLWNwdSBwYWdlIGxpc3QgKGBwY3BfbGlzdGApLgoqICAgKipDb250cmFzdCBLQVNBTiB2cy4gS01TQU46KiogVGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vciBkb2VzIGl0IGFsbG93IGZvciB0aGUgcGFzc2luZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYW5kIHRoZXJlIGFyZSBubyBidWZmZXIgYm91bmRzIGFsdGVyYXRpb25zLiBUaGUgcGF0Y2ggKmFkZHMqIGEgS01TQU4gdHJhY2tpbmcgaG9vayBhbmQgYSB0cmFjZXBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuCiogICAqKkNvbmNsdXNpb246KiogVGhlcmUgYXJlIG5vIG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4gSGVuY2UsIGBOZWVkc0tNU0FOOiBmYWxzZWAuCgpUaGF0JiMzOTtzIG15IGNvbXBsZXRlIGFzc2Vzc21lbnQuIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3QuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LlxuXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgYm91bmRzL2xlbmd0aHMuIEFsbCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBuZXcgY2FsbHMgKGBwYWdlYCwgYDBgLCBgZ2ZwYCwgYGFjLm1pZ3JhdGV0eXBlYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVhayB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjM0LjM0MDU4MTQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg4NjAzMDg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAgYW5kIGBrbXNhbl9hbGxvY19wYWdlKClgIGhvb2sgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBQQ1AgbGlzdC5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgYm91bmRzL2xlbmd0aHMuIEFsbCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBuZXcgY2FsbHMgKGBwYWdlYCwgYDBgLCBgZ2ZwYCwgYGFjLm1pZ3JhdGV0eXBlYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVhayB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjM0LjM0MDU4NTc0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMTg5MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWYyYWY5NmQxMGY2YWFkZTQ2OTFkYWE3MTc2NzZlOWI3NjhmNmU4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjE4OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjczYzczNDk5YTA1MWIgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTUyODAsNiArNTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4gXFxuIFxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG4rXFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTg6MzQuODE0MzkzNzUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MTk1MDA2MDc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWYyYWY5NmQxMGY2YWFkZTQ2OTFkYWE3MTc2NzZlOWI3NjhmNmU4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MTg6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjczYzczNDk5YTA1MWIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyODAsNiArNTI4MCw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuK1x0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuIFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODozNC44MTQzOTQ5NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDYzNTgwNzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZy4gU3RhbmRhcmQgdHJpYWdlIHN0dWZmLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhpcyBpcyBiZW5pZ24uIEl0J3MgYWJvdXQgbm9ybWFsIGRldmVsb3BlciBRQSwganVzdCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGlzIHBsYXlpbmcgbmljZWx5IHdpdGggdGhlIGtlcm5lbCBmdXp6aW5nIGluZnJhc3RydWN0dXJlLCBhcyBleHBlY3RlZC5cblxuSSd2ZSBnb3QgdGhlIGRpZmYgaW4gZnJvbnQgb2YgbWU6IEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBUaGlzIGlzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBkdXJpbmcgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbiBhY3R1YWxseSBkb2VzLCB3aGF0IGNvbnRleHRzIGl0J3MgY2FsbGVkIGluLCBhbmQgaWYgdGhlc2UgYWRkZWQgY2FsbHMgaGF2ZSB0aGUgcG90ZW50aWFsIGZvciB0cmlnZ2VyaW5nIGFueSBuZXcsIGV4cGxvaXRhYmxlIGNvZGUgcGF0aHMuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzIOKAkyBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBuYXZpZ2F0ZSB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjQ5LjQ1MDIwNDUxN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI2MDpcXHRcXHRwY3BfbGlzdCA9IFxcdTAwMjZwY3AtXFx1MDAzZWxpc3RzW29yZGVyX3RvX3BpbmRleChhYy5taWdyYXRldHlwZSwgMCldO1xcbjUyNjE6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKSB7XFxuNTI2MjpcXHRcXG41MjYzOlxcdFxcdFxcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cXG41MjY0OlxcdFxcdFxcdGlmIChwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pIHtcXG41MjY1OlxcdFxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUyNjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTI2NzpcXHRcXHRcXHR9XFxuNTI2ODpcXHRcXG41MjY5OlxcdFxcdFxcdHBhZ2UgPSBfX3JtcXVldWVfcGNwbGlzdCh6b25lLCAwLCBhYy5taWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsXFxuNTI3MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwY3AsIHBjcF9saXN0KTtcXG41MjcxOlxcdFxcdFxcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG41MjcyOlxcdFxcdFxcdFxcdC8qIFRyeSBhbmQgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2UgKi9cXG41MjczOlxcdFxcdFxcdFxcdGlmICghbnJfYWNjb3VudCkge1xcbjUyNzQ6XFx0XFx0XFx0XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuNTI3NTpcXHRcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41Mjc2OlxcdFxcdFxcdFxcdH1cXG41Mjc3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyNzg6XFx0XFx0XFx0fVxcbjUyNzk6XFx0XFx0XFx0bnJfYWNjb3VudCsrO1xcbjUyODA6XFx0XFxuNTI4MTpcXHRcXHRcXHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XFxuNTI4MjpcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbjUyODM6XFx0XFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG41Mjg0OlxcdFxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbjUyODU6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUyODY6XFx0XFx0fVxcbjUyODc6XFx0XFxuNTI4ODpcXHRcXHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcXG41Mjg5OlxcdFxcbjUyOTA6XFx0XFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcXG41MjkxOlxcdFxcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XFxuNTI5MjpcXHRcXG41MjkzOlxcdG91dDpcXG41Mjk0OlxcdFxcdHJldHVybiBucl9wb3B1bGF0ZWQ7XFxuNTI5NTpcXHRcXG41Mjk2OlxcdGZhaWxlZDpcXG41Mjk3OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG41Mjk4OlxcdFxcdGlmIChwYWdlKVxcbjUyOTk6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUzMDA6XFx0XFx0Z290byBvdXQ7XFxuNTMwMTpcXHR9XFxuNTMwMjpcXHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxuNTMwMzpcXHRcXG41MzA0OlxcdC8qXFxuNTMwNTpcXHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcXG41MzA2OlxcdCAqIEBwYWdlX2FycmF5OiBBcnJheSBvZiBwYWdlcyB0byBmcmVlXFxuNTMwNzpcXHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XFxuNTMwODpcXHQgKlxcbjUzMDk6XFx0ICogRnJlZSB0aGUgb3JkZXItMCBwYWdlcy4gQWRqYWNlbnQgZW50cmllcyB3aG9zZSBQRk5zIGZvcm0gYSBjb250aWd1b3VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjQ5LjQ1MDc2NzQ3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDQxNDU2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSByZWNlbnQgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtgIGFuZCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBjYWxscyBwYXJ0IG9mIHRoZSAqYnVsayogcGFnZSBhbGxvY2F0aW9uIHBhdGgsIGkuZS4sIGluc2lkZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgPyBJdCdzIGEga2V5IHF1ZXN0aW9uIGJlY2F1c2UgYnVsayBhbGxvY2F0aW9uIGhhcyBpdHMgb3duIHNldCBvZiBvcHRpbWl6YXRpb25zIGFuZCBjb25zdHJhaW50cy5cblxuVG8gY29uZmlybSAob3IgZGVueSkgdGhpcywgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEknbGwgZGl2ZSBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBwbGFuIGlzIHRvIHNlYXJjaCB0aGUgc291cmNlIGZvciByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgc3RhbmRhcmQgcGFnZSBhbGxvY2F0aW9uIHBhdGhzLiBTcGVjaWZpY2FsbHksIEknbGwgc2VhcmNoIGZvciB3aGVyZSBgcHJlcF9uZXdfcGFnZWAgaXMgY2FsbGVkIGFuZCBob3cgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlc2UgYWRkaXRpb25zIGZpdCBpbnRvIHRoZSBicm9hZGVyIHBhZ2UgYWxsb2NhdGlvbiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODo1Mi4yNTQ5MTQ4NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MDk1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttc2FuX2FsbG9jX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jPTE2OT1FWFBPUlRfU1lNQk9MKGttc2FuX2NvcHlfcGFnZV9tZXRhKTtcXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzAtXFxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG5tbS9rbXNhbi9zaGFkb3cuYy0xNzIte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyODMtXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTI4NDpcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTI4NS1cXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODo1Mi42NzQwMTk3NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjA2Njk1ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBmZWVscyAqb2ZmKi4gSSBzZWUgaXQgaGFzIGBwcmVwX25ld19wYWdlYCwgYW5kIGl0J3Mgc2V0dGluZyB0aGUgcGFnZSBhcyByZWZjb3VudGVkLCB3aGljaCBpcyBnb29kLiBCdXQgd2FpdOKApiBpdCdzIG1pc3NpbmcgdGhlIHVzdWFsIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgdGhlIEtNU0FOIGFsbG9jYXRpb24gY2FsbC4gVGhhdCBvbWlzc2lvbiBpcywgYXQgYSBtaW5pbXVtLCBwZWN1bGlhciwgYW5kIHdvcnRoIGludmVzdGlnYXRpbmcuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBJIGhhdmUgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6ICpkb24ndCogYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIHJlZmFjdG9yaW5nLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHRvcCBwcmlvcml0eS5cblxuUmlnaHQsIHNvIHRvIG1ha2UgdGhlIGNhbGwsIEkgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBuZWdhdGl2ZSAqYW5kKiBwb3NpdGl2ZSBjcml0ZXJpYS4gSSB3aWxsIG9ubHkgcmV0dXJuIGZhbHNlIGlmIGFsbCBjaGFuZ2VzIGZhbGwgaW50byB0aG9zZSBuZWdhdGl2ZSBjcml0ZXJpYSwgb3RoZXJ3aXNlIEkgc2hvdWxkIHJldHVybiB0cnVlLlxuXG5JIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIGlzbid04oCmXG4qICAgRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzXG4qICAgVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0c1xuKiAgIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmdcbiogICBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzXG5cbkFuZCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgYWxzbyBpbmNsdWRlcyBoYXJkd2FyZSB0aGF0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5CdXQgaWYgaXQgaW52b2x2ZXMgc29tZXRoaW5nIGxpa2UsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIEJQRiwgdGhlIHNjaGVkdWxlciwgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLCBpdCdzIGEgZGVmaW5pdGUgZ28uXG5cblNvIGJhY2sgdG8gbXkgb3JpZ2luYWwgdGhvdWdodCwgd2hhdCBpcyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKWAgKmFjdHVhbGx5KiBkb2luZz8gVGhhdCdzIHRoZSByZWFsIGNydXggaGVyZS4gTGV0IG1lIGRlbHZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHJldmlldyBgbW0va21zYW4vc2hhZG93LmNgIGFuZCBgaW5jbHVkZS9saW51eC9rbXNhbi5oYCB0byBzZWUgZXhhY3RseSB3aGF0IHRoaXMgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIGFkZGluZyB0byB0aGUgcGFnZSBhbGxvY2F0aW9uLiBJZiBpdCdzIGRvaW5nIHNvbWV0aGluZyBjcnVjaWFsLCB0aGVuIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1enppbmcgdGFyZ2V0IGJlY2F1c2UgaXQncyBpbiB0aGUgbW0gc3Vic3lzdGVtLCBhbmQgdGhlcmVmb3JlIGlzIGEgcG9zaXRpdmUuIEJ1dCBpZiBpdCdzIHB1cmVseSBkZWNvcmF0aXZlLCB0aGVuIG1heWJlIG5vdC4gTGV0J3Mgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjU2Ljg4MDcxNzU4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE4OjU2Ljg4MDgwNTAxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzczNTgxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiB3aXRoIEtNU0FOKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSB0aGlzIGB0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpYCBjYWxsLiBJdCdzIGEgdHJhY2Vwb2ludCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBnaXZlcyBtZSBhIHdpbmRvdyBpbnRvIHdoYXQncyBoYXBwZW5pbmcuIFRoZW4sIEkgc2VlIGBrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO2AuIEFoLCByaWdodCwgS01TQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBwYWdlIGFsbG9jYXRpb24uIEJ1dCB3YWl0IGEgc2Vjb25kLi4uSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBoYXBwZW5zIGlmIEtNU0FOIGlzICpkaXNhYmxlZCouICBJZiBgIUNPTkZJR19LTVNBTmAsIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbnNpZGUgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgZnVuY3Rpb24/IEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZhbGxiYWNrIGJlaGF2aW9yLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L2ttc2FuLmhgIHRvIHNlZSB3aGF0IHRoYXQgbWFjcm8gZXZhbHVhdGVzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTg6NTguODE4MTY2MDU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQyMTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxODo1OC44OTU1OTI5NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkwNTkwNDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBNZXRhZGF0YSBJbml0aWFsaXphdGlvbiBpbiBQYWdlIEFsbG9jYXRpb246IFdvcnRoeSBvZiBGdXp6aW5nPyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgYGttc2FuX2FsbG9jX3BhZ2VgLiBJdCdzIGNsZWFyIHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBpcyBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uIFdoZW4gS01TQU4gaXMgYWN0aXZlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBUaGUgcHJldmlvdXMgbGFjayBvZiBLTVNBTiBub3RpZmljYXRpb24gaW4gYnVsayBwYWdlIGFsbG9jYXRpb24gaXMgY29uY2VybmluZywgYXMgaXQgY291bGQgbGVhZCB0byBzdGFsZSBtZXRhZGF0YSBhbmQgbWlzc2VkIG9yIGZhbHNlIHBvc2l0aXZlIGJ1Z3MuXG5cbk5vdywgbG9va2luZyBkZWVwZXIsIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBub3QganVzdCBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsLiBJdCBjYWxscyBga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzYCwgYW5kIHdyaXRlcyB0byBzaGFkb3cgYW5kIG9yaWdpbiBwYWdlczsgdGhpcyBpc24ndCBqdXN0IGRlY29yYXRpb24hIFRoZXNlIGFjdGlvbnMgKmFsdGVyIGRhdGEgc3RydWN0dXJlcyouIE15IGNvbmNlcm4gdGhlbiBpcywgKmlzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUqP1xuXG5MZXQncyByZS1leGFtaW5lIHRoZSBjcml0ZXJpYS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhICh3aGVuIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCkgc3BlY2lmaWNhbGx5IG1lbnRpb25zIFwiUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLiBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIEl0IGZlZWxzIHRoYXQgdGhpcyBpcyBub3QgKnB1cmVseSogZGVjb3JhdGl2ZSwgYXMgaXQgdG91Y2hlcyB0aGUgS01TQU4gc3RhY2sgZGVwb3QsIGFuZCBzaGFkb3cgcGFnZXMuXG5cbk15IGFuYWx5c2lzIGZvY3VzZXMgb24gYGttc2FuX2FsbG9jX3BhZ2VgIHdoaWNoIHJlc2lkZXMgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cblRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCBga21zYW5fYWxsb2NfcGFnZWAgKmFsdGVycyBkYXRhIHN0cnVjdHVyZXMqIChzaGFkb3cgcGFnZXMsIG9yaWdpbnMsIHRoZSBLTVNBTiBzdGFjayBkZXBvdCkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2hlbiBLTVNBTiBpcyBlbmFibGVkLiAgRnVydGhlcm1vcmUsIGl0IGlzIG1vZGlmeWluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdoaWNoIGlzIGEga2V5IG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiBgbW0vYC5cblxuVGhlcmVmb3JlLCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBzZWUgd2hhdCBhY3R1YWxseSBjYWxscyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtgIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MDMuODAxNTAwNTgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY5MDAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjAzLjg3ODE5NjQzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc0MzQyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIGFyZSB3ZSBzZWVpbmcgYGFsbG9jX3BhZ2VzX2J1bGsqYCB1c2VkIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHV0aWxpemVkLiBNeSBmaXJzdCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgdGhlIGRyaXZlciBjb2RlLCBzaW5jZSB0aGF0J3MgYSBjb21tb24gYXJlYSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLiBBZnRlciB0aGF0LCBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIGFueSBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gTmV0d29yayBkcml2ZXJzIGFyZSBvZnRlbiBoZWF2eSBjb25zdW1lcnMgb2YgbWVtb3J5IGFuZCBtaWdodCBiZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGBhbGxvY19wYWdlc19idWxrKmAuIEZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBjb3JlIGl0c2VsZiDigJMgaXQncyBwb3NzaWJsZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIG1tIHN1YnN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCdzIGNhbGxpbmcgYGFsbG9jX3BhZ2VzX2J1bGsqYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA5OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjA1Ljk1MjU0MTcyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMDU5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzMy1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XFx0LyogTWFyayBlbXB0eSBhbGxvYy5jYWNoZSBzbG90cyBcXFwiZW1wdHlcXFwiIGZvciBhbGxvY19wYWdlc19idWxrICovXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM1LVxcdG1lbXNldChcXHUwMDI2cG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUsIDAsIHNpemVvZih2b2lkICopICogYnVsayk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM2LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcXHRucl9wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIHBvb2wtXFx1MDAzZXAubmlkLCBidWxrLFxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cXHRcXHRcXHRcXHRcXHQgKHN0cnVjdCBwYWdlICoqKXBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz02ODc9c3RhdGljIGJvb2wgc3ZjX2ZpbGxfcGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTItXFx0Zm9yIChmaWxsZWQgPSAwOyBmaWxsZWQgXFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo2OTM6XFx0XFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjk0LVxcdFxcdGlmIChyZXQgXFx1MDAzZSBmaWxsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjA2LjAxOTg1MTQ3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDQ4MTIxOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIHNlbWFudGljcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHVzaW5nIGl0IGNvcnJlY3RseSBmb3IgbXkgY3VycmVudCB0YXNrLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgZGVmaW5pdGlvbiwgc28gSSdtIG9wZW5pbmcgdXAgYGluY2x1ZGUvbGludXgvZ2ZwLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxhZ3MgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWZpbmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNhbm9uaWNhbCBkZWZpbml0aW9uLCB0aGUgcGFyYW1ldGVycywgYW5kIGFueSBwZXJ0aW5lbnQgY29tbWVudHMgYWJvdXQgaXRzIGludGVuZGVkIHVzZSBhbmQgY2F2ZWF0cy4gSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGZsYWdzIGJlaW5nIHVzZWQgaXMgY3VycmVudCBhbmQgY29ycmVjdC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2ODQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTowOS40Njc5NzYyNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDE0OTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTowOS41ODgxMzEzMjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ0NDAwMzQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGb2N1c1N5bWJvbCBDb25zaWRlcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZyb20gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBGb2N1c1N5bWJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB3aGV0aGVyIGl0IGZpdHMgdGhlIGNyaXRlcmlhIGZvciBpbmNsdXNpb24uXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIFNlY3Rpb24gNCBvZiB0aGUgZ3VpZGVsaW5lcy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzOiBcIkFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUy5cIiBUaGV5IGV4cGxpY2l0bHkgbWVudGlvbiBhdm9pZGluZyB0aGluZ3MgbGlrZSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLiBTbywgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdWJpcXVpdG91cyo/IElzIGl0IGxpa2UgYSBgX19hbGxvY19wYWdlc19ub3Byb2ZgIG9yIGBrbWFsbG9jYD9cblxuTm8sIHdhaXQsIEkgZG9uJ3QgdGhpbmsgc28uIEl0IGxvb2tzIGxpa2UgaXQncyAqc3BlY2lmaWMqIHRvIGJ1bGsgYWxsb2NhdGlvbi4gSXQncyBjYWxsZWQgYnkgcGFydGljdWxhciBzdWJzeXN0ZW1zLiBJIHJlbWVtYmVyIGl0IGZyb20gYGNvcHlfc3BsaWNlX3JlYWRgIGluIHNwbGljZSwgZnVzZSByZWFkZGlyLCBwYWdlX3Bvb2wsIGJ0cmZzLCBzdmNfZmlsbF9wYWdlcyBhbmQgdGhlIGxpa2UuIEl0IGltcGxlbWVudHMgKnNwZWNpZmljKiBsb2dpYyBhbmQgc2VydmVzIGFzIGEgdGFyZ2V0ZWQgZW50cnlwb2ludCBmb3IgY2VydGFpbiBmZWF0dXJlcy4gU28sIGl0J3MgKm5vdCogYSBnZW5lcmFsIGFsbG9jYXRvciB0aGF0IGV2ZXJ5dGhpbmcgdXNlcy4gVGhhdCdzIGEgZ29vZCBzaWduLlxuXG5Pa2F5LCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIGRvIGEgZGVlcGVyIGRpdmUuIExldCdzIGRvIGEgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBib3RoIGBhbGxvY19wYWdlc19idWxrYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MTMuMDMyMTQzMjEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzNjg5NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOToxNC43NDU4MzkyNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwNjQwNjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQncyBhIGdlbmVyaWMgbGlmZWN5Y2xlIGZ1bmN0aW9uIG9yIGEgZmVhdHVyZSBzeW1ib2wuIE15IGd1dCBzYXlzIGl04oCZcyByZWxhdGVkIHRvIGJ1bGsgbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIHRyaWdnZXJzIGEgcXVpY2sgcmV2aWV3IG9mIFJ1bGUgNC4gUmlnaHQsIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIGFuZCBzeW5jIHByaW1pdGl2ZXMgYmVjYXVzZSB0aGF0IGRpbHV0ZXMgdGhlIGZ1enppbmcgZWZmb3J0LlxuXG5UaGUga2V5IGlzIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgaG90LXBhdGggY2FsbGVkIGluIG5lYXJseSBldmVyeSBwcm9ncmFtIGV4ZWN1dGlvbi4gVG8gZmlndXJlIHRoaXMgb3V0LCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbGVyczogYGNvcHlfc3BsaWNlX3JlYWRgLCBgZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZmAsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYCwgYW5kLCBvZiBjb3Vyc2UsIGl0c2VsZiBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBJcyBpdCBjYWxsZWQgb24gKmV2ZXJ5KiBzeXprYWxsZXIgcHJvZ3JhbSBleGVjdXRpb24/IE5vLCB0aGF04oCZcyBub3QgcmlnaHQuIFRoZSBnZW5lcmFsIGFsbG9jYXRpb24gcGF0aCBpcyBtb3JlIGxpa2VseSBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBga21hbGxvY2AsIG9yIGBrbWVtX2NhY2hlX2FsbG9jYC4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBzdWJzeXN0ZW1zOiB2bWFsbG9jLCBgc3BsaWNlYCwgYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2AsIGBidHJmc2AsIGBwYWdlX3Bvb2xgIGFtb25nIG90aGVycy5cblxuQWhhISBOb3cgSSBzZWUgYSBjb25uZWN0aW9uIHRvIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGFuZCBub3cgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gaWYgS01TQU4gaXMgZW5hYmxlZCwgYGttc2FuX2FsbG9jX3BhZ2VgICppcyogdWJpcXVpdG91cy4gSXQncyBlc3NlbnRpYWxseSBjYWxsZWQgaW4gZXZlcnkgbm9ybWFsIHBhZ2UgYWxsb2NhdGlvbi4gQnV0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgc3RpbGwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiBga21zYW5fYWxsb2NfcGFnZWAgaXMgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfS01TQU5gIGlzIHNldCAob3RoZXJ3aXNlLCBpdCdzIGp1c3QgYSBzdGF0aWMgaW5saW5lKS4gQWxzbywgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGRlZmluZWQgd2hlbiB0cmFjZXBvaW50cyBhcmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBndWFyZGVkIGJ5IGFueSBzcGVjaWZpYyBjb25maWdzLiBOZWVkIHRvIGNoZWNrIGBtbS9wYWdlX2FsbG9jLmNgIGFyb3VuZCBsaW5lcyA1MTUwLTUzMTAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjIwLjI1MjI0ODQ3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxNTA6XFx0ICogTm90ZSB0aGF0IG9ubHkgdGhlIGVsZW1lbnRzIGluIEBwYWdlX2FycmF5IHRoYXQgd2VyZSBjbGVhcmVkIHRvICVOVUxMIG9uXFxuNTE1MTpcXHQgKiBlbnRyeSBhcmUgcG9wdWxhdGVkIHdpdGggbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBAbnJfcGFnZXMgaXMgdGhlIG1heGltdW1cXG41MTUyOlxcdCAqIG51bWJlciBvZiBwYWdlcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBhcnJheS5cXG41MTUzOlxcdCAqXFxuNTE1NDpcXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gQHBhZ2VfYXJyYXksIGluY2x1ZGluZyBvbmVzIGFscmVhZHlcXG41MTU1OlxcdCAqIGFsbG9jYXRlZCBvbiBlbnRyeS4gIFRoaXMgY2FuIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZCBpbiBAbnJfcGFnZXMsXFxuNTE1NjpcXHQgKiBidXQgYWxsIGVtcHR5IHNsb3RzIGFyZSBmaWxsZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiAgSS5lLiwgaWYgYWxsIHNsb3RzIGluXFxuNTE1NzpcXHQgKiBAcGFnZV9hcnJheSB3ZXJlIHNldCB0byAlTlVMTCBvbiBlbnRyeSwgdGhlIHNsb3RzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZhbHVlXFxuNTE1ODpcXHQgKiAtIDEgd2lsbCBiZSBmaWxsZWQuXFxuNTE1OTpcXHQgKi9cXG41MTYwOlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG41MTYxOlxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuNTE2MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuNTE2MzpcXHR7XFxuNTE2NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MTY1OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjUxNjY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNTE2NzpcXHRcXHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xcbjUxNjg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XFxuNTE2OTpcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcXG41MTcwOlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcXG41MTcxOlxcdFxcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0LypcXG41MTc0OlxcdFxcdCAqIFNraXAgcG9wdWxhdGVkIGFycmF5IGVsZW1lbnRzIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZXMgbmVlZFxcbjUxNzU6XFx0XFx0ICogdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBkaXNhYmxpbmcgSVJRcy5cXG41MTc2OlxcdFxcdCAqL1xcbjUxNzc6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSlcXG41MTc4OlxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUxNzk6XFx0XFxuNTE4MDpcXHRcXHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXFxuNTE4MTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gMCkpXFxuNTE4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXFxuNTE4NTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcbjUxODg6XFx0XFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xcbjUxODk6XFx0XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgKGdmcCBcXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOToyMC4yNTI4ODM1OTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4MTA3NDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBLTVNBTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIEtNU0FOIGRpcmVjdGx5IG5lZWRzIGBDT05GSUdfS01TQU5gLCBuYXR1cmFsbHkuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB0byB0cnVseSBleGVyY2lzZSB0aGUgYGttc2FuX2FsbG9jX3BhZ2VgIGhvb2sgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMsIHRoZSBgS01TQU5gIG9wdGlvbiAqaXMqIHJlbGV2YW50LCBldmVuIHRob3VnaCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGNvbXBpbGVzIHJlZ2FyZGxlc3MuIFNvLCB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQgYW5kIGxpbmtlZCB1cCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLTVNBTmAuIEknbGwgZGlnIHRocm91Z2ggYGxpYi9LY29uZmlnLmttc2FuYCBhbmQgYG1tL2thc2FuL0tjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTQ1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MjIuNzMzOTYxOTA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExNDU2MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLTVNBTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5rbXNhbj01PWNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbi03LVxcbmxpYi9LY29uZmlnLmttc2FuOjg6Y29uZmlnIEtNU0FOXFxubGliL0tjb25maWcua21zYW4tOS1cXHRib29sIFxcXCJLTVNBTjogZGV0ZWN0b3Igb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlXFxcIlxcbi0tXFxubGliL0tjb25maWcua21zYW49MjY9aWYgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi0yNy1cXG5saWIvS2NvbmZpZy5rbXNhbjoyODpjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXFxubGliL0tjb25maWcua21zYW4tMjktXFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnNcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbi00MS1cXG5saWIvS2NvbmZpZy5rbXNhbjo0Mjpjb25maWcgS01TQU5fS1VOSVRfVEVTVFxcbmxpYi9LY29uZmlnLmttc2FuLTQzLVxcdHRyaXN0YXRlIFxcXCJLTVNBTiBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjI0LjQ0NTQyNDExN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTE2NTE4MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtNU0FOIERlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgS01TQU4uIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgS01TQU4ncyBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyB0byBgbGliL0tjb25maWcua21zYW5gLiBJIHN1c3BlY3QgdGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjcnVjaWFsIGBjb25maWdgIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgS01TQU4gYW5kIGxpa2VseSBpdHMgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgY29uZGl0aW9uYWxzIHRoZXJlIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhlIEtNU0FOIGNvZGUgYW5kIGluc3RydW1lbnRhdGlvbiBhcmUgY29tcGlsZWQsIHBvdGVudGlhbGx5IGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcywgb3IgZXZlbiBjb21waWxlLXRpbWUgZmxhZ3MgdGhhdCBtYXkgYmUgcmVsZXZhbnQgdG8gdGVzdGluZyBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgYC1mc2FuaXRpemU9a21zYW5gLiBLbm93aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpbnRpbWF0ZWx5IGlzIGNydWNpYWwgZm9yIHByb3BlciBpbnRlZ3JhdGlvbiwgdHJvdWJsZXNob290aW5nLCBhbmQgb3B0aW1pemF0aW9uIG9mIHRoZSBLTVNBTiBidWlsZCBwcm9jZXNzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGN1c3RvbSBrZXJuZWwgYnVpbGRzIG9yIHNwZWNpYWxpemVkIGhhcmR3YXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSB2YXJpYWJsZXMgdG8gZW5zdXJlIEknbSBnZXR0aW5nIGEgY2xlYW4gYW5kIGNvcnJlY3QgS01TQU4gYnVpbGQuIExldCdzIHNlZSB3aGF0IHRoZSBgS2NvbmZpZ2AgaGFzIHRvIHRlbGwgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MjguMzYxOTQ2MTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmttc2FuXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSEFWRV9BUkNIX0tNU0FOXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBIQVZFX0tNU0FOX0NPTVBJTEVSXFxuICAgNjpcXHRcXHRkZWZfYm9vbCAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtlcm5lbC1tZW1vcnkpXFxuICAgNzpcXHRcXG4gICA4OlxcdGNvbmZpZyBLTVNBTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiS01TQU46IGRldGVjdG9yIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZVxcXCJcXG4gIDEwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tNU0FOIFxcdTAwMjZcXHUwMDI2IEhBVkVfS01TQU5fQ09NUElMRVJcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2ICFLQVNBTiBcXHUwMDI2XFx1MDAyNiAhS0NTQU5cXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gIVBSRUVNUFRfUlRcXG4gIDEzOlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UXFxuICAxNDpcXHRcXHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVFxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBpcyBhIGR5bmFtaWMgZGV0ZWN0b3Igb2YgdXNlcyBvZlxcbiAgMTc6XFx0XFx0ICB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiB0aGUga2VybmVsLiBJdCBpcyBiYXNlZCBvbiBjb21waWxlclxcbiAgMTg6XFx0XFx0ICBpbnN0cnVtZW50YXRpb24gcHJvdmlkZWQgYnkgQ2xhbmcgYW5kIHRodXMgcmVxdWlyZXMgQ2xhbmcgdG8gYnVpbGQuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgQW4gaW1wb3J0YW50IG5vdGUgaXMgdGhhdCBLTVNBTiBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlLFxcbiAgMjE6XFx0XFx0ICBiZWNhdXNlIGl0IGRyYXN0aWNhbGx5IGluY3JlYXNlcyBrZXJuZWwgbWVtb3J5IGZvb3RwcmludCBhbmQgc2xvd3NcXG4gIDIyOlxcdFxcdCAgdGhlIHdob2xlIHN5c3RlbSBkb3duLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2Rldi10b29scy9rbXNhbi5yc3RcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdGlmIEtNU0FOXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gZnVuY3Rpb25zXFxcIlxcbiAgMzA6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZnNhbml0aXplLW1lbW9yeS1wYXJhbS1yZXR2YWwsIEtNU0FOIHdpbGxcXG4gIDMzOlxcdFxcdCAgZWFnZXJseSBjaGVjayBldmVyeSBmdW5jdGlvbiBwYXJhbWV0ZXIgcGFzc2VkIGJ5IHZhbHVlIGFuZCBldmVyeVxcbiAgMzQ6XFx0XFx0ICBmdW5jdGlvbiByZXR1cm4gdmFsdWUuXFxuICAzNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MjguMzYyMDA4M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MzMwMjI5MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkb3VibGUtY2hlY2sgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIEtNU0FOLiBJcyBLTVNBTiByZXF1aXJlZCBmb3IgY29tcGlsYXRpb24gb3IganVzdCBmb3IgZW5hYmxpbmcgdGhlIHNwZWNpZmljIHRyYWNpbmcvaW5pdGlhbGl6YXRpb24gbG9naWM/IFRoZSBjb2RlICpjb21waWxlcyogcmVnYXJkbGVzcywgYXMgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIGEgc3RhdGljIGlubGluZSB0aGF0IGJlY29tZXMgYW4gZW1wdHkgZnVuY3Rpb24gd2hlbiBLTVNBTiBpcyBvZmYuIEJ1dCB0aGUgd2hvbGUgKnBvaW50KiBvZiBhZGRpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgZm9yIEtNU0FOIHRvIHByb3Blcmx5IHRyYWNrIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLiBTbywgeWVzLCBgQ09ORklHX0tNU0FOYCBpcyAqZGVmaW5pdGVseSogdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gVGhlIGBXb3J0aEZ1enppbmdgIHJ1bGVzIHNheSB3ZSBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUsIGVzcGVjaWFsbHkgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LiBBbmQgaGVyZSwgd2UgYXJlICphYnNvbHV0ZWx5KiBtb2RpZnlpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhZGRpbmcgcGFnZSBhbGxvY2F0aW9uIHRyYWNpbmcgKmFuZCogS01TQU4gdHJhY2tpbmcuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgaXQncyByZWFjaGFibGUuIFNvLCBcIldvcnRoRnV6emluZ1wiIGlzIGdvaW5nIHRvIGJlIHRydWUuXG5cbkZvciBgRW5hYmxlQ29uZmlnc2AsIGl0J3Mgc3RyYWlnaHRmb3J3YXJkOiBgS01TQU5gLiBTaW5jZSBga21zYW5fYWxsb2NfcGFnZWAgb25seSBkb2VzIGFueXRoaW5nIHdoZW4gS01TQU4gaXMgZW5hYmxlZCwgdGhhdCdzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIHdlIHNob3VsZCBpbmNsdWRlIGBrbXNhbl9hbGxvY19wYWdlYCBpdHNlbGYsIGJ1dCB0aGF0J3MgY2FsbGVkICpldmVyeXdoZXJlKiB3aGVuIEtNU0FOIGlzIGVuYWJsZWQsIHNvIGl0J3MgcHJvYmFibHkgdG9vIHViaXF1aXRvdXMuIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaG93ZXZlciwgaXMgdGhlIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgdGhlIGNoYW5nZSB3YXMgaW50cm9kdWNlZC4gVGhlIGNoYW5nZSBhZGRzIHRoZSBga21zYW5fYWxsb2NfcGFnZWAgY2FsbCBzbyB0aGF0IGlzIHRoZSBwcmVjaXNlIGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLlxuXG5CdXQgd2FpdCwgc2hvdWxkIHdlIGV4cGFuZCB0aGUgbGlzdCB0byBpbmNsdWRlIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgIGxpa2UgYGNvcHlfc3BsaWNlX3JlYWRgIG9yIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYD8gSSB0aGluayBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyB0aGUgcHJlY2lzZSB0YXJnZXQuIEl0IGlzIHRoZSBleGFjdCBub24taW5saW5lZCBzeW1ib2wgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbiBoYXBwZW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFzIHdlbGwgaW4gYG1tL21lbXBvbGljeS5jYCBhcyBhIHBvc3NpYmxlIHBvaW50IHRvIGV4YW1pbmUuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGluZGVlZCBhbiBleHBvcnRlZCBub24taW5saW5lIGZ1bmN0aW9uOiBgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLCAuLi4pYCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZilgLlxuXG5Pa2F5LCB0aW1lIGZvciBhIGZpbmFsIHJldmlldy4gXCJXb3J0aEZ1enppbmdcIiBpcyBgdHJ1ZWAgYmVjYXVzZSB0aGUgcGF0Y2ggYWRkcyB0aGUgYGttc2FuX2FsbG9jX3BhZ2UoKWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvci4gVGhpcyBpcyBjcml0aWNhbDogSXQgbWFrZXMgc3VyZSB0aGF0IEtNU0FOIHByb3Blcmx5IHRyYWNrcyBzaGFkb3cgYW5kIG9yaWdpbiBtZXRhZGF0YSBmb3IgcGFnZXMgYWxsb2NhdGVkIGluIGJ1bGssIHByZXZlbnRpbmcgaW5jb3JyZWN0IHNhbml0aXphdGlvbiBzdGF0ZSBpbiBvdGhlciBzdWJzeXN0ZW1zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgdGhhdCB3ZSBuZWVkIHRvIGZ1enogd2l0aCBLTVNBTiBlbmFibGVkLlxuXG5UaGUgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFtcIktNU0FOXCJdYC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGlzIGp1c3QgYFtcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJdYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQyLCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjM2LjY5MjIzOTc3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMjExODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLTVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGttc2FuX2FsbG9jX3BhZ2UoKSBhbmQgdHJhY2VfbW1fcGFnZV9hbGxvYygpIGNhbGxzIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jLiBUaGlzIGVuc3VyZXMgS01TQU4gcHJvcGVybHkgaW5pdGlhbGl6ZXMgc2hhZG93IGFuZCBvcmlnaW4gbWV0YWRhdGEgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnQgZnV6emluZyB3aXRoIEtNU0FOIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS01TQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBrbXNhbl9hbGxvY19wYWdlKCkgYW5kIHRyYWNlX21tX3BhZ2VfYWxsb2MoKSBjYWxscyB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYy4gVGhpcyBlbnN1cmVzIEtNU0FOIHByb3Blcmx5IGluaXRpYWxpemVzIHNoYWRvdyBhbmQgb3JpZ2luIG1ldGFkYXRhIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50IGZ1enppbmcgd2l0aCBLTVNBTiBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTozNi43NjQ0NTkzMDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDYyMTMxMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6MzYuNzY0OTE3MDc2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjA0NjE2Njc4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LlxcblxcblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZjJhZjk2ZDEwZjZhYWRlNDY5MWRhYTcxNzY3NmU5Yjc2OGY2ZTgxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzoxODozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uNzNjNzM0OTlhMDUxYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI4MCw2ICs1MjgwLDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4rXHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjM2Ljc2NDkxOTY5NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njg0ODYwNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY2hhbmdlcyB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgc2VlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgdGhlIGFkZGl0aW9uIG9mIHR3byBrZXkgbGluZXM6IGEgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGNhbGwgYW5kIGEgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGwuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgc3BlY2lmaWNhbGx5IHdoYXQgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIGRvaW5nLiBJIGNhbid0IGltbWVkaWF0ZWx5IHNlZSB0aGUgZnVsbCBzY29wZSBvZiB0aGUgaW1wYWN0IGJhc2VkIG9uIHRoaXMgc21hbGwgc25pcHBldC4gSXQncyB0aW1lIHRvIGxldmVyYWdlIG15IHRvb2xzLiBJJ2xsIHJlYWNoIGZvciBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMgYHJlYWQtZmlsZWAsIGRlcGVuZGluZyBvbiBteSBwcmVmZXJyZWQgbWV0aG9kLCB0byBpbnZlc3RpZ2F0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGVmaW5pdGlvbnMgb2YgYm90aCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGFzc2VzcyB0aGUgcHVycG9zZSBhbmQgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6NDMuNDQ5NzgzODI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ2MDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUxMzktLypcXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XFxubW0vcGFnZV9hbGxvYy5jLTUxNDEtICogQGdmcDogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvblxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXFxubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL3BhZ2VfYWxsb2MuYy01MTYxLVxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTMwMS19XFxubW0vcGFnZV9hbGxvYy5jOjUzMDI6RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTo0My41MDQyNTQ2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM2MDAyMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tL3BhZ2VfYWxsb2MuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbWVtb3J5IGFsbG9jYXRpb24gaXMgZnVuY3Rpb25pbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGxpbmVzIDUyNTAgdGhyb3VnaCA1MzAwLiBUaGF0IHJhbmdlIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlcmUuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgYXJlIGRlc2NyaXB0aXZlIGVub3VnaCB0byBtYWtlIGl0IGFuIGVhc3kgcHJvY2Vzcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGJlaW5nIHVzZWQgYW5kIHRoZSBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcyB0aGF0IG9jY3VyLiBJIGFsc28gd2FudCB0byBzZWUgdGhlIGxvY2tpbmcgdGhhdCBpcyB1c2VkIHRvIHByb3RlY3QgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6NDUuNDQwMjYwNTA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI1MDpcXHRcXHQgKi9cXG41MjUxOlxcdFxcdGlmICh1bmxpa2VseSghem9uZSkpXFxuNTI1MjpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjUzOlxcdFxcbjUyNTQ6XFx0XFx0Lyogc3Bpbl90cnlsb2NrIG1heSBmYWlsIGR1ZSB0byBhIHBhcmFsbGVsIGRyYWluIG9yIElSUSByZWVudHJhbmN5LiAqL1xcbjUyNTU6XFx0XFx0cGNwID0gcGNwX3NwaW5fdHJ5bG9jayh6b25lLVxcdTAwM2VwZXJfY3B1X3BhZ2VzZXQpO1xcbjUyNTY6XFx0XFx0aWYgKCFwY3ApXFxuNTI1NzpcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG41MjU4OlxcdFxcbjUyNTk6XFx0XFx0LyogQXR0ZW1wdCB0aGUgYmF0Y2ggYWxsb2NhdGlvbiAqL1xcbjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41MjgzOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4NDpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcXG41Mjg1OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41Mjg2OlxcdFxcdH1cXG41Mjg3OlxcdFxcbjUyODg6XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuNTI4OTpcXHRcXG41MjkwOlxcdFxcdF9fY291bnRfemlkX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lX2lkeCh6b25lKSwgbnJfYWNjb3VudCk7XFxuNTI5MTpcXHRcXHR6b25lX3N0YXRpc3RpY3Moem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIHpvbmUsIG5yX2FjY291bnQpO1xcbjUyOTI6XFx0XFxuNTI5MzpcXHRvdXQ6XFxuNTI5NDpcXHRcXHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xcbjUyOTU6XFx0XFxuNTI5NjpcXHRmYWlsZWQ6XFxuNTI5NzpcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuNTI5ODpcXHRcXHRpZiAocGFnZSlcXG41Mjk5OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41MzAwOlxcdFxcdGdvdG8gb3V0O1xcbjUzMDE6XFx0fVxcbjUzMDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xcbjUzMDM6XFx0XFxuNTMwNDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoxOTo0NS40NDA2OTE5NDRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MzcyNjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkgc2FuaXRpemF0aW9uLCBsaWtlbHkgS01TQU4uIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gZmluZGluZyBpdHMgY2FsbCBzaXRlcyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgdXNlZCBhbmQgZm9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjayBkb3duIGFsbCB0aGUgbG9jYXRpb25zIGluIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHBhdHRlcm5zIGFuZCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgc2VhcmNoIGVmZmljaWVudGx5LCBrbm93aW5nIHRoYXQgSSdsbCBoYXZlIHRvIGludGVycHJldCB0aGUgcmVzdWx0cyBhbmQgZmlsdGVyIG91dCBmYWxzZSBwb3NpdGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjQ3LjIyNDQyMTg0NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMTEyMTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva21zYW4uaD01Nz1ib29sIF9faW5pdCBfX211c3RfY2hlY2sga21zYW5fbWVtYmxvY2tfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC02MC0vKipcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmg6NjE6ICoga21zYW5fYWxsb2NfcGFnZSgpIC0gTm90aWZ5IEtNU0FOIGFib3V0IGFuIGFsbG9jX3BhZ2VzKCkgY2FsbC5cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjgtICovXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTcwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMTgtXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgva21zYW4uaC0zMjAtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzKVxcbi0tXFxubW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cXG5tbS9rbXNhbi9zaGFkb3cuYzoxNzE6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNzAtICpcXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NDYxLVxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjQ4Ljc0NTU0OTExNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE4ODg3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFNoYWRvd2luZyBhbmQgUGFnZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gYGttc2FuX2FsbG9jX3BhZ2VgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYmVpbmcgYWRkZWQgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSXQncyBjbGVhciB0aGF0IHRoZSBpc3N1ZSBpcyBzcGVjaWZpYyB0byBwYWdlcyBjb21pbmcgZnJvbSB0aGUgcGNwbGlzdCwgb3IgYF9fcm1xdWV1ZV9wY3BsaXN0YCwgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFJpZ2h0LCB0aGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYGFsbG9jX3BhZ2VzX2J1bGtgIHB1bGxzIHBhZ2VzIGZyb20gdGhlIHBjcGxpc3QsIHdlIHdlcmUgYnlwYXNzaW5nIEtNU0FOJ3MgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gc3RlcHMuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgYGttc2FuX2FsbG9jX3BhZ2VgIHdhc24ndCBiZWluZyBjYWxsZWQgZm9yIHRob3NlIHBjcGxpc3Qtc291cmNlZCBwYWdlcy4gVGhpcyBtZWFucyBLTVNBTiB3YXNuJ3QgaW5pdGlhbGl6aW5nIHRoZSBzaGFkb3cgbWVtb3J5IG9yIG9yaWdpbiBtZXRhZGF0YSBmb3IgdGhlc2UgcGFnZXMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlIGRldGFpbHMgb2Ygd2hldGhlciBLTVNBTiBjb3JyZWN0bHkgbWFya3MgdGhvc2UgcGFnZXMgYXMgaW5pdGlhbGl6ZWQgb3Igbm90IGRlcGVuZGluZyBvbiBgX19HRlBfWkVST2AuIFNvLCB3aXRob3V0IGNhbGxpbmcgYGttc2FuX2FsbG9jX3BhZ2VgLCBLTVNBTiB3b3VsZG4ndCBrbm93IGFib3V0IHRoZXNlIHBhZ2VzLCBhbmQgcG90ZW50aWFsbHkgbGVhZCB0byBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMuIFRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9rbXNhbi9zaGFkb3cuY2AgYW5kIGNvbmZpcm0gZXhhY3RseSBob3cgS01TQU4gaGFuZGxlcyB0aGUgc2hhZG93IG1lbW9yeSBhbmQgb3JpZ2luIHRyYWNraW5nIHdpdGhpbiBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGl0cyByZWxhdGlvbiB0byBhbGxvY2F0aW9uIGZsYWdzLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZW5kZWQgdG8gZGVhbCB3aXRoIHRoZSB6ZXJvaW5nLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MTk6NTEuNjY0NDM4OTc1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjE5OjUxLjY2NDUwOTQ1NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzgyMzg0NjcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtNU0FOIE5lZWQgZm9yIGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaW5pdGlhbGx5LCBteSBmaXJzdCB0aG91Z2h0IHdhcyBcIldvdywgdGhpcyBzZWVtcyBzaWduaWZpY2FudCFcIi4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgaW50ZWdyYXRpbmcgS01TQU4gaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBzcGVjaWZpY2FsbHkgd2hlbiBgX19HRlBfWkVST2AgaXNuJ3Qgc2V0LiBQcmV2aW91c2x5LCB3ZSB3ZXJlbid0IGluaXRpYWxpemluZyB0aGUgc2hhZG93IG1lbW9yeSBmb3IgdGhvc2UgcGFnZXMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gTm93LCB3aXRoIGBrbXNhbl9hbGxvY19wYWdlYCwgd2UncmUgdHJhY2tpbmcgdGhlc2UgYnVsayBhbGxvY2F0aW9ucyBwcm9wZXJseSwgbWFya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoIGAweGZmYCBhbmQgY2FwdHVyaW5nIHRoZSBvcmlnaW4gc3RhY2sgdHJhY2UuXG5cbk15IGltbWVkaWF0ZSByZWFjdGlvbiB3YXMgdG8gY29uc2lkZXIgaWYgaXQgZXhwb3NlcyBhbnkgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCBJIHF1aWNrbHkgcmVhbGl6ZWQsIG5vLCB3YWl0LCBpdCdzICplbmFibGluZyogS01TQU4gdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGluIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLCB3aGljaCBjb3VsZCBiZSBpbiBhbGwgc29ydHMgb2YgcGxhY2VzIC0gbmV0d29yayBkcml2ZXJzLCBwYWdlIHBvb2xzLCBmaWxlc3lzdGVtcywgYW5kIHNvIG9uLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhpcyBwcm9tcHQsIGJlY2F1c2UgdGhpcyBpcyBhYm91dCBkZWNpZGluZyBpZiB3ZSBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGtleSBkaXN0aW5jdGlvbiBpcyB0aGF0IEtBU0FOIGFscmVhZHkgY2F0Y2hlcyBhIHRvbiBvZiBidWdzLCBpbmNsdWRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFuZCoga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIFRoZSBndWlkZWxpbmUgaXMgY2xlYXI6IGlmIEtBU0FOIChvciBzb21ldGhpbmcgZWxzZSkgY2FuIGNhdGNoIHRoZSBpc3N1ZSwgd2UgKmRvbid0KiBuZWVkIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gYmVjYXVzZSBpdCdzIGV4cGVuc2l2ZS5cblxuU28sIGlzIHRoZSAqcGF0Y2ggaXRzZWxmKiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBvciBpcyBpdCAqbW9kaWZ5aW5nIGNvZGUqIHRoYXQgZXhwb3NlcyBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz9cblxuVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBkb2luZyB0aGUgbGF0dGVyLCBpdCdzIG1vZGlmeWluZyB0aGUgYWxsb2NhdGlvbiBjb2RlIHRvICplbmFibGUqIEtNU0FOIHRyYWNraW5nLCBub3QgKmludHJvZHVjaW5nKiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYWN0dWFsIHJpc2sgaXMgaW4gdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi5cblxuTGV0J3MgZG8gYSBsaXR0bGUgbW9yZSBkaWdnaW5nIGludG8gdGhlIGdpdCBoaXN0b3J5IHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyMDoxNS40ODgzNTg0NTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU1OTEyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fYWxsb2NfcGFnZVxcXFwocGFnZSwgMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4My1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1Mjg0OlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg1LVxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjA6MTcuNjYzOTUzOTg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxOTMwODU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLTVNBTiBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoaXMgcGF0Y2ggaW4gcmVsYXRpb24gdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBLTVNBTi4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlKClgIGFuZCBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLiBNeSBmaXJzdCBjb25jZXJuIGlzIGFsd2F5cyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdhaXQsIGlzIEtNU0FOIHRoZSBzYW5pdGl6ZXIgaXRzZWxmP1xuXG5Pa2F5LCBzbyBieSBpbmNsdWRpbmcgYGttc2FuX2FsbG9jX3BhZ2UoKWAgd2l0aGluIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLCBpdCB3aWxsIG5vdyBmbGFnIHBhZ2VzIGFzIHVuaW5pdGlhbGl6ZWQgKG9yIGluaXRpYWxpemVkLCBpZiB1c2luZyBgX19HRlBfWkVST2ApLiBUaGlzIHJhaXNlcyB0aGUgcXVlc3Rpb246IGRvZXMgdGhpcyByZXZlYWwgZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBpbiBjb2RlIHRoYXQgdXNlcyBgYWxsb2NfcGFnZXNfYnVsa2A/XG5cbkJlZm9yZSB0aGlzIHBhdGNoLCBLTVNBTiB3b3VsZG4ndCBkZXRlY3QgdW5pbml0aWFsaXplZCByZWFkcyBvbiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGJ1bGsgYWxsb2NhdG9yIGJlY2F1c2UgdGhlIFwic2hhZG93XCIgbWVtb3J5IHdhc24ndCBiZWluZyBjb3JyZWN0bHkgbWFya2VkLiBOb3csIGl0IHdpbGwhIEJ1dCBpcyB0aGUgKnBhdGNoIGl0c2VsZiogaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcywgb3IgaXMgaXQgc2ltcGx5IGV4cG9zaW5nIHByZS1leGlzdGluZyBvbmVzP1xuXG5UaGUgd29yZGluZyBlbXBoYXNpemVzIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAgb25seSBpZiB0aGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3MgY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAuIFRoZSBjcml0ZXJpYSBpbmNsdWRlOiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgY2FuIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5Db252ZXJzZWx5LCB3ZSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBwcmltYXJpbHkgY29uY2VybiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGlzc3Vlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gYW5kIG90aGVyIHRvb2xzIGFscmVhZHkgaGFuZGxlKS4gVGhlIG90aGVyIGNvbmRpdGlvbnMgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYCBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlL2luZm9ybWF0aW9uIGxlYWtzLlxuXG5Ob3csIGxldCdzIGV2YWx1YXRlIHRoaXMgc3BlY2lmaWMgcGF0Y2g6IElzIGl0IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8gbGVha3M/IEl0J3MgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBpbnNpZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgLlxuXG4qICAgSXMgaXQgc2VuZGluZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyBOby5cbiogICBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uXG4qICAgSXMgaXQgYWxsb2NhdGluZyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzPyBOby5cbiogICBBcmUgdGhlcmUgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uXG5cblNvLCB3aGF0IGlzIHRoZSBwYXRjaCBhY3R1YWxseSBkb2luZz8gSXQncyBhZGRpbmcgYSB0cmFjZXBvaW50IGFuZCBhIEtNU0FOIGhvb2sgdG8gdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IuIERvZXMgdGhlIGludHJvZHVjdGlvbiBvZiBga21zYW5fYWxsb2NfcGFnZSgpYCBpdHNlbGYgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBObywgYmVjYXVzZSBpdCdzIHNpbXBseSBob29raW5nIGludG8gdGhlIEtNU0FOIHJ1bnRpbWUgYW5kIHRyYWNpbmcuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIHBhdGNoICppdHNlbGYqIHdhcnJhbnQgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IElmIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBLTVNBTiB3aWxsIG5vdyBkZXRlY3QgYnVncyBpbiBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zIHVzaW5nIGBhbGxvY19wYWdlc19idWxrYC4uLiBidXQgdGhlICpjdXJyZW50KiBldmFsdWF0aW9uIGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGUgKnBhdGNoIHVuZGVyIHJldmlldyogY3JlYXRlcyBuZXcgcmlza3MuIFdoeSBpcyB0aGlzIHBhdGNoIGJlaW5nIHN1Ym1pdHRlZCB0byBzeXotY2x1c3Rlcj8gSXQncyBtb3N0IGxpa2VseSBiZWNhdXNlIGl0J3MgYSBrZXJuZWwgcGF0Y2ggdW5kZXIgcmV2aWV3IChvciBzeXpib3QgaXMgdGVzdGluZyBpdCkuXG5cbklmIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBhIG1lbW9yeSBzdWJzeXN0ZW0gcGF0Y2ggdGhhdCBob29rcyBga21zYW5fYWxsb2NfcGFnZSgpYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2MoKWAsIGRvZXMgaXQgaW50cm9kdWNlICpuZXcqIHJpc2tzPyBObyEgVmFyaWFibGVzIHVzZWQgYXMgaW5wdXQgYHBhZ2VgLCBgMGAsIGBnZnBgLCBhbmQgYGFjLm1pZ3JhdGV0eXBlYCBhcmUgYWxsIGluaXRpYWxpemVkIGVpdGhlciBhcyBsb2NhbCB2YXJpYWJsZXMgb3IgYXJlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIFRoZSBsb2NhbCB2YXJpYWJsZSBgYWNgIGlzIGRlY2xhcmVkIGFzIGFuIGBhbGxvY19jb250ZXh0IGFjID0geyB9O2BcblxuXG4iLCJJbnB1dFRva2VucyI6NzU1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjA6MjUuODU3MDQxOTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTYwOlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG41MTYxOlxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuNTE2MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuNTE2MzpcXHR7XFxuNTE2NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MTY1OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjUxNjY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNTE2NzpcXHRcXHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xcbjUxNjg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XFxuNTE2OTpcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcXG41MTcwOlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcXG41MTcxOlxcdFxcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0LypcXG41MTc0OlxcdFxcdCAqIFNraXAgcG9wdWxhdGVkIGFycmF5IGVsZW1lbnRzIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZXMgbmVlZFxcbjUxNzU6XFx0XFx0ICogdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBkaXNhYmxpbmcgSVJRcy5cXG41MTc2OlxcdFxcdCAqL1xcbjUxNzc6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSlcXG41MTc4OlxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUxNzk6XFx0XFxuNTE4MDpcXHRcXHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXFxuNTE4MTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gMCkpXFxuNTE4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXFxuNTE4NTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcbjUxODg6XFx0XFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xcbjUxODk6XFx0XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgKGdmcCBcXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxcbjUxOTA6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5MTpcXHRcXG41MTkyOlxcdFxcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cXG41MTkzOlxcdFxcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxcbjUxOTQ6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5NTpcXHRcXG41MTk2OlxcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbjUxOTc6XFx0XFx0LypcXG41MTk4OlxcdFxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxuNTE5OTpcXHRcXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuNTIwMDpcXHRcXHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXFxuNTIwMTpcXHRcXHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCdsbCBoYXZlXFxuNTIwMjpcXHRcXHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxcbjUyMDM6XFx0XFx0ICovXFxuNTIwNDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbjUyMDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIwNjpcXHQjZW5kaWZcXG41MjA3OlxcdFxcbjUyMDg6XFx0XFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cXG41MjA5OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyMDoyNS44NTczMjgxN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTk5NjU3NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFN1YnNldCoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4gYSBiaXQgZGVlcGVyLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRhdGEgYXJvdW5kIGxpbmVzIDUyMTAgdG8gNTI1MC4gTXkgaW5pdGlhbCBzY2FuIGRpZG4ndCByZXZlYWwgYW55dGhpbmcgb2J2aW91c2x5IGFtaXNzLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aG9zZSBzdWJ0bGUgYW5vbWFsaWVzIG9mdGVuIGhpZGUgaW4gdGhlIGltbWVkaWF0ZSB2aWNpbml0eSBvZiBzb21ldGhpbmcgbW9yZSBzaWduaWZpY2FudC4gSXQncyBhIGZvY3VzZWQgZXhhbWluYXRpb247IHBlcmhhcHMgdGhlcmUncyBhIGNsdXN0ZXJpbmcgZWZmZWN0LCBhIHNwZWNpZmljIHBhdHRlcm4gaW4gdGhvc2UgbGluZXMgdGhhdCBuZWVkcyB1bnBhY2tpbmcuIEnigJlsbCBiZSBsb29raW5nIGZvciBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGN1cnJlbnQgbW9kZWwgcmVzdWx0cyB3aGVuIGNvbXBhcmVkIHdpdGggdGhlIGV4cGVjdGVkIG91dGNvbWVzLCBvciBwZXJoYXBzIGNvcnJlbGF0aW9ucyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBhcHBhcmVudC4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgdGhlIGRhdGFzZXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyMDoyNy40NTY5ODgyMDRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjEwOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMTpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEyOlxcdFxcbjUyMTM6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE0OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE1OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTc6XFx0XFxuNTIxODpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMTk6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMTpcXHRcXHRcXHR9XFxuNTIyMjpcXHRcXG41MjIzOlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI0OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI1OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjY6XFx0XFx0XFx0fVxcbjUyMjc6XFx0XFxuNTIyODpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMjk6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzA6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMxOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzI6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG41MjM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyMzU6XFx0XFx0XFx0fVxcbjUyMzY6XFx0XFxuNTIzNzpcXHRcXHRcXHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcXG41MjM4OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfdGhpc196b25lO1xcbjUyMzk6XFx0XFxuNTI0MDpcXHRcXHRcXHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cXG41MjQxOlxcdFxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG41MjQyOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxcbjUyNDM6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuNTI0NDpcXHRcXHRcXHR9XFxuNTI0NTpcXHRcXHR9XFxuNTI0NjpcXHRcXG41MjQ3OlxcdFxcdC8qXFxuNTI0ODpcXHRcXHQgKiBJZiB0aGVyZSBhcmUgbm8gYWxsb3dlZCBsb2NhbCB6b25lcyB0aGF0IG1lZXRzIHRoZSB3YXRlcm1hcmtzIHRoZW5cXG41MjQ5OlxcdFxcdCAqIHRyeSB0byBhbGxvY2F0ZSBhIHNpbmdsZSBwYWdlIGFuZCByZWNsYWltIGlmIG5lY2Vzc2FyeS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjA6MjcuNDU3MjYyNjc0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3NjkyOTQ0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIGFkZGluZyBzb21lIHRyYWNpbmcgYW5kIGEgS01TQU4gaG9vayBjYWxsIHdpdGhpbiB0aGUgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYnVsayBwYWdlIGFsbG9jYXRvci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBjYWxscyBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIHBhZ2VzIGFyZSBiZWluZyBwdWxsZWQgZnJvbSB0aGUgcGVyLWNwdSBsaXN0LCBgcGNwX2xpc3RgLiBUaGUgZnVuY3Rpb24gaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIHNvIEknbSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gRG9lcyB0aGlzIHBhdGNoIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXM/IE5vLCBpdCdzIG5vdCBhY3R1YWxseSAqYWxsb2NhdGluZyogbmV3IHN0cnVjdHVyZXMuIEl0J3MgaG9va2luZyBpbnRvIHRoZSBleGlzdGluZyBhbGxvY2F0aW9uIHByb2Nlc3MuIERvZXMgaXQgcGFzcyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8gTm9wZSwgdGhpcyBzZWVtcyBpbnRlcm5hbCB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIERvZXMgaXQgY3JlYXRlIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3QgYWNjb3JkaW5nIHRvIG15IHF1aWNrIGFzc2Vzc21lbnQuIEFuZCBpcyBpdCBtb2RpZnlpbmcgY29tcGxleCBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCAqY291bGQqIGNyZWF0ZSBhIHJpc2s/IE5vLCBkb2Vzbid0IHNlZW0gdG8gYmUgdG91Y2hpbmcgdGhvc2UgYXNwZWN0cyBhdCBhbGwuXG5cbkJhc2VkIG9uIHRoaXMgcXVpY2sgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGUgdXN1YWwgc2FuaXRpemVycyBhbmQgS0FTQU4sIG9yIHN0YW5kYXJkIHRlc3RpbmcsIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMuIFRoZXJlIGFyZSBubyBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBzaW1wbHkgaW5zdHJ1bWVudGF0aW9uLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbk5vdywgbGV0J3MgY29uc3RydWN0IHRoZSBgS01TQU5SZWFzb25pbmdgIGJsb2NrLCB0byBwcm92aWRlIGEgY29uY2lzZSBhbmQgYWNjdXJhdGUgZXhwbGFuYXRpb246XG5cbiogICAqKkRlc2NyaXB0aW9uOioqIFRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb24gaXMgYWRkaW5nIHRoZSBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCB0cmFjZXBvaW50IGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIHRvIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yIGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZW4gcHVsbGluZyBwYWdlcyBmcm9tIHRoZSBwZXItY3B1IHBhZ2UgbGlzdCAoYHBjcF9saXN0YCkuXG4qICAgKipDb250cmFzdCBLQVNBTiB2cy4gS01TQU46KiogVGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vciBkb2VzIGl0IGFsbG93IGZvciB0aGUgcGFzc2luZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYW5kIHRoZXJlIGFyZSBubyBidWZmZXIgYm91bmRzIGFsdGVyYXRpb25zLiBUaGUgcGF0Y2ggKmFkZHMqIGEgS01TQU4gdHJhY2tpbmcgaG9vayBhbmQgYSB0cmFjZXBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuXG4qICAgKipDb25jbHVzaW9uOioqIFRoZXJlIGFyZSBubyBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuIEhlbmNlLCBgTmVlZHNLTVNBTjogZmFsc2VgLlxuXG5UaGF0J3MgbXkgY29tcGxldGUgYXNzZXNzbWVudC4gSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTE5LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjIwOjM3LjIyNjU2MTA0N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jKClgIGFuZCBga21zYW5fYWxsb2NfcGFnZSgpYCBob29rIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3QuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9sZW5ndGhzLiBBbGwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGUgbmV3IGNhbGxzIChgcGFnZWAsIGAwYCwgYGdmcGAsIGBhYy5taWdyYXRldHlwZWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWsgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvYygpYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2UoKWAgaG9vayBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LlxcblxcblRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy4gQWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gdGhlIG5ldyBjYWxscyAoYHBhZ2VgLCBgMGAsIGBnZnBgLCBgYWMubWlncmF0ZXR5cGVgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9jgq2[1] Phase: Succeeded StartedAt: 2026-09-08 07:20:49 +0000 UTC FinishedAt: 2026-09-08 07:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 07:20:49 +0000 UTC FinishedAt: 2026-09-08 07:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2] Phase: Succeeded StartedAt: 2026-09-08 07:20:49 +0000 UTC FinishedAt: 2026-09-08 11:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 07:20:49 +0000 UTC FinishedAt: 2026-09-08 11:04:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 07:20:49 +0000 UTC FinishedAt: 2026-09-08 07:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 07:20:49 +0000 UTC FinishedAt: 2026-09-08 07:20:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9jgq2/series-workflow9jgq2-convert-artifact-1287542150/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 07:20:59 +0000 UTC FinishedAt: 2026-09-08 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 07:20:59 +0000 UTC FinishedAt: 2026-09-08 07:37:36 +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:*8577f262-110a-4795-9247-17aa20a34a60,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-workflow9jgq2/series-workflow9jgq2-convert-artifact-1287542150/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": "c357be48-8fde-4248-9d02-657119c59064", "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-workflow9jgq2/series-workflow9jgq2-build-action-2365561116/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 07:20:59 +0000 UTC FinishedAt: 2026-09-08 07:37:26 +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:*8577f262-110a-4795-9247-17aa20a34a60,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-workflow9jgq2/series-workflow9jgq2-convert-artifact-1287542150/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": "c357be48-8fde-4248-9d02-657119c59064", "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-workflow9jgq2/series-workflow9jgq2-build-action-2365561116/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 07:37:36 +0000 UTC FinishedAt: 2026-09-08 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 07:37:36 +0000 UTC FinishedAt: 2026-09-08 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 07:37:36 +0000 UTC FinishedAt: 2026-09-08 07:37:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 07:37:36 +0000 UTC FinishedAt: 2026-09-08 07:37:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9jgq2/series-workflow9jgq2-convert-artifact-1537448665/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 07:37:46 +0000 UTC FinishedAt: 2026-09-08 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 07:37:46 +0000 UTC FinishedAt: 2026-09-08 07:39:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c357be48-8fde-4248-9d02-657119c59064,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-workflow9jgq2/series-workflow9jgq2-build-action-2365561116/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-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 07:39:42 +0000 UTC FinishedAt: 2026-09-08 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 07:39:42 +0000 UTC FinishedAt: 2026-09-08 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 07:39:42 +0000 UTC FinishedAt: 2026-09-08 07:56:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 07:39:42 +0000 UTC FinishedAt: 2026-09-08 07:56:22 +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:*8577f262-110a-4795-9247-17aa20a34a60,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-workflow9jgq2/series-workflow9jgq2-convert-artifact-1537448665/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": "901f8561-94e6-42cc-968a-6eb47e93f997", "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-workflow9jgq2/series-workflow9jgq2-build-action-3900358453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 07:39:42 +0000 UTC FinishedAt: 2026-09-08 07:56:12 +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:*8577f262-110a-4795-9247-17aa20a34a60,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-workflow9jgq2/series-workflow9jgq2-convert-artifact-1537448665/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": "901f8561-94e6-42cc-968a-6eb47e93f997", "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-workflow9jgq2/series-workflow9jgq2-build-action-3900358453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 07:56:22 +0000 UTC FinishedAt: 2026-09-08 07:56:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 07:56:22 +0000 UTC FinishedAt: 2026-09-08 07:56:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 07:56:22 +0000 UTC FinishedAt: 2026-09-08 07:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 07:56:22 +0000 UTC FinishedAt: 2026-09-08 07:58: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:*901f8561-94e6-42cc-968a-6eb47e93f997,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-workflow9jgq2/series-workflow9jgq2-build-action-3900358453/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-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 11:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 11:04:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},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:*c357be48-8fde-4248-9d02-657119c59064,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*901f8561-94e6-42cc-968a-6eb47e93f997,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-workflow9jgq2/series-workflow9jgq2-build-action-2365561116/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-workflow9jgq2/series-workflow9jgq2-build-action-3900358453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 07:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 07:58:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},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-workflow9jgq2/series-workflow9jgq2-convert-artifact-3039257038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 07:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 07:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 07:58:44 +0000 UTC FinishedAt: 2026-09-08 07:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 07:59:04 +0000 UTC FinishedAt: 2026-09-08 11:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9jgq2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"349e46dc-3a6f-4ac8-bfd0-2154f8e25c41","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 07:59:04 +0000 UTC FinishedAt: 2026-09-08 11:04:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c357be48-8fde-4248-9d02-657119c59064,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*901f8561-94e6-42cc-968a-6eb47e93f997,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-workflow9jgq2/series-workflow9jgq2-build-action-2365561116/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-workflow9jgq2/series-workflow9jgq2-build-action-3900358453/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-workflow9jgq2/series-workflow9jgq2-convert-artifact-3039257038/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,}