Name: series-workflowf545m Phase: Succeeded StartedAt: 2026-09-02 07:45:57 +0000 UTC FinishedAt: 2026-09-02 11:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[0] Phase: Succeeded StartedAt: 2026-09-02 07:45:57 +0000 UTC FinishedAt: 2026-09-02 08:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 07:45:57 +0000 UTC FinishedAt: 2026-09-02 08:05:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "fa029dd5-e76d-4745-a062-e0d26e2a9239" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_lwt_seg6_action", "input_action_end_bpf", "seg6_bpf_has_valid_srh" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgbWFudWFsIFNSSCBsb29rdXBzIHdpdGggYHNlZzZfZ2V0X3NyaCgpYCAod2hpY2ggcGVyZm9ybXMgcHJvcGVyIGBwc2tiX21heV9wdWxsYCBhbmQgdmFsaWRhdGVzIHRoZSBTUkgpLCBlbnN1cmVzIEJQRiBwYWNrZXQgZGF0YSBwb2ludGVycyAoYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgKSBhcmUgcmVjYWxjdWxhdGVkIHdoZW4gc2tiIGxpbmVhciBidWZmZXJzIG1heSBiZSByZWFsbG9jYXRlZCBkdXJpbmcgaGVhZGVyIHB1bGxzLCBhbmQgYWRkcyBtaXNzaW5nIGJvdW5kcyB2YWxpZGF0aW9uIChgcHNrYl9tYXlfcHVsbGApIGJlZm9yZSBwdWxsaW5nIElQdjYgaGVhZGVycy5cblxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXG5cblRoZSBwYXRjaCBkb2VzIG5vdDpcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cbjIuIEV4cG9zZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLlxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgU1JIIHN0YXRlIGhhbmRsaW5nIGFuZCBza2IgbGluZWFyIGJ1ZmZlciB2YWxpZGF0aW9uIChwc2tiX21heV9wdWxsIGluc3RlYWQgb2YgcHNrYl9wdWxsKSBpbiB0aGUgU1J2NiBCUEYgaGVscGVyIGJwZl9sd3Rfc2VnNl9hY3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgYW5kIEJQRiBwYWNrZXQgaGFuZGxpbmcgcGF0aHMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3Yzg4NjBlMzMyMzRiYzY4ZDkxZTVlMmEyM2ZmY2M1MTA4NzRjN2VkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzo0Nzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi4xZGQzYTY4NWQxYjg5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzAxOCwxNSAmIzQzOzcwMTgsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbiYjNDM7XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKSB7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc3Job2ZmKTtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cdTAwM2VzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuLVx0fVxuJiM0MztcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuJiM0MztcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiYjNDM7XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuJiM0MztcdGlmICghc3JoKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbiYjNDM7XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuIH1cbiBcbiBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbkBAIC03MDU5LDE1ICYjNDM7NzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcbiBcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLVx0XHRpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpXG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcbiYjNDM7XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4mIzQzO1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcbiBcbiBcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XG4gXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXG4tXHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxuQEAgLTcwNzUsOCAmIzQzOzcwNzksNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuJiM0MztcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxuQEAgLTcwODQsOCAmIzQzOzcwODcsNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsXG4gXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tXHRcdGlmICghZXJyKVxuLVx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4mIzQzO1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFNSSCBzdGF0ZSBoYW5kbGluZyBhbmQgc2tiIGxpbmVhciBidWZmZXIgdmFsaWRhdGlvbiAocHNrYl9tYXlfcHVsbCBpbnN0ZWFkIG9mIHBza2JfcHVsbCkgaW4gdGhlIFNSdjYgQlBGIGhlbHBlciBicGZfbHd0X3NlZzZfYWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGFuZCBCUEYgcGFja2V0IGhhbmRsaW5nIHBhdGhzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M4ODYwZTMzMjM0YmM2OGQ5MWU1ZTJhMjNmZmNjNTEwODc0YzdlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDc6NDc6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjFkZDNhNjg1ZDFiODkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDE4LDE1ICYjNDM7NzAxOCwxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwotCWludCBzcmhvZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgJmx0OyAwKSB7Ci0JCXNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTDsKLQl9IGVsc2UgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNyaG9mZik7Ci0JCXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoX3N0YXRlLSZndDtzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwotCQlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKLQl9CiYjNDM7CXNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApOwomIzQzOwlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7c3JoID0gc3JoOwomIzQzOwlpZiAoIXNyaCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3JoX3N0YXRlLSZndDtoZHJsZW4gPSBzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwomIzQzOwlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKIH0KIAogQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC03MDU5LDE1ICYjNDM7NzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYiwKIAogCQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpICZsdDsgMCkKIAkJCXJldHVybiAtRUJBRE1TRzsKLQkJaWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKQomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7CiYjNDM7CQkJc3JoX3N0YXRlLSZndDtzcmggPSBOVUxMOwomIzQzOwkJCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCX0KJiM0MzsJCV9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpOwogCiAJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAotCQlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiAJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAJCXJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6CkBAIC03MDc1LDggJiM0Mzs3MDc5LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKLQkJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiYjNDM7CQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6CkBAIC03MDg0LDggJiM0Mzs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQotCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKJiM0MzsJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAKIAkJcmV0dXJuIGVycjsKIAlkZWZhdWx0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGlkZW50aWZpZWQ6IGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIC4uLilgIOKAkyB0aGF0IGBsd3Rfc2VnNl9hY3Rpb25gIGNhbGwgcmFpc2VzIG15IGV5ZWJyb3dzIGEgYml0OyBpdCBsaWtlbHkgdG91Y2hlcyBsb3ctbGV2ZWwgSVB2NiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBvciBJUHY2IExpZ2h0d2VpZ2h0IFR1bm5lbGluZy4KCk15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJJiMzOTtsbCByZWFjaCBmb3IgZWl0aGVyIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9mIGBuZXQvY29yZS9maWx0ZXIuY2Agb3IsIHByb2JhYmx5IHF1aWNrZXIgYW5kIG1vcmUgZWZmaWNpZW50IGZvciB0aGlzLCBJIHdpbGwgdXNlIGBncmVwcGVyYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgb3B0aW9ucyB0b28g4oCTIGVzcGVjaWFsbHkgdGhvc2UgdG91Y2hpbmcgSVB2NiwgU0VHNi9TUnY2LCBhbmQsIGltcG9ydGFudGx5LCBCUEYgaGVscGVycy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuCgpUaGVuIEkmIzM5O2xsIGZvY3VzIHRoZSBgZ3JlcHBlcmAgcXVlcmllcy4gSSYjMzk7bGwgZHJpbGwgZG93biBvbiBlaXRoZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIG9yIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGlzIHdpbGwgcXVpY2tseSByZXZlYWwgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHN0YXRlcyBhcmUgaW52b2x2ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGhhbmRsZSBvbiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9sd3Rfc2VnNl9hY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz03MDE3PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAzMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzM6QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MDM0LVx0ICAgdTMyLCBhY3Rpb24sIHZvaWQgKiwgcGFyYW0sIHUzMiwgcGFyYW1fbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwOTctXG5uZXQvY29yZS9maWx0ZXIuYzo3MDk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwOTk6XHQuZnVuY1x0XHQ9IGJwZl9sd3Rfc2VnNl9hY3Rpb24sXG5uZXQvY29yZS9maWx0ZXIuYy03MTAwLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDc9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTMtXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTQ6XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtOTA1NS1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBhbmQgU1J2NiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgYXJlIGhhbmRsZWQgd2l0aGluIEJQRi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIEtjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHRoZWlyIGluY2x1c2lvbiBvciBhY3RpdmF0aW9uLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJIHN1c3BlY3QgdGhhdCBzaW5jZSBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIHdpdGhpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC0tSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA3MDAwLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgcGFja2V0IHByb2Nlc3NpbmcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGFzcGVjdHMgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk5MDpcdFx0cHRyID0gc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0O1xuNjk5MTpcdFx0aWYgKHB0ciBcdTAwM2U9IHNyaF90bHZzIFx1MDAyNlx1MDAyNiBwdHIgJiM0MzsgbGVuIFx1MDAzYz0gc3JoX2VuZClcbjY5OTI6XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gZmFsc2U7XG42OTkzOlx0XHRlbHNlIGlmIChwdHIgXHUwMDNjICh2b2lkICopXHUwMDI2c3JoLVx1MDAzZWZsYWdzIHx8XG42OTk0Olx0XHRcdCBwdHIgJiM0MzsgbGVuIFx1MDAzZSAodm9pZCAqKVx1MDAyNnNyaC1cdTAwM2VzZWdtZW50cylcbjY5OTU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG42OTk2Olx0XG42OTk3Olx0XHRpZiAodW5saWtlbHkoYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbikpKVxuNjk5ODpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjY5OTk6XHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuNzAwMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwMDE6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MDAyOlx0XG43MDAzOlx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xuNzAwNDpcdFx0cmV0dXJuIDA7XG43MDA1Olx0fVxuNzAwNjpcdFxuNzAwNzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuNzAwODpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXG43MDA5Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG43MDEwOlx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG43MDExOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNzAxMjpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG43MDEzOlx0XHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjcwMTQ6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG43MDE1Olx0fTtcbjcwMTY6XHRcbjcwMTc6XHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzAxODpcdHtcbjcwMTk6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG43MDIwOlx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjcwMjE6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuNzAyMjpcdFxuNzAyMzpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG43MDI0Olx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG43MDI1Olx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuNzAyNjpcdFx0aWYgKCFzcmgpXG43MDI3Olx0XHRcdHJldHVybjtcbjcwMjg6XHRcbjcwMjk6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuNzAzMDpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjcwMzE6XHR9XG43MDMyOlx0XG43MDMzOlx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG43MDM0Olx0XHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG43MDM1Olx0e1xuNzAzNjpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMzc6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAzODpcdFx0aW50IGhkcm9mZiA9IDA7XG43MDM5Olx0XHRpbnQgZXJyO1xuNzA0MDpcdFxuNzA0MTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmhfc3RhdGUtXHUwMDNlYmhfbG9jayk7XG43MDQyOlx0XHRzd2l0Y2ggKGFjdGlvbikge1xuNzA0MzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcbjcwNDQ6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDQ1Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA0NjpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxuNzA0NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA0ODpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIChzdHJ1Y3QgaW42X2FkZHIgKilwYXJhbSwgMCk7XG43MDQ5Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCBjb25zdHJ1Y3QuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNrIGRvd24gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUsIGl0cyBzY29wZSwgYW5kIGhvdyBpdCYjMzk7cyBhY3R1YWxseSB1c2VkLiBJcyBpdCBhIGdsb2JhbCB2YXJpYWJsZT8gQSBzdHJ1Y3Q/IEEgbWFjcm8/IEkgaGF2ZSB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyB0aGluZy4KCkJleW9uZCBqdXN0IHRoZSBkZWZpbml0aW9uLCBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgYW55IGAjaWZkZWZgIHN0YXRlbWVudHMgdGhhdCBtaWdodCBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhpcyB2YXJpYWJsZSBiYXNlZCBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvciBrZXJuZWwgZmVhdHVyZXMuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBhY3RpdmUuIERpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGVuYWJsZWQgY2FuIGhhdmUgYSBodWdlIGltcGFjdCBvbiB0aGlzIHNvcnQgb2YgY29kZS4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGlzIGNyaXRpY2FsIHRvIGFjdHVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njk3ND1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTc3LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5Nzg6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzktXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTktXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzAyMDpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzAyMS1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNi1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDM3Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDM4LVx0aW50IGhkcm9mZiA9IDA7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzEwOD1CUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTEtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzExMjpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzExMy1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM1Nj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzg2OkRFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODctXHQuYmhfbG9ja1x0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTItXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzOTM6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk0LVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQzMy1cdCAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MzQ6XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MzU6XHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQzNi1cdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTctXHRcdGdvdG8gZHJvcDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4Olx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTktXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjUtZHJvcDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY2Olx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjctXHRrZnJlZV9za2Ioc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjUzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHNlZzZfbG9jYWwuY2AgbW9kdWxlIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIGBJUFY2X1NFRzZfTFdUVU5ORUxgIG9yIGBJUFY2X1NFRzZfQlBGYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGVuLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGUuIExldCYjMzk7cyBzZWUuLi5JJiMzOTtsbCBzZWFyY2ggZm9yIGBzZWc2X2xvY2FsLm9gIHdpdGhpbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIHNob3cgbWUgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJiMzOTttIHN1cmUgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkmIzM5O2QgbGlrZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuLS1cbm5ldC9pcHY2L3NlZzYuYz01MDg9aW50IF9faW5pdCBzZWc2X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtNTIzLVxubmV0L2lwdjYvc2VnNi5jOjUyNDpcdGVyciA9IHNlZzZfbG9jYWxfaW5pdCgpO1xubmV0L2lwdjYvc2VnNi5jLTUyNS1cdGlmIChlcnIpXG4tLVxubmV0L2lwdjYvc2VnNi5jPTU0MT12b2lkIHNlZzZfZXhpdCh2b2lkKVxubmV0L2lwdjYvc2VnNi5jLTU0Mi17XG5uZXQvaXB2Ni9zZWc2LmM6NTQzOlx0c2VnNl9sb2NhbF9leGl0KCk7XG5uZXQvaXB2Ni9zZWc2LmMtNTQ0LVx0c2VnNl9pcHR1bm5lbF9leGl0KCk7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZzZfbG9jYWwuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTMwLSNlbmRpZlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjMxOiNpbmNsdWRlIFx1MDAzY25ldC9zZWc2X2xvY2FsLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTM3LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjM4OnN0cnVjdCBzZWc2X2xvY2FsX2x3dDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MC0vKiBjYWxsYmFja3MgdXNlZCBmb3IgY3VzdG9taXppbmcgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBhIGJlaGF2aW9yICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDE6c3RydWN0IHNlZzZfbG9jYWxfbHd0dW5uZWxfb3BzIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MjpcdGludCAoKmJ1aWxkX3N0YXRlKShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00My1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjQ0Olx0dm9pZCAoKmRlc3Ryb3lfc3RhdGUpKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDUtfTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDc9c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02NC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo2NTpcdGludCAoKmlucHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY2LVx0aW50IHN0YXRpY19oZWFkcm9vbTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo2ODpcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyBzbHd0X29wcztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02OS19O1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDI9c3RydWN0IHNlZzZfZW5kX2R0X2luZm8ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU4OnN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OS1cdHU2NF9zdGF0c190IHBhY2tldHM7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2OS0gKiB2YWx1ZXMgYWZ0ZXIgdGhlIHBlci1DUFUgY291bnRlciBldmFsdWF0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZC5cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzA6ICogRmluYWxseSwgZWFjaCBjb3VudGVyIHZhbHVlIChpbiBzZWc2X2xvY2FsX2NvdW50ZXJzKSBpcyBzdG9yZWQgaW4gdGhlXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcxLSAqIGNvcnJlc3BvbmRpbmcgbmV0bGluayBhdHRyaWJ1dGUgYW5kIHNlbnQgdG8gdXNlciBzcGFjZS5cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc0LSAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3NTpzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc2LVx0X191NjQgcGFja2V0cztcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgwLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTojZGVmaW5lIHNlZzZfbG9jYWxfYWxsb2NfcGNwdV9jb3VudGVycyhfX2dmcClcdFx0XHRcdFxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTgyOlx0X19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzLFx0XFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODMtXHRcdFx0XHQgICgoX19nZnApIHwgX19HRlBfWkVSTykpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Ni1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODc6c3RydWN0IHNlZzZfbG9jYWxfbHd0IHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODgtXHRpbnQgYWN0aW9uO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAxOlx0c3RydWN0IHBjcHVfc2VnNl9sb2NhbF9jb3VudGVycyBfX3BlcmNwdSAqcGNwdV9jb3VudGVycztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDItXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxMC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTE6c3RhdGljIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2VnNl9sb2NhbF9sd3R1bm5lbChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTIte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIxMzpcdHJldHVybiAoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICopbHd0LVx1MDAzZWRhdGE7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE0LX1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MzgxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozODI6XHRcdFx0XHQgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzgzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9Mzg5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzkwOlx0XHRcdFx0IHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOTEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MDYtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDA3OnN0YXRpYyBpbnQgZW5kX25leHRfY3NpZF9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MDgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz00MjE9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX3hfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDIyOlx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDIzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDI5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF94X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MzA6XHRcdFx0XHQgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDMxLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDQ3PXN0YXRpYyBpbnQgZW5kX3hfbmV4dF9jc2lkX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0NDg6XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDQ5LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDczPXN0YXRpYyBpbnQgc2VnNl9mbHZfc3VwcF9vcHNfYnlfYWN0aW9uKGludCBhY3Rpb24sIF9fdTMyICpmb3BzKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00OTMtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDk0OmVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00OTUtXHQvKiB0aGUgb3JkZXIgcmVhbGx5IG1hdHRlcnMhICovXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MDU6c3RhdGljIGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUxOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MTk6ZW51bSBzZWc2X2xvY2FsX2Zsdl9hY3Rpb24ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUyMC1cdFNFRzZfTE9DQUxfRkxWX0FDVF9VTlNQRUNcdD0gMCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NTkxPXN0YXRpYyBjb25zdCB1OCBmbHY4OTg2X2FjdF90YmxbRkxWODk4Nl9BQ1RfVEJMX1NJWkVdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTAtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NjExOnN0YXRpYyBlbnVtIHNlZzZfbG9jYWxfZmx2X2FjdGlvblxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjYxMjpzZWc2X2xvY2FsX2Zsdjg5ODZfYWN0X2xvb2t1cChlbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyBwaW5mbywgX191MzIgZmx2bWFzaylcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz02Mjg9c3RhdGljIGJvb2wgc2VnNl9wb3Bfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBzcmhvZmYpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc0MS0gKi9cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NDI6c3RhdGljIGludCBlbmRfZmx2ODk4Nl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDMte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc0NC1cdGNvbnN0IHN0cnVjdCBzZWc2X2ZsYXZvcnNfaW5mbyAqZmluZm8gPSBcdTAwMjZzbHd0LVx1MDAzZWZsdl9pbmZvO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc0NTpcdGVudW0gc2VnNl9sb2NhbF9mbHZfYWN0aW9uIGFjdGlvbjtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NDY6XHRlbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyBwaW5mbztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDctXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzY2LVx0ICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzY3Olx0YWN0aW9uID0gc2VnNl9sb2NhbF9mbHY4OTg2X2FjdF9sb29rdXAocGluZm8sIGZsdm1hc2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc2OC1cdHN3aXRjaCAoYWN0aW9uKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc5NS0vKiByZWd1bGFyIGVuZHBvaW50IGZ1bmN0aW9uICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Nzk2OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzk3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODE2LS8qIHJlZ3VsYXIgZW5kcG9pbnQsIGFuZCBmb3J3YXJkIHRvIHNwZWNpZmllZCBuZXh0aG9wICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODE3OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF94KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MTgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MjgtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODI5OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF90KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MzAte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz04NDk9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjg1MDpcdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04NTEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MDU9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4Nl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkwOS1cdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyID0gTlVMTDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5MTA6XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTExLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjkxMjpcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05MTMtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkyOT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTMwOlx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkzMS17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk1Nj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYwLVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MTpcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjItXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTY0LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2NTpcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjYtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4Mj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTgzOlx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk4NC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEwMDc9c3RhdGljIHN0cnVjdCBuZXQgKmZpYjZfY29uZmlnX2dldF9uZXQoY29uc3Qgc3RydWN0IGZpYjZfY29uZmlnICpmaWI2X2NmZylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAxMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMDE0OnN0YXRpYyBpbnQgX19zZWc2X2VuZF9kdF92cmZfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAxNS1cdFx0XHRcdCAgIHUxNiBmYW1pbHksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTEzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVuZF9kdF92cmZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExMzI6XHRcdFx0XHQgICAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCB1MTYgZmFtaWx5KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExMzMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTc3PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTc4Olx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExNzkte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjA5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMTA6c3RhdGljIGludCBzZWc2X2VuZF9kdDRfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTIxMS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyMTY9c3RhdGljIGVudW1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjE3OnNlZzZfZW5kX2R0X21vZGUgc2VnNl9lbmRfZHQ2X3BhcnNlX21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMTgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjMxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMzI6c3RhdGljIGVudW0gc2VnNl9lbmRfZHRfbW9kZSBzZWc2X2VuZF9kdDZfZ2V0X21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMzMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjM4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMzk6c3RhdGljIGludCBzZWc2X2VuZF9kdDZfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI0MC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyNTg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyNTk6XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2MC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDAtI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzMDE6c3RhdGljIGludCBzZWc2X2VuZF9kdDQ2X2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDItXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTMwNz1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzMDg6XHRcdFx0XHQgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDkte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzMwLS8qIHB1c2ggYW4gU1JIIG9uIHRvcCBvZiB0aGUgY3VycmVudCBvbmUgKi9cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzMxOnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTMzMi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzNTY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM1NzpcdFx0XHRcdCAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzNTgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDE1Olx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTYte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNTcxPXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyAqX19nZXRfYWN0aW9uX2Rlc2MoaW50IGFjdGlvbilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg2OnN0YXRpYyBib29sIHNlZzZfbHd0dW5uZWxfY291bnRlcnNfZW5hYmxlZChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ny17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU5MTpzdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5Mi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgZXJyKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTMte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1OTQ6XHRzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzICpwY291bnRlcnM7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5NS1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYwOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjA5OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTAtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxMy1cdHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpkZXNjO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTQ6XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxNS1cdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTg6XHRzbHd0ID0gc2VnNl9sb2NhbF9sd3R1bm5lbChvcmlnX2RzdC1cdTAwM2Vsd3RzdGF0ZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxOS1cdGRlc2MgPSBzbHd0LVx1MDAzZWRlc2M7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYyNjpcdHNlZzZfbG9jYWxfdXBkYXRlX2NvdW50ZXJzKHNsd3QsIGxlbiwgcmMpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MjctXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MzAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzMTpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMyLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0MC1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDE6XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjQzOlx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDQtfVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9wb2xpY3lbU0VHNl9MT0NBTF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cdFtTRUc2X0xPQ0FMX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY1OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjYwOnN0YXRpYyBpbnQgcGFyc2VfbmxhX3NyaChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjYxLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2ODQtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY4NTpzdGF0aWMgaW50IHB1dF9ubGFfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjg2LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcwMi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzAzOnN0YXRpYyBpbnQgY21wX25sYV9zcmgoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcwNC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MTItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTcxMzpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJfc3JoKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE0LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcxNy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzE4OnN0YXRpYyBpbnQgcGFyc2VfbmxhX3RhYmxlKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MTktXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzI1LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3MjY6c3RhdGljIGludCBwdXRfbmxhX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzI3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTczMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzM0OnN0YXRpYyBpbnQgY21wX25sYV90YWJsZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzM1LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTc0Mj1zdGF0aWMgc3RydWN0XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc0MzpzZWc2X2VuZF9kdF9pbmZvICpzZWc2X3Bvc3NpYmxlX2VuZF9kdF9pbmZvKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzQ0LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTc1Mj1zdGF0aWMgaW50IHBhcnNlX25sYV92cmZ0YWJsZShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc1MzpcdFx0XHQgICAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc1NC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3NjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc2NjpzdGF0aWMgaW50IHB1dF9ubGFfdnJmdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3Njcte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzc4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3Nzk6c3RhdGljIGludCBjbXBfbmxhX3ZyZnRhYmxlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3ODAte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzg5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3OTA6c3RhdGljIGludCBwYXJzZV9ubGFfbmg0KHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3OTEtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc5OC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzk5OnN0YXRpYyBpbnQgcHV0X25sYV9uaDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MDAte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODExLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTI6c3RhdGljIGludCBjbXBfbmxhX25oNChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODEzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgxNi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODE3OnN0YXRpYyBpbnQgcGFyc2VfbmxhX25oNihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODE4LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTgyNjpzdGF0aWMgaW50IHB1dF9ubGFfbmg2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODI3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgzOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODM5OnN0YXRpYyBpbnQgY21wX25sYV9uaDYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg0MC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NDMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg0NDpzdGF0aWMgaW50IHBhcnNlX25sYV9paWYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg0NS1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODUxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4NTI6c3RhdGljIGludCBwdXRfbmxhX2lpZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1My17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NTktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg2MDpzdGF0aWMgaW50IGNtcF9ubGFfaWlmKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NjEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODY3LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4Njg6c3RhdGljIGludCBwYXJzZV9ubGFfb2lmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NjktXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg3NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODc2OnN0YXRpYyBpbnQgcHV0X25sYV9vaWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Nzcte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODgzLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4ODQ6c3RhdGljIGludCBjbXBfbmxhX29pZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODg1LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnBmX3Byb2dfcG9saWN5W1NFRzZfTE9DQUxfQlBGX1BST0dfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODk4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4OTk6c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MDAtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzMC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTMxOnN0YXRpYyBpbnQgcHV0X25sYV9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzIte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTUxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5NTI6c3RhdGljIGludCBjbXBfbmxhX2JwZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTUzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk2Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTYzOnN0YXRpYyB2b2lkIGRlc3Ryb3lfYXR0cl9icGYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjQte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xOTcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Rcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTcxOm5sYV9wb2xpY3kgc2VnNl9sb2NhbF9jb3VudGVyc19wb2xpY3lbU0VHNl9MT0NBTF9DTlRfTUFYICYjNDM7IDFdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NzItXHRbU0VHNl9MT0NBTF9DTlRfUEFDS0VUU11cdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTk3Nz1zdGF0aWMgaW50IHBhcnNlX25sYV9jb3VudGVycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk3ODpcdFx0XHQgICAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk3OS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk4MC17XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk4MTpcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgX19wZXJjcHUgKnBjb3VudGVycztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTgyLVx0c3RydWN0IG5sYXR0ciAqdGJbU0VHNl9MT0NBTF9DTlRfTUFYICYjNDM7IDFdO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTg2LVx0XHRcdFx0XHQgIGF0dHJzW1NFRzZfTE9DQUxfQ09VTlRFUlNdLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5ODc6XHRcdFx0XHRcdCAgc2VnNl9sb2NhbF9jb3VudGVyc19wb2xpY3ksIE5VTEwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5ODgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTk4LVx0LyogY291bnRlcnMgYXJlIGFsd2F5cyB6ZXJvIGluaXRpYWxpemVkICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk5OTpcdHBjb3VudGVycyA9IHNlZzZfbG9jYWxfYWxsb2NfcGNwdV9jb3VudGVycyhHRlBfS0VSTkVMKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDAwLVx0aWYgKCFwY291bnRlcnMpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMDctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAwODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfZmlsbF9ubGFfY291bnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDA5Olx0XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyAqY291bnRlcnMpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAxMC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAyNjpzdGF0aWMgaW50IHB1dF9ubGFfY291bnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwMjg6XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyBjb3VudGVycyA9IHsgMCwgMCwgMCB9O1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjktXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDM2LVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDM3Olx0XHRzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzICpwY291bnRlcnM7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAzOC1cdFx0dTY0IHBhY2tldHMsIGJ5dGVzLCBlcnJvcnM7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNTUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA1NjpcdHJjID0gc2VnNl9sb2NhbF9maWxsX25sYV9jb3VudGVycyhza2IsIFx1MDAyNmNvdW50ZXJzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDU3LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNjQtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA2NTpzdGF0aWMgaW50IGNtcF9ubGFfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA2Ni17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNzEtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA3MjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNzMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMDc3PXN0YXRpYyBjb25zdFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwNzg6c3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9mbGF2b3JzX3BvbGljeVtTRUc2X0xPQ0FMX0ZMVl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA3OS1cdFtTRUc2X0xPQ0FMX0ZMVl9PUEVSQVRJT05dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxMTA9c3RhdGljIGludCBzZWc2X3BhcnNlX25sYV9uZXh0X2NzaWRfY2ZnKHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjEzNi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTM3OnN0YXRpYyBpbnQgcGFyc2VfbmxhX2ZsYXZvcnMoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjEzOC1cdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE0Ny1cdFx0XHRcdFx0IGF0dHJzW1NFRzZfTE9DQUxfRkxBVk9SU10sXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjE0ODpcdFx0XHRcdFx0IHNlZzZfbG9jYWxfZmxhdm9yc19wb2xpY3ksIE5VTEwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxNDktXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxODA9c3RhdGljIGludCBzZWc2X2ZpbGxfbmxhX25leHRfY3NpZF9jZmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE5Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTkzOnN0YXRpYyBpbnQgcHV0X25sYV9mbGF2b3JzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTk0LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjIyMj1zdGF0aWMgaW50IHNlZzZfY21wX25sYV9uZXh0X2NzaWRfY2ZnKHN0cnVjdCBzZWc2X2ZsYXZvcnNfaW5mbyAqZmluZm9fYSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIzMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjM0OnN0YXRpYyBpbnQgY21wX25sYV9mbGF2b3JzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMzUte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjQ5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNTA6c3RhdGljIGludCBlbmNhcF9zaXplX2ZsYXZvcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNTEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMjY1PXN0cnVjdCBzZWc2X2FjdGlvbl9wYXJhbSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI2NjpcdGludCAoKnBhcnNlKShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjY3LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI2ODpcdGludCAoKnB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjY5Olx0aW50ICgqY21wKShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYik7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI3MC1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI3NC1cdCAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNzU6XHR2b2lkICgqZGVzdHJveSkoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjc2LX07XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMjc9c3RhdGljIHZvaWQgX19kZXN0cm95X2F0dHJzKHVuc2lnbmVkIGxvbmcgcGFyc2VkX2F0dHJzLCBpbnQgbWF4X3BhcnNlZCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMzI4Olx0XHRcdCAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMyOS17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIzNTUtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM1NjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzU3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjM2Mz1zdGF0aWMgaW50IHBhcnNlX25sYV9vcHRpb25hbF9hdHRycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM2NDpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM2NS1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MDU9c3RhdGljIGludFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MDY6c2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDA3LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDA5LVx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2MgPSBzbHd0LVx1MDAzZWRlc2M7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQxMDpcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyAqb3BzO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MTEtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjEtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQyMjpzdGF0aWMgdm9pZCBzZWc2X2xvY2FsX2x3dHVubmVsX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjMte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjQtXHRzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyAqZGVzYyA9IHNsd3QtXHUwMDNlZGVzYztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDI1Olx0c3RydWN0IHNlZzZfbG9jYWxfbHd0dW5uZWxfb3BzICpvcHM7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyNi1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQzMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDM0OnN0YXRpYyBpbnQgcGFyc2VfbmxhX2FjdGlvbihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDM1LVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYsIHNwZWNpZmljYWxseSB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsIChgSVBWNl9TRUc2X0xXVFVOTkVMYCkgYW5kIHRoZSBCUEYgaW50ZWdyYXRpb24gKGBJUFY2X1NFRzZfQlBGYCkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudHMgdGhlcmUsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBkZWZhdWx0IHZhbHVlcy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB3aGF0JiMzOTtzIGNvbnRyb2xsYWJsZSBhdCBjb21waWxlIHRpbWUgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzIHdpbGwgbGV0IG1lIHBsYW4gYW5kIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9TRUc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZToKCioqSVB2NiBDb25maWd1cmF0aW9uIC0gRGl2aW5nIEluKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIElQdjYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAyODAgdG8gMzIwIGluIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGZlYXR1cmVzIHJlbGF0ZWQgdG8gSVB2NiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgdGhlIGVuYWJsaW5nIGZsYWdzIGZvciBjcml0aWNhbCBmdW5jdGlvbmFsaXRpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmUgb2YgaG93IGRpZmZlcmVudCBvcHRpb25zIGFyZSBuZXN0ZWQgb3IgZGVwZW5kZW50LCBwcm9iYWJseSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGltcG9ydGFudCBmZWF0dXJlcyBmb3IgaW5jbHVzaW9uIGluIGEga2VybmVsIGJ1aWxkLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcbiAyODY6XHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG4gMjg3Olx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMjg4Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyODk6XHRcdHNlbGVjdCBMV1RVTk5FTFxuIDI5MDpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDI5MTpcdFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXG4gMjkyOlx0XHRoZWxwXG4gMjkzOlx0XHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxuIDI5NDpcdFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAyOTU6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXG4gMjk2Olx0XHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxuIDI5NzpcdFxuIDI5ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI5OTpcdFxuIDMwMDpcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xuIDMwMTpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4gMzAyOlx0XHRkZXBlbmRzIG9uIElQVjZcbiAzMDM6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAzMDQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDMwNTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAzMDY6XHRcdGhlbHBcbiAzMDc6XHRcdCAgU3VwcG9ydCBmb3IgSE1BQyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uXG4gMzA4Olx0XHQgIG9mIFNSLWVuYWJsZWQgcGFja2V0cy5cbiAzMDk6XHRcbiAzMTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAzMTE6XHRcbiAzMTI6XHRjb25maWcgSVBWNl9TRUc2X0JQRlxuIDMxMzpcdFx0ZGVmX2Jvb2wgeVxuIDMxNDpcdFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcbiAzMTU6XHRcdGRlcGVuZHMgb24gSVBWNiA9IHlcbiAzMTY6XHRcbiAzMTc6XHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbiAzMTg6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4gMzE5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIEJQRioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgc3ltYm9sIGlzIHVzZWQgZGlyZWN0bHksIG9yIGluZGlyZWN0bHkgdmlhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2Nrcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpdCBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIFNFRzYgQlBGLXJlbGF0ZWQgY29kZSwgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW5jbHVkZSBmaWxlcyBhcyB3ZWxsLiBPbmNlIEkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhbmQgY29kZSBibG9ja3MsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvbnRleHQuIFdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzIGNvbmZpZz8gSG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIFNFRzYgZnJhbWV3b3JrPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBCUEYgcHJvZ3JhbXMsIG9yIGhvb2tpbmcgaW50byBzcGVjaWZpYyBpbmZyYXN0cnVjdHVyZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHRoZSByZXN1bHRpbmcgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfU0VHNl9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njg2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzgtXG5uZXQvY29yZS9maWx0ZXIuYzo2ODc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjg4MC1zdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTExLX1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTI6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG5uZXQvY29yZS9maWx0ZXIuYy02OTEzLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjI9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTI1LVx0c3dpdGNoICh0eXBlKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2OTI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNy1cdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTcyLVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzQtQlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjYtfTtcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNjc6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG5uZXQvY29yZS9maWx0ZXIuYy03MTY4LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDc9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDktXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy05MDUxLVx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzg4LVx0XHQvKiBCUEZfUFJPR19UWVBFX0xXVF9TRUc2X0xPQ0FMIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYzozODk6XHRcdHsgXCYjMzQ7Q09ORklHX0lQVjZfU0VHNl9CUEZcJiMzNDssIH0sXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzkwLVx0XHQvKiBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIgYW5kIHJlbGF0ZWQgaGVscGVycyAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9NDg9Q09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo0OTpDT05GSUdfSVBWNl9TRUc2X0JQRj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTUwLUNPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUw9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ5NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgRmlsdGVyaW5nIExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIHBhY2tldCBmaWx0ZXJpbmcgYmVoYXZpb3IuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYW1pc3MgaW4gdGhlIGNvcmUgZmlsdGVyaW5nIGltcGxlbWVudGF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBsb2dpYyBpcyBsaWtlbHkgbmVzdGxlZCBzb21ld2hlcmUgYmV0d2VlbiBsaW5lcyA3MDE1IGFuZCA3MDkwLiBUaGF0IHJhbmdlIHVzdWFsbHkgZW5jb21wYXNzZXMgc29tZSBjcml0aWNhbCBmdW5jdGlvbiBjYWxscyBvciBjb25kaXRpb25hbCBzdHJ1Y3R1cmVzLCBnaXZlbiBteSBwYXN0IGV4cGVyaWVuY2UuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gdGhhdCBzZWN0aW9uIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMTU6XHR9O1xuNzAxNjpcdFxuNzAxNzpcdHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG43MDE4Olx0e1xuNzAxOTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMjA6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAyMTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG43MDIyOlx0XG43MDIzOlx0XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbjcwMjQ6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwMjU6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG43MDI2Olx0XHRpZiAoIXNyaClcbjcwMjc6XHRcdFx0cmV0dXJuO1xuNzAyODpcdFxuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG43MDMwOlx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuNzAzMTpcdH1cbjcwMzI6XHRcbjcwMzM6XHRCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbjcwMzQ6XHRcdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcbjcwMzU6XHR7XG43MDM2Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuNzAzNzpcdFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG43MDgxOlx0XHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG43MDgyOlx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDgzOlx0XG43MDg0Olx0XHRcdHJldHVybiBlcnI7XG43MDg1Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODY6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA4ODpcdFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuNzA4OTpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA5MDpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5MTpcdFxuNzA5MjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5MzpcdFx0ZGVmYXVsdDpcbjcwOTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgZnVuY3Rpb24sIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSBhIEJQRiBoZWxwZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYSBgQlBGX0NBTExfNGAgaGVscGVyIHRpZWQgdG8gdGhlIGBCUEZfRlVOQ19sd3Rfc2VnNl9hY3Rpb25gIEJQRiBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyBob3cgdGhpcyB0aGluZyAqZ2V0cyogaW52b2tlZC4gRnJvbSB3aGF0IEkgcmVjYWxsLCBpdCYjMzk7cyBlaXRoZXIgdHJpZ2dlcmVkIHdoZW4gYW4gbHd0dW5uZWwgU0VHNiBsb2NhbCBCUEYgcHJvZ3JhbSBpcyBydW5uaW5nIOKAkyBzbyB0aGF0JiMzOTtzIGEgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgcHJvZ3JhbSBpbiBhY3Rpb24g4oCTIG9yLCBwb3RlbnRpYWxseSwgZHVyaW5nIEJQRiB0ZXN0IHJ1bnMgb3IgdGhlIHJlZ3VsYXIgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBzZWc2X2xvY2FsLmNgIGZpbGU7IHRoZSBjb2RlIGFyb3VuZCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIHdpbGwgcHJvYmFibHkgcHJvdmlkZSB0aGUgYW5zd2VycyBJJiMzOTttIGxvb2tpbmcgZm9yIGFuZCBjbGFyaWZ5IHRoZSBpbnZvY2F0aW9uIHBhdGguIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZGVidWdnaW5nIHRoZSBzcGVjaWZpYyBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQxNDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQxNS1cdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3MT1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2NS1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTY2Olx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2JwZixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY3LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDoKCioqRGl2aW5nIGludG8gYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIHVucGFjayB0aGUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgQlBGIGhvb2ssIHByZXN1bWFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYgKFNSdjYpIGFuZCBsb2NhbCBTSUQgcHJvY2Vzc2luZywgZ2l2ZW4gdGhlIGZpbGUgcGF0aC4gTXkgaW5pdGlhbCBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIHdpdGhpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdyDigJMgaXMgaXQgYXQgdGhlIGluZ3Jlc3MsIGVncmVzcywgb3Igc29tZXdoZXJlIGluIHRoZSBtaWRkbGU/IFdoYXQgYXJlIGl0cyBpbnB1dHMg4oCTIGxpa2VseSB0aGUgc2tiLCBhbmQgc29tZSBjb250ZXh0IHN0cnVjdHVyZXMgbGlrZSB0aGUgZmxvdywgZGV2aWNlLCBhbmQgcG9zc2libHkgdGhlIFNSSD8gV2hhdCYjMzk7cyB0aGUgKmFjdGlvbiogaXQmIzM5O3MgdGFraW5nIGF0IHRoZSAmIzM0O2VuZCYjMzQ7PyBJcyBpdCByZWxhdGVkIHRvIHBvbGljeSBlbmZvcmNlbWVudCwgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgb3IgbWF5YmUgc29tZSBmb3JtIG9mIHJlc291cmNlIGFjY291bnRpbmc/IEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBmaW5hbCBhY3Rpb25zIG9mIHRoZSBTUnY2IHByb2Nlc3NpbmcuIEtub3dpbmcgQlBGLCB0aGUgcG9zc2liaWxpdGllcyBhcmUgdmFzdDogaXQgY291bGQgYmUgcmVkaXJlY3RpbmcsIGRyb3BwaW5nLCBvciBtYW5pcHVsYXRpbmcgcGFja2V0IGhlYWRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIGhlbHBlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGFwYXRoLiBUaW1lIHRvIHN0YXJ0IHJlYWRpbmcgdGhlIGNvZGUhIExldCYjMzk7cyBzZWUgaWYgdGhpcyBob29rIGlzIGludm9sdmVkIGluIHRoZSBlZ3Jlc3Mgb3IgaW5ncmVzcyBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTA6XHRcbjE0MTE6XHRcdHJldHVybiB0cnVlO1xuMTQxMjpcdH1cbjE0MTM6XHRcbjE0MTQ6XHRzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXG4xNDE1Olx0XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4xNDE2Olx0e1xuMTQxNzpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xuMTQxODpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4xNDE5Olx0XHRpbnQgcmV0O1xuMTQyMDpcdFxuMTQyMTpcdFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcbjE0MjI6XHRcdGlmICghc3JoKSB7XG4xNDIzOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTQyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcdGFkdmFuY2VfbmV4dHNlZyhzcmgsIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpO1xuMTQyNzpcdFxuMTQyODpcdFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXG4xNDI5Olx0XHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcbjE0MzA6XHRcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXG4xNDMxOlx0XHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXG4xNDMyOlx0XHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxuMTQzMzpcdFx0ICovXG4xNDM0Olx0XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQzNTpcdFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuMTQzNjpcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbjE0Mzc6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuMTQzODpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjE0Mzk6XHRcbjE0NDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE0NDE6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjE0NDI6XHRcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXHUwMDNlYnBmLnByb2csIHNrYik7XG4xNDQzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0NDQ6XHRcbjE0NDU6XHRcdHN3aXRjaCAocmV0KSB7XG4xNDQ2Olx0XHRjYXNlIEJQRl9PSzpcbjE0NDc6XHRcdGNhc2UgQlBGX1JFRElSRUNUOlxuMTQ0ODpcdFx0XHRicmVhaztcbjE0NDk6XHRcdGNhc2UgQlBGX0RST1A6XG4xNDUwOlx0XHRcdGdvdG8gZHJvcDtcbjE0NTE6XHRcdGRlZmF1bHQ6XG4xNDUyOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDticGYtc2VnNmxvY2FsOiBJbGxlZ2FsIHJldHVybiB2YWx1ZSAldVxcblwmIzM0OywgcmV0KTtcbjE0NTM6XHRcdFx0Z290byBkcm9wO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4xNDU3Olx0XHRcdGdvdG8gZHJvcDtcbjE0NTg6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0NTk6XHRcbjE0NjA6XHRcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxuMTQ2MTpcdFx0XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XG4xNDYyOlx0XG4xNDYzOlx0XHRyZXR1cm4gZHN0X2lucHV0KHNrYik7XG4xNDY0Olx0XG4xNDY1Olx0ZHJvcDpcbjE0NjY6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0Njc6XHRcdGtmcmVlX3NrYihza2IpO1xuMTQ2ODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA5OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBQcm9ncmFtIFRlc3RpbmcgQ2FwYWJpbGl0aWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd2UgY2FuIHRlc3QgdGhlc2UgQlBGIHByb2dyYW1zLiBJIGtub3cgdGhhdCBgYnBmX3Byb2dfdGVzdF9ydW5gIGlzIGEgdmFsdWFibGUgdG9vbCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBmdWxsIHNjb3BlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGJwZl9wcm9nX3Rlc3RfcnVuYCBjYW4gaGFuZGxlIEJQRiBwcm9ncmFtcyBvZiB0aGUgYExXVF9TRUc2TE9DQUxgIHR5cGUuIElmIGl0IGNhbiwgdGhhdCYjMzk7cyBmYW50YXN0aWMsIGFuZCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFuIGFsdGVybmF0aXZlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBwb3NzaWJsZSBJIG1heSBuZWVkIHRvIGxvb2sgYXQgZnVuY3Rpb25zIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrYmAgdG8gZXhwbG9yZSB3aGF0IGtpbmQgb2YgYWx0ZXJuYXRpdmUgZXhpc3RzLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXN0aW5nIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzUtJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q6MTM2OnwgYGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgYCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgbHd0X3NlZzZsb2NhbGBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzctJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0yNT1CUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyNzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNTY9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkwOTEtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjkwOTI6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvYnRmLmMtOTA5My1cdFx0cmV0dXJuIEJURl9LRlVOQ19IT09LX0xXVDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODQzPXN0YXRpYyBib29sIGlzX25ldF9hZG1pbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg1MjpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1My1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ3ODk9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19kaXJlY3RfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDc5OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfT1VUOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ3OTk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODAwLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg3Nz1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg4LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODk6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODkwLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTg5OT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MjAtXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTIxOlx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MjItXHRpZiAoSVNfRVJSKHApKSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0yMDI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9nX3R5cGVfbmFtZVtdID0ge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVx0W0JQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUl1cdD0gXCYjMzQ7Y2dyb3VwX3NvY2tfYWRkclwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjIyOlx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cdFx0PSBcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjMtXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVx0XHQ9IFwmIzM0O2xpcmNfbW9kZTJcJiMzNDssXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3MC1cdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XHR7IEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcyLVx0eyBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAgICAgICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xNzgtXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzoxNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjIyNzpcdHNjYWxlX3Rlc3QoXCYjMzQ7dGVzdF9zZWc2X2xvb3AuYnBmLm9cJiMzNDssIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVx0e1wmIzM0O2x3dF94bWl0XCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlx0e1wmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1NzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU1J2NiBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgcGFydGljdWxhcmx5IGhvdyB0aGV5IGFmZmVjdCBTUnY2IEJQRiBoZWxwZXJzLiBJIHNlZSB0d28gbWFpbiBhcmVhcyBvZiBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuCgpGaXJzdCwgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBmaW5kaW5nIHRoZSBTUkggaGVhZGVyIGJ5IHNlYXJjaGluZyB0aGUgc2tiIGRhdGEgYXQgYW4gb2Zmc2V0LCBhbmQgdGhlbiBkZXRlcm1pbmluZyB2YWxpZGl0eS4gVGhlIHVwZGF0ZWQgY29kZSwgaG93ZXZlciwgbm93IHVzZXMgdGhlIGBzZWc2X2dldF9zcmhgIGhlbHBlciBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIFNSSC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlOyB1c2luZyBhIGRlZGljYXRlZCBoZWxwZXIgc3VnZ2VzdHMgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgZm9yIHZhbGlkYXRpb24uIFRoZSBjb2RlIGFsc28gY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgYWZ0ZXIgYHNlZzZfZ2V0X3NyaGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXNlIGRhdGEgcG9pbnRlciB1cGRhdGVzIHdpbGwgZGVmaW5pdGVseSBhZmZlY3QgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGFiaWxpdHkgdG8gb3BlcmF0ZSBvbiB0aGUgcGFja2V0cyBhZnRlciB0aGlzIFNSSCBwcm9jZXNzaW5nLgoKU2Vjb25kLCB0aGUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHRoZSBCUEYgbG9naWMgZm9yIFNSdjYgYWN0aW9ucywgcGFydGljdWxhcmx5IGluIGNhc2VzIGxpa2UgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgLCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCwgYW5kIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVBgLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgYXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIGhlcmU6IHRoZSBvcmlnaW5hbCBjb2RlIGp1c3QgcHVsbGVkIHRoZSBJUHY2IGhlYWRlciwgd2hlcmVhcyB0aGUgdXBkYXRlZCBjb2RlIGluY2x1ZGVzIGEgY2hlY2sgdXNpbmcgYHBza2JfbWF5X3B1bGxgIHRoYXQgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBJUHY2IGhlYWRlciBiZWZvcmUgcHVsbGluZyB0aGUgZGF0YS4gVGhpcyBoZWxwcyBwcmV2ZW50IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJ1bnMgb3Igb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlcmUgaXMgYWxzbyBhIGNoYW5nZSB0byBjYWxsIGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBmYWlsdXJlIG9jY3VycmVkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLgoKRnJvbSBhIGZ1bmN0aW9uYWxpdHkgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGJ1ZyBmaXgsIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgU1J2NiBCUEYgaW1wbGVtZW50YXRpb24uIEl0IGFkZHJlc3NlcyBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgYW5kIGVuc3VyZXMgc3RhdGUgY29uc2lzdGVuY3kuIEkmIzM5O20gdGhpbmtpbmcgb2YgYnVmZmVyIG92ZXJydW4gY2hlY2tzLCBhbmQgcHJvcGVyIGRhdGEgcG9pbnRlciBjb21wdXRhdGlvbi4gT3ZlcmFsbCwgaXQgYXBwZWFycyB0byBpbXByb3ZlIHJlbGlhYmlsaXR5LgoKTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGlzIGNsZWFybHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2ApIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCgpSZWdhcmRpbmcgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHJlbGV2YW50IEJQRiBzeW1ib2xzIGFuZCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGlmIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgcmVsYXRlZCBoZWxwZXJzIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8ga25vdyBpZiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBkZXRlcm1pbmUgaXRzIGFiaWxpdHkgdG8gYmUgdXNlZCBpbiBleHRlcm5hbCBCUEYgcHJvZ3JhbXMuIEkmIzM5O2xsIGxvb2sgYXJvdW5kIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIGBzZWc2X2xvY2FsLmNgLCBhbmQgcG90ZW50aWFsbHkgdXNlIHRvb2xzIGxpa2UgYGdyZXBwZXJgIG9yIGBubWAgdG8gYmUgc3VyZS4gSSB3aWxsIHVzZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF80XFwoYnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzItXG5uZXQvY29yZS9maWx0ZXIuYzo3MDMzOkJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNC1cdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRl9DQUxMXzQgTWFjcm8qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgQlBGX0NBTExfNGAgbWFjcm8gZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIGV4cGVjdGF0aW9uIGlzIHRoYXQgaXQgd2lsbCBleHBhbmQgdG8gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgbGlrZWx5IGB1NjQgbmFtZSh1NjQgX19hMSwgdTY0IF9fYTIsIC4uLilgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYSB0eXBpY2FsIHBhdHRlcm4uIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljaywgbW9yZSBlbmNvbXBhc3NpbmcgY2hlY2suIEl0JiMzOTtzIG9mdGVuIHF1aWNrZXIgdG8ganVzdCBncmVwIGZvciB0aGUgYnJvYWRlciBjb250ZXh0LiBJJiMzOTtsbCBzZWFyY2ggZm9yIGVpdGhlciBgX19fYnBmX3Byb2dfcnVuYCBvciBhbnkgaW5zdGFuY2Ugb2YgYEJQRl9DQUxMX2Agd2l0aGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGRlY2xhcmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGZpbHRlcmluZyBmcmFtZXdvcmsuIEEgYnJvYWRlciBzZWFyY2ggd2lsbCBnaXZlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBCUEZfQ0FMTF9bMC05XSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NzgtI2RlZmluZSBfX05PQVRUUlxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Nzk6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODA6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODE6I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODI6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODM6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODQ6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjQ1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSW50ZWdyYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCYjMzk7cyBTRUc2IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgaW50ZWdyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU0VHNikgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIHNlZSBgQlBGX0NBTExfeGAgd2hpY2ggc2VlbXMgdG8gZGVmaW5lIGEgYHU2NCBuYW1lKC4uLilgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEJQRiBjYWxscyBhcmUgY29uc3RydWN0ZWQgYW5kIHVzZWQuIE15IG5leHQgdGhvdWdodCBpcyB0byBsb29rIGF0IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBhbG9uZyB3aXRoIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlbiB0aGVyZSYjMzk7cyBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLCB3aGljaCBJIHNob3VsZCBsb29rIGF0IGFzIHdlbGwuIEkmIzM5O20gd29uZGVyaW5nIGlmIGNvcmUgaW5wdXQgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWNhbGx5IG9yIG5vdC4gTGV0IG1lIGp1c3QgY2hlY2sgb24gdGhhdC4gSXMgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgb3IgYHNlZzZfbG9jYWxfaW5wdXRgIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZT8gTGV0IG1lIGNoZWNrIGBzZWc2X2xvY2FsX2lucHV0YCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTE9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjA4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MDk6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxMC1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMwLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MzE6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzMi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDAtXHRcdFx0ICAgICAgIGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVx1MDAzZWRldiwgTlVMTCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjQxOlx0XHRcdCAgICAgICBzZWc2X2xvY2FsX2lucHV0X2NvcmUpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0MzpcdHJldHVybiBzZWc2X2xvY2FsX2lucHV0X2NvcmUoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjQ0LX1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY3My1cdC5kZXN0cm95X3N0YXRlXHQ9IHNlZzZfbG9jYWxfZGVzdHJveV9zdGF0ZSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjc0Olx0LmlucHV0XHRcdD0gc2VnNl9sb2NhbF9pbnB1dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjc1LVx0LmZpbGxfZW5jYXBcdD0gc2VnNl9sb2NhbF9maWxsX2VuY2FwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU1MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIGl0JiMzOTtzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTRUc2IExvY2FsIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHBvc2VkIGludGVyZmFjZSBmb3IgU0VHNiBsb2NhbC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgc2VnNl9sb2NhbC5oYCBvciwganVzdCB0byBiZSBzdXJlLCBgaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXJzLiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgcHVibGljLWZhY2luZyBBUEkgSSBoYXZlIHRvIHdvcmsgd2l0aCwgb3IgbmVlZCB0byBiZSBhd2FyZSBvZiB3aGVuIEkgd29yayB3aXRoIGl0IGZ1cnRoZXIuIEkmIzM5O20gYWZ0ZXIgdGhlIHByb3RvdHlwZXMsIGlubGluZSBmdW5jdGlvbnMsIGFuZCBhbnkgb3RoZXIgZGVjbGFyYXRpb25zIHRoYXQgZGVmaW5lIGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBtb2R1bGUuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSBpbi1kZXB0aCBhbmFseXNpcyBvciBtb2RpZmljYXRpb24gSSBwbGFuIHRvIGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zZWc2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGRpc3RpbGxlZCBmb3IgeW91OgoKKipEaXZpbmcgaW50byB0aGUgU0VHNiBIZWFkZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaW5jbHVkZS9uZXQvc2VnNiouaGAgZmlsZXMuIFRoaXMgYXJlYSBpcyB0aGUgY29yZSBvZiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGhlYWRlciBmaWxlcyBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIFRoZXkmIzM5O2xsIGRlZmluZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIHRoZSBiYWNrYm9uZSBvZiBob3cgU1J2NiBpcyBpbXBsZW1lbnRlZCBhdCB0aGUgbmV0d29yayBsZXZlbC4gTG9va2luZyBhdCB0aGVzZSBoZWFkZXJzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaW50ZXJwcmV0cyBhbmQgbWFuaXB1bGF0ZXMgU1J2NiBzZWdtZW50cywgaGFuZGxlcyB0aGUgZGlmZmVyZW50IFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgb3B0aW9ucywgYW5kIGxpa2VseSwgaG93IHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIHBsYW5lIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3Mgb2YgU1J2Ni4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDs2bG93cGFuLmgmIzM0OywKICAgICYjMzQ7YWN0X2FwaS5oJiMzNDssCiAgICAmIzM0O2FkZHJjb25mLmgmIzM0OywKICAgICYjMzQ7YWZfaWVlZTgwMjE1NC5oJiMzNDssCiAgICAmIzM0O2FmX3J4cnBjLmgmIzM0OywKICAgICYjMzQ7YWZfdW5peC5oJiMzNDssCiAgICAmIzM0O2FmX3Zzb2NrLmgmIzM0OywKICAgICYjMzQ7YWguaCYjMzQ7LAogICAgJiMzNDthbGlnbmVkX2RhdGEuaCYjMzQ7LAogICAgJiMzNDthbXQuaCYjMzQ7LAogICAgJiMzNDthcnAuaCYjMzQ7LAogICAgJiMzNDtheDI1LmgmIzM0OywKICAgICYjMzQ7YXg4ODc5Ni5oJiMzNDssCiAgICAmIzM0O2JhcmV1ZHAuaCYjMzQ7LAogICAgJiMzNDtib25kXzNhZC5oJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiLmgmIzM0OywKICAgICYjMzQ7Ym9uZF9vcHRpb25zLmgmIzM0OywKICAgICYjMzQ7Ym9uZGluZy5oJiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlLmgmIzM0OywKICAgICYjMzQ7YnVzeV9wb2xsLmgmIzM0OywKICAgICYjMzQ7Y2FsaXBzby5oJiMzNDssCiAgICAmIzM0O2Nhbi5oJiMzNDssCiAgICAmIzM0O2NmZzgwMjExLXdleHQuaCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMS5oJiMzNDssCiAgICAmIzM0O2NmZzgwMjE1NC5oJiMzNDssCiAgICAmIzM0O2NoZWNrc3VtLmgmIzM0OywKICAgICYjMzQ7Y2lwc29faXB2NC5oJiMzNDssCiAgICAmIzM0O2Nsc19jZ3JvdXAuaCYjMzQ7LAogICAgJiMzNDtjb2RlbC5oJiMzNDssCiAgICAmIzM0O2NvZGVsX2ltcGwuaCYjMzQ7LAogICAgJiMzNDtjb2RlbF9xZGlzYy5oJiMzNDssCiAgICAmIzM0O2NvbXBhdC5oJiMzNDssCiAgICAmIzM0O2RhdGFsaW5rLmgmIzM0OywKICAgICYjMzQ7ZGNiZXZlbnQuaCYjMzQ7LAogICAgJiMzNDtkY2JubC5oJiMzNDssCiAgICAmIzM0O2RldmxpbmsuaCYjMzQ7LAogICAgJiMzNDtkcm9wcmVhc29uLWNvcmUuaCYjMzQ7LAogICAgJiMzNDtkcm9wcmVhc29uLXFkaXNjLmgmIzM0OywKICAgICYjMzQ7ZHJvcHJlYXNvbi5oJiMzNDssCiAgICAmIzM0O2RzYS5oJiMzNDssCiAgICAmIzM0O2RzYV9zdHVicy5oJiMzNDssCiAgICAmIzM0O2RzY3AuaCYjMzQ7LAogICAgJiMzNDtkc2ZpZWxkLmgmIzM0OywKICAgICYjMzQ7ZHN0LmgmIzM0OywKICAgICYjMzQ7ZHN0X2NhY2hlLmgmIzM0OywKICAgICYjMzQ7ZHN0X21ldGFkYXRhLmgmIzM0OywKICAgICYjMzQ7ZHN0X29wcy5oJiMzNDssCiAgICAmIzM0O2VlZS5oJiMzNDssCiAgICAmIzM0O2Vyc3Bhbi5oJiMzNDssCiAgICAmIzM0O2VzcC5oJiMzNDssCiAgICAmIzM0O2VzcGludGNwLmgmIzM0OywKICAgICYjMzQ7ZXRob2MuaCYjMzQ7LAogICAgJiMzNDtmYWlsb3Zlci5oJiMzNDssCiAgICAmIzM0O2ZpYl9ub3RpZmllci5oJiMzNDssCiAgICAmIzM0O2ZpYl9ydWxlcy5oJiMzNDssCiAgICAmIzM0O2ZpcmV3aXJlLmgmIzM0OywKICAgICYjMzQ7Zmxvdy5oJiMzNDssCiAgICAmIzM0O2Zsb3dfZGlzc2VjdG9yLmgmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkLmgmIzM0OywKICAgICYjMzQ7Zm91LmgmIzM0OywKICAgICYjMzQ7ZnEuaCYjMzQ7LAogICAgJiMzNDtmcV9pbXBsLmgmIzM0OywKICAgICYjMzQ7Z2FycC5oJiMzNDssCiAgICAmIzM0O2dlbl9zdGF0cy5oJiMzNDssCiAgICAmIzM0O2dlbmV0bGluay5oJiMzNDssCiAgICAmIzM0O2dlbmV2ZS5oJiMzNDssCiAgICAmIzM0O2dyZS5oJiMzNDssCiAgICAmIzM0O2dyby5oJiMzNDssCiAgICAmIzM0O2dyb19jZWxscy5oJiMzNDssCiAgICAmIzM0O2dzby5oJiMzNDssCiAgICAmIzM0O2d0cC5oJiMzNDssCiAgICAmIzM0O2d1ZS5oJiMzNDssCiAgICAmIzM0O2hhbmRzaGFrZS5oJiMzNDssCiAgICAmIzM0O2hvdGRhdGEuaCYjMzQ7LAogICAgJiMzNDtod2JtLmgmIzM0OywKICAgICYjMzQ7aWNtcC5oJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYWRpb3RhcC5oJiMzNDssCiAgICAmIzM0O2llZWU4MDIxNTRfbmV0ZGV2LmgmIzM0OywKICAgICYjMzQ7aWVlZTgwMjFxLmgmIzM0OywKICAgICYjMzQ7aWZfaW5ldDYuaCYjMzQ7LAogICAgJiMzNDtpZmUuaCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9jb25uZWN0aW9uX3NvY2suaCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9oYXNodGFibGVzLmgmIzM0OywKICAgICYjMzQ7aW5ldF9jb21tb24uaCYjMzQ7LAogICAgJiMzNDtpbmV0X2Nvbm5lY3Rpb25fc29jay5oJiMzNDssCiAgICAmIzM0O2luZXRfZHNjcC5oJiMzNDssCiAgICAmIzM0O2luZXRfZWNuLmgmIzM0OywKICAgICYjMzQ7aW5ldF9mcmFnLmgmIzM0OywKICAgICYjMzQ7aW5ldF9oYXNodGFibGVzLmgmIzM0OywKICAgICYjMzQ7aW5ldF9zb2NrLmgmIzM0OywKICAgICYjMzQ7aW5ldF90aW1ld2FpdF9zb2NrLmgmIzM0OywKICAgICYjMzQ7aW5ldHBlZXIuaCYjMzQ7LAogICAgJiMzNDtpb2FtNi5oJiMzNDssCiAgICAmIzM0O2lwLmgmIzM0OywKICAgICYjMzQ7aXA2X2NoZWNrc3VtLmgmIzM0OywKICAgICYjMzQ7aXA2X2ZpYi5oJiMzNDssCiAgICAmIzM0O2lwNl9yb3V0ZS5oJiMzNDssCiAgICAmIzM0O2lwNl90dW5uZWwuaCYjMzQ7LAogICAgJiMzNDtpcF9maWIuaCYjMzQ7LAogICAgJiMzNDtpcF90dW5uZWxzLmgmIzM0OywKICAgICYjMzQ7aXBfdnMuaCYjMzQ7LAogICAgJiMzNDtpcGNvbXAuaCYjMzQ7LAogICAgJiMzNDtpcGNvbmZpZy5oJiMzNDssCiAgICAmIzM0O2lwdjYuaCYjMzQ7LAogICAgJiMzNDtpcHY2X2ZyYWcuaCYjMzQ7LAogICAgJiMzNDtpd19oYW5kbGVyLmgmIzM0OywKICAgICYjMzQ7a2NtLmgmIzM0OywKICAgICYjMzQ7bDNtZGV2LmgmIzM0OywKICAgICYjMzQ7bGFnLmgmIzM0OywKICAgICYjMzQ7bGFwYi5oJiMzNDssCiAgICAmIzM0O2xsYy5oJiMzNDssCiAgICAmIzM0O2xsY19jX2FjLmgmIzM0OywKICAgICYjMzQ7bGxjX2NfZXYuaCYjMzQ7LAogICAgJiMzNDtsbGNfY19zdC5oJiMzNDssCiAgICAmIzM0O2xsY19jb25uLmgmIzM0OywKICAgICYjMzQ7bGxjX2lmLmgmIzM0OywKICAgICYjMzQ7bGxjX3BkdS5oJiMzNDssCiAgICAmIzM0O2xsY19zX2FjLmgmIzM0OywKICAgICYjMzQ7bGxjX3NfZXYuaCYjMzQ7LAogICAgJiMzNDtsbGNfc19zdC5oJiMzNDssCiAgICAmIzM0O2xsY19zYXAuaCYjMzQ7LAogICAgJiMzNDtsd3R1bm5lbC5oJiMzNDssCiAgICAmIzM0O21hYzgwMjExLmgmIzM0OywKICAgICYjMzQ7bWFjODAyMTU0LmgmIzM0OywKICAgICYjMzQ7bWFjc2VjLmgmIzM0OywKICAgICYjMzQ7bWN0cC5oJiMzNDssCiAgICAmIzM0O21jdHBkZXZpY2UuaCYjMzQ7LAogICAgJiMzNDttaXA2LmgmIzM0OywKICAgICYjMzQ7bWxkLmgmIzM0OywKICAgICYjMzQ7bXBscy5oJiMzNDssCiAgICAmIzM0O21wbHNfaXB0dW5uZWwuaCYjMzQ7LAogICAgJiMzNDttcHRjcC5oJiMzNDssCiAgICAmIzM0O21ycC5oJiMzNDssCiAgICAmIzM0O25jc2kuaCYjMzQ7LAogICAgJiMzNDtuZGlzYy5oJiMzNDssCiAgICAmIzM0O25laWdoYm91ci5oJiMzNDssCiAgICAmIzM0O25laWdoYm91cl90YWJsZXMuaCYjMzQ7LAogICAgJiMzNDtuZXRfZGVidWcuaCYjMzQ7LAogICAgJiMzNDtuZXRfZmFpbG92ZXIuaCYjMzQ7LAogICAgJiMzNDtuZXRfbmFtZXNwYWNlLmgmIzM0OywKICAgICYjMzQ7bmV0X3JhdGVsaW1pdC5oJiMzNDssCiAgICAmIzM0O25ldF9zaGFwZXIuaCYjMzQ7LAogICAgJiMzNDtuZXRfdHJhY2tlcnMuaCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbG9jay5oJiMzNDssCiAgICAmIzM0O25ldGRldl9uZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3F1ZXVlcy5oJiMzNDssCiAgICAmIzM0O25ldGRldl9yeF9xdWV1ZS5oJiMzNDssCiAgICAmIzM0O25ldGV2ZW50LmgmIzM0OywKICAgICYjMzQ7bmV0a2l0LmgmIzM0OywKICAgICYjMzQ7bmV0bGFiZWwuaCYjMzQ7LAogICAgJiMzNDtuZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7bmV0bWVtLmgmIzM0OywKICAgICYjMzQ7bmV0cHJpb19jZ3JvdXAuaCYjMzQ7LAogICAgJiMzNDtuZXh0aG9wLmgmIzM0OywKICAgICYjMzQ7bmw4MDIxNTQuaCYjMzQ7LAogICAgJiMzNDtuc2guaCYjMzQ7LAogICAgJiMzNDtwZmNwLmgmIzM0OywKICAgICYjMzQ7cGllLmgmIzM0OywKICAgICYjMzQ7cGluZy5oJiMzNDssCiAgICAmIzM0O3BrdF9jbHMuaCYjMzQ7LAogICAgJiMzNDtwa3Rfc2NoZWQuaCYjMzQ7LAogICAgJiMzNDtwcHRwLmgmIzM0OywKICAgICYjMzQ7cHJvdG9fbWVtb3J5LmgmIzM0OywKICAgICYjMzQ7cHJvdG9jb2wuaCYjMzQ7LAogICAgJiMzNDtwc2FtcGxlLmgmIzM0OywKICAgICYjMzQ7cHNuYXAuaCYjMzQ7LAogICAgJiMzNDtwc3AuaCYjMzQ7LAogICAgJiMzNDtyYXcuaCYjMzQ7LAogICAgJiMzNDtyYXd2Ni5oJiMzNDssCiAgICAmIzM0O3JlZC5oJiMzNDssCiAgICAmIzM0O3JlZ3VsYXRvcnkuaCYjMzQ7LAogICAgJiMzNDtyZXF1ZXN0X3NvY2suaCYjMzQ7LAogICAgJiMzNDtyb3NlLmgmIzM0OywKICAgICYjMzQ7cm91dGUuaCYjMzQ7LAogICAgJiMzNDtycGwuaCYjMzQ7LAogICAgJiMzNDtycHMtdHlwZXMuaCYjMzQ7LAogICAgJiMzNDtycHMuaCYjMzQ7LAogICAgJiMzNDtyc2lfOTF4LmgmIzM0OywKICAgICYjMzQ7cnN0cmVhc29uLmgmIzM0OywKICAgICYjMzQ7cnRuZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7cnRuaC5oJiMzNDssCiAgICAmIzM0O3NjaF9nZW5lcmljLmgmIzM0OywKICAgICYjMzQ7c2NoX3ByaXYuaCYjMzQ7LAogICAgJiMzNDtzY20uaCYjMzQ7LAogICAgJiMzNDtzZWN1cmVfc2VxLmgmIzM0OywKICAgICYjMzQ7c2VnNi5oJiMzNDssCiAgICAmIzM0O3NlZzZfaG1hYy5oJiMzNDssCiAgICAmIzM0O3NlZzZfbG9jYWwuaCYjMzQ7LAogICAgJiMzNDtzZWxmdGVzdHMuaCYjMzQ7LAogICAgJiMzNDtzbGhjX3ZqLmgmIzM0OywKICAgICYjMzQ7c21jLmgmIzM0OywKICAgICYjMzQ7c25tcC5oJiMzNDssCiAgICAmIzM0O3NvY2suaCYjMzQ7LAogICAgJiMzNDtzb2NrX3JldXNlcG9ydC5oJiMzNDssCiAgICAmIzM0O3N0cC5oJiMzNDssCiAgICAmIzM0O3N0cnBhcnNlci5oJiMzNDssCiAgICAmIzM0O3N3aXRjaGRldi5oJiMzNDssCiAgICAmIzM0O3RjX3dyYXBwZXIuaCYjMzQ7LAogICAgJiMzNDt0Y3AuaCYjMzQ7LAogICAgJiMzNDt0Y3BfYW8uaCYjMzQ7LAogICAgJiMzNDt0Y3BfZWNuLmgmIzM0OywKICAgICYjMzQ7dGNwX3N0YXRlcy5oJiMzNDssCiAgICAmIzM0O3RjeC5oJiMzNDssCiAgICAmIzM0O3RpbWV3YWl0X3NvY2suaCYjMzQ7LAogICAgJiMzNDt0aXBjLmgmIzM0OywKICAgICYjMzQ7dGxzLmgmIzM0OywKICAgICYjMzQ7dGxzX3Byb3QuaCYjMzQ7LAogICAgJiMzNDt0cmFuc3BfdjYuaCYjMzQ7LAogICAgJiMzNDt0c28uaCYjMzQ7LAogICAgJiMzNDt0dW5fcHJvdG8uaCYjMzQ7LAogICAgJiMzNDt1ZHAuaCYjMzQ7LAogICAgJiMzNDt1ZHBfdHVubmVsLmgmIzM0OywKICAgICYjMzQ7dnNvY2tfYWRkci5oJiMzNDssCiAgICAmIzM0O3Z4bGFuLmgmIzM0OywKICAgICYjMzQ7d2V4dC5oJiMzNDssCiAgICAmIzM0O3gyNS5oJiMzNDssCiAgICAmIzM0O3gyNWRldmljZS5oJiMzNDssCiAgICAmIzM0O3hkcC5oJiMzNDssCiAgICAmIzM0O3hkcF9wcml2LmgmIzM0OywKICAgICYjMzQ7eGRwX3NvY2suaCYjMzQ7LAogICAgJiMzNDt4ZHBfc29ja19kcnYuaCYjMzQ7LAogICAgJiMzNDt4ZnJtLmgmIzM0OywKICAgICYjMzQ7eHNrX2J1ZmZfcG9vbC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0OzlwJiMzNDssCiAgICAmIzM0O2JsdWV0b290aCYjMzQ7LAogICAgJiMzNDtpdWN2JiMzNDssCiAgICAmIzM0O2xpYmV0aCYjMzQ7LAogICAgJiMzNDttYW5hJiMzNDssCiAgICAmIzM0O25ldGZpbHRlciYjMzQ7LAogICAgJiMzNDtuZXRucyYjMzQ7LAogICAgJiMzNDtuZmMmIzM0OywKICAgICYjMzQ7cGFnZV9wb29sJiMzNDssCiAgICAmIzM0O3Bob25ldCYjMzQ7LAogICAgJiMzNDtwaHkmIzM0OywKICAgICYjMzQ7cHNwJiMzNDssCiAgICAmIzM0O3NjdHAmIzM0OywKICAgICYjMzQ7dGNfYWN0JiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgU0VHNiBDb2RlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9jYWwgc2VnbWVudCByb3V0aW5nIHNwZWNpZmljcyBhbmQgdGhlIGJyb2FkZXIgU0VHNiBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGhlYWRlciBmaWxlcy4gSSBmaWd1cmUgYGluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaGAgd2lsbCBjb250YWluIHRoZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGxvY2FsIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byB0aGUgaGFuZGxpbmcgb2YgU0VHNiByb3V0ZXMgb24gdGhpcyBzeXN0ZW0uIEl0IHNob3VsZCBkZXRhaWwgdGhpbmdzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpYyBmbGFncywgYW5kIHBlcmhhcHMgc29tZSBvZiB0aGUgZnVuZGFtZW50YWwgZGF0YSB0eXBlcyB1c2VkIGluIHRoZSBsb2NhbCByb3V0aW5nIHRhYmxlLiBUaGVuLCBJJiMzOTtsbCBuZWVkIGEgYnJvYWRlciB2aWV3LCBzbyBgaW5jbHVkZS9uZXQvc2VnNi5oYCBpcyB0aGUgbmV4dCBzdG9wLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG9uZSB0byBwcm92aWRlIHRoZSBjb3JlIGRlZmluaXRpb25zLCBjb21tb24gc3RydWN0dXJlcywgYW5kIG1heWJlIHRoZSBpbnRlcmZhY2VzIHRoYXQgdGllIHRoZSB2YXJpb3VzIFNFRzYgbW9kdWxlcyB0b2dldGhlci4gSXQmIzM5O2xsIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlIGNvbnRleHQsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGxvY2FsIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgbW9yZSBnZW5lcmFsIFNFRzYgcHJvdG9jb2wuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogIEF1dGhvcnM6XG4gICA2Olx0ICogIERhdmlkIExlYnJ1biBcdTAwM2NkYXZpZC5sZWJydW5AdWNsb3V2YWluLmJlXHUwMDNlXG4gICA3Olx0ICogIGVCUEYgc3VwcG9ydDogTWF0aGlldSBYaG9ubmV1eCBcdTAwM2NtLnhob25uZXV4QGdtYWlsLmNvbVx1MDAzZVxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcbiAgMTE6XHQjZGVmaW5lIF9ORVRfU0VHNl9MT0NBTF9IXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICAxNjpcdFxuICAxNzpcdGV4dGVybiBpbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcbiAgMTg6XHRcdFx0XHQgICAgICAgdTMyIHRibF9pZCk7XG4gIDE5Olx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAgMjA6XHRcbiAgMjE6XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlIHtcbiAgMjI6XHRcdGxvY2FsX2xvY2tfdCBiaF9sb2NrO1xuICAyMzpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gIDI0Olx0XHR1MTYgaGRybGVuO1xuICAyNTpcdFx0Ym9vbCB2YWxpZDtcbiAgMjY6XHR9O1xuICAyNzpcdFxuICAyODpcdERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbiAgMjk6XHRcbiAgMzA6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFNFRzYgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYgKFNFRzYpIGltcGxlbWVudGF0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2UgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYXJ0IG9mIGl0IGFsbDogYGluY2x1ZGUvbmV0L3NlZzYuaGAuIFRoaXMgaGVhZGVyIGZpbGUgaXMgd2hlcmUgdGhlIGZ1bmRhbWVudGFsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGFyZSwgc28gaXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBTRUc2LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBTSUQgbGlzdHMsIHRoZSBjb250cm9sIGZsYWdzLCBwZXJoYXBzIHNvbWUgbWFjcm9zIGZvciBtYW5pcHVsYXRpbmcgdGhlIHNlZ21lbnRzLCBhbmQgb2YgY291cnNlLCB0aGUga2V5IHN0cnVjdHVyZXMgdXNlZCBmb3IgZW5jYXBzdWxhdGluZyB0aGUgSVB2NiBoZWFkZXJzIHdpdGhpbiBJUHY2LiBLbm93aW5nIHRoZXNlIGJ1aWxkaW5nIGJsb2NrcyBpcyBjcnVjaWFsIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUgb3RoZXIgYC5jYCBmaWxlcy4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHRoZSBzZWdtZW50IGxpc3QgZW50cnksIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCBhbmQgbWF5YmUgZXZlbiBzb21lIGlubGluZSBmdW5jdGlvbnMgZm9yIHF1aWNrbHkgYWNjZXNzaW5nIGZpZWxkcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NlZzYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogIEF1dGhvcjpcbiAgIDY6XHQgKiAgRGF2aWQgTGVicnVuIFx1MDAzY2RhdmlkLmxlYnJ1bkB1Y2xvdXZhaW4uYmVcdTAwM2VcbiAgIDc6XHQgKi9cbiAgIDg6XHRcbiAgIDk6XHQjaWZuZGVmIF9ORVRfU0VHNl9IXG4gIDEwOlx0I2RlZmluZSBfTkVUX1NFRzZfSFxuICAxMTpcdFxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2VnNi5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXHUwMDNlXG4gIDE2Olx0XG4gIDE3Olx0c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jc3VtX2RpZmY0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBmcm9tLFxuICAxODpcdFx0XHRcdFx0ICAgICBfX2JlMzIgdG8pXG4gIDE5Olx0e1xuICAyMDpcdFx0X19iZTMyIGRpZmZbXSA9IHsgfmZyb20sIHRvIH07XG4gIDIxOlx0XG4gIDIyOlx0XHRza2ItXHUwMDNlY3N1bSA9IH5jc3VtX3BhcnRpYWwoKGNoYXIgKilkaWZmLCBzaXplb2YoZGlmZiksIH5za2ItXHUwMDNlY3N1bSk7XG4gIDIzOlx0fVxuICAyNDpcdFxuICAyNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3N1bV9kaWZmMTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyICpmcm9tLFxuICAyNjpcdFx0XHRcdFx0ICAgICAgX19iZTMyICp0bylcbiAgMjc6XHR7XG4gIDI4Olx0XHRfX2JlMzIgZGlmZltdID0ge1xuICAyOTpcdFx0XHR+ZnJvbVswXSwgfmZyb21bMV0sIH5mcm9tWzJdLCB+ZnJvbVszXSxcbiAgMzA6XHRcdFx0dG9bMF0sIHRvWzFdLCB0b1syXSwgdG9bM10sXG4gIDMxOlx0XHR9O1xuICAzMjpcdFxuICAzMzpcdFx0c2tiLVx1MDAzZWNzdW0gPSB+Y3N1bV9wYXJ0aWFsKChjaGFyICopZGlmZiwgc2l6ZW9mKGRpZmYpLCB+c2tiLVx1MDAzZWNzdW0pO1xuICAzNDpcdH1cbiAgMzU6XHRcbiAgMzY6XHRzdHJ1Y3Qgc2VnNl9wZXJuZXRfZGF0YSB7XG4gIDM3Olx0XHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiAgMzg6XHRcdHN0cnVjdCBpbjZfYWRkciBfX3JjdSAqdHVuX3NyYztcbiAgMzk6XHQjaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4gIDQwOlx0XHRzdHJ1Y3Qgcmhhc2h0YWJsZSBobWFjX2luZm9zO1xuICA0MTpcdCNlbmRpZlxuICA0MjpcdH07XG4gIDQzOlx0XG4gIDQ0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VnNl9wZXJuZXRfZGF0YSAqc2VnNl9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxuICA0NTpcdHtcbiAgNDY6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiAgNDc6XHRcdHJldHVybiBuZXQtXHUwMDNlaXB2Ni5zZWc2X2RhdGE7XG4gIDQ4Olx0I2Vsc2VcbiAgNDk6XHRcdHJldHVybiBOVUxMO1xuICA1MDpcdCNlbmRpZlxuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHRleHRlcm4gaW50IHNlZzZfaW5pdCh2b2lkKTtcbiAgNTQ6XHRleHRlcm4gdm9pZCBzZWc2X2V4aXQodm9pZCk7XG4gIDU1Olx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxcbiAgNTY6XHRleHRlcm4gaW50IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKTtcbiAgNTc6XHRleHRlcm4gdm9pZCBzZWc2X2lwdHVubmVsX2V4aXQodm9pZCk7XG4gIDU4Olx0ZXh0ZXJuIGludCBzZWc2X2xvY2FsX2luaXQodm9pZCk7XG4gIDU5Olx0ZXh0ZXJuIHZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpO1xuICA2MDpcdCNlbHNlXG4gIDYxOlx0c3RhdGljIGlubGluZSBpbnQgc2VnNl9pcHR1bm5lbF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAgNjI6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpIHt9XG4gIDYzOlx0c3RhdGljIGlubGluZSBpbnQgc2VnNl9sb2NhbF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAgNjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpIHt9XG4gIDY1Olx0I2VuZGlmXG4gIDY2Olx0XG4gIDY3Olx0ZXh0ZXJuIGJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZCk7XG4gIDY4Olx0ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XG4gIDY5Olx0ZXh0ZXJuIHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCk7XG4gIDcwOlx0ZXh0ZXJuIGludCBzZWc2X2RvX3NyaF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgsXG4gIDcxOlx0XHRcdFx0ICAgICBpbnQgcHJvdG8pO1xuICA3MjpcdGV4dGVybiBpbnQgc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCk7XG4gIDczOlx0ZXh0ZXJuIGludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxuICA3NDpcdFx0XHRcdCAgICAgICB1MzIgdGJsX2lkKTtcbiAgNzU6XHRcbiAgNzY6XHQvKiBJZiB0aGUgcGFja2V0IHdoaWNoIGludm9rZWQgYW4gSUNNUCBlcnJvciBjb250YWlucyBhbiBTUkggcmV0dXJuXG4gIDc3Olx0ICogdGhlIHRydWUgZGVzdGluYXRpb24gYWRkcmVzcyBmcm9tIHdpdGhpbiB0aGUgU1JILCBvdGhlcndpc2UgdXNlIHRoZVxuICA3ODpcdCAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIElQIGhlYWRlci5cbiAgNzk6XHQgKi9cbiAgODA6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VnNl9nZXRfZGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyMDIKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRi1iYXNlZCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG1haW4gZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIHRoZSBCUEYgaW50ZWdyYXRpb24gd2l0aCBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgZm9yIGZ1enppbmcgcHVycG9zZXMuIEkmIzM5O20gc3RhcnRpbmcgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBjb21wb25lbnRzLiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgdGhlIHByaW1hcnkgQlBGIGhlbHBlciBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIHN5bWJvbCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcyB0byBoYW5kbGUgdGhlIFNSSCBvcGVyYXRpb25zLCBzbyBpdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGBGb2N1c1N5bWJvbGAuIEl0IGxvb2tzIGxpa2UgaXQgZGlyZWN0bHkgY2FsbHMgc3RhdGljIGhlbHBlcnMgbGlrZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAsIGBzZWc2X2dldF9zcmhgLCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBzeW1ib2xzLiBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGxvb2tzIGludGVyZXN0aW5nIHNpbmNlIHRoYXQgc2V0cyB1cCBgc3JoX3N0YXRlYCBhbmQgaW52b2tlcyB0aGUgQlBGIHByb2dyYW0gY2FsbGluZyBgYnBmX2x3dF9zZWc2X2FjdGlvbmAuIFRoZXJlZm9yZSBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIHdpbGwgYWxzbyBiZSBpbmNsdWRlZCBpbiBgRm9jdXNTeW1ib2xzYC4gRmluYWxseSwgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIHdpbGwgYWxzbyBiZSBpbmNsdWRlZCBpbiBgRm9jdXNTeW1ib2xzYC4KCk5leHQsIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9TRUc2X0JQRmAgaXMgdGhlIGtleSwgYW5kIGl0JiMzOTtzIGBkZWZfYm9vbCB5YCBpZiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQgYElQVjZgIGFyZSBlbmFibGVkLCBhbmQgYElQVjZfU0VHNl9MV1RVTk5FTGAgZGVwZW5kcyBvbiBgSVBWNmAuIFRoaXMgbWVhbnMgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgIG11c3QgYmUgZW5hYmxlZC4gQWxzbywgdGhlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCByZWxhdGVkIGhlbHBlcnMgYXJlIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKWAuIFRoZXNlIGFyZSBteSBgRW5hYmxlQ29uZmlnc2AuIEkgd2lsbCBhbHNvIG5lZWQgYEJQRl9TWVNDQUxMYCB0byBiZSBlbmFibGVkLCBiZWNhdXNlIHRoZSBCUEYgcHJvZ3JhbSBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlLgoKU28sIHRvIHN1bW1hcml6ZSBmb3IgZnV6emluZyBwdXJwb3NlczoKCiogICAqKmBGb2N1c1N5bWJvbHNgKio6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgCiogICAqKmBFbmFibGVDb25maWdzYCoqOiBgSVBWNmAsIGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBgSVBWNl9TRUc2X0JQRmAsIGBCUEZfU1lTQ0FMTGAKCkdpdmVuIHRoZXNlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBhc3BlY3RzIHRvIGVuYWJsZSBhbmQgdGFyZ2V0IGZvciBlZmZlY3RpdmUgZnV6emluZyBvZiB0aGUgQlBGLWJhc2VkIFNSSCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBhbmFseXNpcyBpcyBjb25jaXNlIGFuZCBwcm92aWRlcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFNSSCBzdGF0ZSBoYW5kbGluZyBhbmQgc2tiIGxpbmVhciBidWZmZXIgdmFsaWRhdGlvbiAocHNrYl9tYXlfcHVsbCBpbnN0ZWFkIG9mIHBza2JfcHVsbCkgaW4gdGhlIFNSdjYgQlBGIGhlbHBlciBicGZfbHd0X3NlZzZfYWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGFuZCBCUEYgcGFja2V0IGhhbmRsaW5nIHBhdGhzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFNSSCBzdGF0ZSBoYW5kbGluZyBhbmQgc2tiIGxpbmVhciBidWZmZXIgdmFsaWRhdGlvbiAocHNrYl9tYXlfcHVsbCBpbnN0ZWFkIG9mIHBza2JfcHVsbCkgaW4gdGhlIFNSdjYgQlBGIGhlbHBlciBicGZfbHd0X3NlZzZfYWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGFuZCBCUEYgcGFja2V0IGhhbmRsaW5nIHBhdGhzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgbWFudWFsIFNSSCBsb29rdXBzIHdpdGggYHNlZzZfZ2V0X3NyaCgpYCAod2hpY2ggcGVyZm9ybXMgcHJvcGVyIGBwc2tiX21heV9wdWxsYCBhbmQgdmFsaWRhdGVzIHRoZSBTUkgpLCBlbnN1cmVzIEJQRiBwYWNrZXQgZGF0YSBwb2ludGVycyAoYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgKSBhcmUgcmVjYWxjdWxhdGVkIHdoZW4gc2tiIGxpbmVhciBidWZmZXJzIG1heSBiZSByZWFsbG9jYXRlZCBkdXJpbmcgaGVhZGVyIHB1bGxzLCBhbmQgYWRkcyBtaXNzaW5nIGJvdW5kcyB2YWxpZGF0aW9uIChgcHNrYl9tYXlfcHVsbGApIGJlZm9yZSBwdWxsaW5nIElQdjYgaGVhZGVycy5cblxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXG5cblRoZSBwYXRjaCBkb2VzIG5vdDpcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cbjIuIEV4cG9zZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLlxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M4ODYwZTMzMjM0YmM2OGQ5MWU1ZTJhMjNmZmNjNTEwODc0YzdlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDc6NDc6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjFkZDNhNjg1ZDFiODkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDE4LDE1ICYjNDM7NzAxOCwxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwotCWludCBzcmhvZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgJmx0OyAwKSB7Ci0JCXNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTDsKLQl9IGVsc2UgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNyaG9mZik7Ci0JCXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoX3N0YXRlLSZndDtzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwotCQlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKLQl9CiYjNDM7CXNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApOwomIzQzOwlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7c3JoID0gc3JoOwomIzQzOwlpZiAoIXNyaCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3JoX3N0YXRlLSZndDtoZHJsZW4gPSBzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwomIzQzOwlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKIH0KIAogQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC03MDU5LDE1ICYjNDM7NzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYiwKIAogCQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpICZsdDsgMCkKIAkJCXJldHVybiAtRUJBRE1TRzsKLQkJaWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKQomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7CiYjNDM7CQkJc3JoX3N0YXRlLSZndDtzcmggPSBOVUxMOwomIzQzOwkJCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCX0KJiM0MzsJCV9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpOwogCiAJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAotCQlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiAJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAJCXJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6CkBAIC03MDc1LDggJiM0Mzs3MDc5LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKLQkJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiYjNDM7CQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6CkBAIC03MDg0LDggJiM0Mzs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQotCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKJiM0MzsJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAKIAkJcmV0dXJuIGVycjsKIAlkZWZhdWx0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBGdXp6aW5nIFJlcXVlc3QqKgoKT2theSwgc28gc29tZW9uZSYjMzk7cyBhc2tpbmcgbWUgd2hldGhlciB0aGlzIGtlcm5lbCBwYXRjaCBzZXJpZXMgbmVlZHMgS01TQU4gZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3M/IExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIGtlZXBpbmcgaW4gbWluZCB0aGUgc2FmZXR5IGd1aWRlbGluZXMgd2UmIzM5O3ZlIGVzdGFibGlzaGVkLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBtYWxpY2lvdXMgYWN0aXZpdHkgb3IgZXhwbG9pdCBkZXZlbG9wbWVudDsgaXQmIzM5O3MgYSByb3V0aW5lIHBhdGNoIGFuYWx5c2lzIGZvY3VzaW5nIG9uIHNhbml0aXplciBzZWxlY3Rpb24g4oCTIEtBU0FOIHZlcnN1cyBLTVNBTi4gR29vZCwgdGhhdCBtYWtlcyBpdCBhIG11Y2ggbW9yZSBtYW5hZ2VhYmxlIHRhc2suCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gVGhleSYjMzk7cmUgd29ya2luZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0JiMzOTtzIHRoZSBrZXkgYXJlYSBvZiBjb25jZXJuLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDcwMTguIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyB3aGV0aGVyIEtNU0FOIGlzIHdhcnJhbnRlZCBiYXNlZCBvbiB0aGUgY2hhbmdlcy4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMTA6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjcwMTE6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG43MDEyOlx0XHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbjcwMTM6XHRcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuNzAxNDpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbjcwMTU6XHR9O1xuNzAxNjpcdFxuNzAxNzpcdHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG43MDE4Olx0e1xuNzAxOTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMjA6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAyMTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG43MDIyOlx0XG43MDIzOlx0XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbjcwMjQ6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwMjU6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG43MDI2Olx0XHRpZiAoIXNyaClcbjcwMjc6XHRcdFx0cmV0dXJuO1xuNzAyODpcdFxuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG43MDMwOlx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuNzAzMTpcdH1cbjcwMzI6XHRcbjcwMzM6XHRCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbjcwMzQ6XHRcdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcbjcwMzU6XHR7XG43MDM2Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuNzAzNzpcdFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG43MDgxOlx0XHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG43MDgyOlx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDgzOlx0XG43MDg0Olx0XHRcdHJldHVybiBlcnI7XG43MDg1Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODY6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA4ODpcdFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuNzA4OTpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA5MDpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5MTpcdFxuNzA5MjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5MzpcdFx0ZGVmYXVsdDpcbjcwOTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDk1Olx0XHR9XG43MDk2Olx0fVxuNzA5NzpcdFxuNzA5ODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcbjcwOTk6XHRcdC5mdW5jXHRcdD0gYnBmX2x3dF9zZWc2X2FjdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGludG8sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBTRUc2IEJQRiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUgU0VHNiBCUEYgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBvZiBgc2VnNl9icGZfc3JoX3N0YXRlc2AgYW5kIGBzZWc2X2dldF9zcmhgIOKAkyBjcml0aWNhbCBjb21wb25lbnRzIGluIHRoZSBCUEYtZHJpdmVuIFNFRzYgZGF0YSBwbGFuZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gb24gaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBgc3JoX3N0YXRlYCBhcmUgYmVpbmcgaGFuZGxlZC4gVG8gZ2FpbiB0aGlzIHVuZGVyc3RhbmRpbmcgSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiB0aGVzZSBrZXkgaWRlbnRpZmllcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9pcHY2L3NlZzYuY2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgQlBGIGhlbHBlcnMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUgaW4gb3JkZXIgdG8gdGhvcm91Z2hseSBhc3Nlc3MgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zZWc2X2xvY2FsLmg9MjE9c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oLTI3LVxuaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oOjI4OkRFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbmluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaC0yOS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTc0PUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzctXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3ODpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjk3OS1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDE3PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAxOS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDIwOlx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDIxLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAzMz1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDM2LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzc6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzgtXHRpbnQgaGRyb2ZmID0gMDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTA4PUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MTEyOlx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MTEzLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzg1LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzODY6REVGSU5FX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcykgPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4Ny1cdC5iaF9sb2NrXHQ9IElOSVRfTE9DQUxfTE9DSyhiaF9sb2NrKSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM5MD1ib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM5Mi1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM5MzpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTQtXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MTQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDMzLVx0ICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNDpcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNTpcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDM2LVx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Ny1cdFx0Z290byBkcm9wO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTg6XHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1OS1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2NS1kcm9wOlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NjY6XHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2Ny1cdGtmcmVlX3NrYihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgU0VHNiBMb2NhbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBTRUc2IGxvY2FsIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHRoZSBwcmltYXJ5IGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIHdvdWxkIHRoZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlc2lkZT8mIzM0OyBUaGF0IGxlYWRzIG1lIGRpcmVjdGx5IHRvIGBpbmNsdWRlL25ldC9zZWc2X2xvY2FsLmhgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSB0aGUgZXhwb3NlZCBBUElzLCBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgU0lEcyBhbmQgbG9jYWwgcG9saWN5LCBhbmQgbWF5YmUgc29tZSBvZiB0aGUgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMuIFRoZW4sIG5hdHVyYWxseSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRob3NlIGVsZW1lbnRzIGFyZSAqdXNlZCogYW5kICppbXBsZW1lbnRlZCouIFNvLCBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gZXhhbWluZSB0aGUgYWN0dWFsIGNvZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIFNJRCBwcm9jZXNzaW5nLCB0aGUgbG9jYWwgcG9saWN5IGFwcGxpY2F0aW9uIGxvZ2ljLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGZvcndhcmRpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgaXQgYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogIEF1dGhvcnM6XG4gICA2Olx0ICogIERhdmlkIExlYnJ1biBcdTAwM2NkYXZpZC5sZWJydW5AdWNsb3V2YWluLmJlXHUwMDNlXG4gICA3Olx0ICogIGVCUEYgc3VwcG9ydDogTWF0aGlldSBYaG9ubmV1eCBcdTAwM2NtLnhob25uZXV4QGdtYWlsLmNvbVx1MDAzZVxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcbiAgMTE6XHQjZGVmaW5lIF9ORVRfU0VHNl9MT0NBTF9IXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICAxNjpcdFxuICAxNzpcdGV4dGVybiBpbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcbiAgMTg6XHRcdFx0XHQgICAgICAgdTMyIHRibF9pZCk7XG4gIDE5Olx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAgMjA6XHRcbiAgMjE6XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlIHtcbiAgMjI6XHRcdGxvY2FsX2xvY2tfdCBiaF9sb2NrO1xuICAyMzpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gIDI0Olx0XHR1MTYgaGRybGVuO1xuICAyNTpcdFx0Ym9vbCB2YWxpZDtcbiAgMjY6XHR9O1xuICAyNzpcdFxuICAyODpcdERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbiAgMjk6XHRcbiAgMzA6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2gsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBzZWc2X2xvY2FsLmMgLSBBIERlZXAgRGl2ZSAoTGluZXMgMTM4MC0xNDcwKSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAxMzgwIHRvIDE0NzAgd2l0aGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgcHJvY2Vzc2luZyBhbmQgaGFuZGxpbmcgb2YgU2VnbWVudCBSb3V0aW5nIElQdjYgKFNSdjYpIGxvY2FsIHBvbGljaWVzLiBHaXZlbiB0aGUgZmlsZSBhbmQgdGhlIGdlbmVyYWwgYXJlYSBvZiBuZXR3b3JraW5nIEkgd29yayBpbiwgaXQmIzM5O3MgYSBzYWZlIGJldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjaHVuaywgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBmdW5jdGlvbiBjYWxscyBhbmQgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb25zIHRvIHVuZm9sZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmlzbXMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIG1haW4gZnVuY3Rpb25zIGluIHBsYXkuIElzIHRoZXJlIGFuIGlmIHN0YXRlbWVudCBvciBzb21lIHNvcnQgb2Ygc3dpdGNoIHN0YXRlbWVudCB3aXRoaW4gdGhhdCByYW5nZSB0aGF0IGRldGVybWluZXMgdGhlIGJlaGF2aW9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlLiBQZXJoYXBzIGl0IGNvbmNlcm5zIHRoZSBwYXJzaW5nIG9mIHRoZSBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIGV4dGVuc2lvbiBoZWFkZXI/IEFyZSB0aGV5IGNoZWNraW5nIGZvciBzcGVjaWZpYyBiZWhhdmlvcnMsIGxpa2UgZW5jYXBzdWxhdGlvbiBvciBkZWNhcHN1bGF0aW9uIG9mIHRoZSB0cmFmZmljPyBPciBtYXliZSB0aGlzIGludm9sdmVzIG1hbmlwdWxhdGlvbiBvZiB0aGUgcm91dGluZyB0YWJsZXMgb3IgZm9yd2FyZGluZyBkYXRhIHN0cnVjdHVyZXM/CgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBDLXNwZWNpZmljIGVsZW1lbnRzOyBwb2ludGVycywgc3RydWN0cywgYW5kIGhvcGVmdWxseSBzb21lIGtlcm5lbC1sZXZlbCBhYnN0cmFjdGlvbnMgdG8ga2VlcCBpdCByZWFkYWJsZS4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyBrZXJuZWwgY29kZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGlmIHRoaXMgaW52b2x2ZXMgYWNjZXNzaW5nIHNoYXJlZCByZXNvdXJjZXMuIExvY2tpbmcgcHJpbWl0aXZlcyDigJMgc3BpbmxvY2tzLCBtdXRleGVzLCByZWFkLXdyaXRlIGxvY2tzIOKAkyB3aWxsIGJlIGNydWNpYWwuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyB0aHJlYWQtc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBkdWUgdG8gZXhjZXNzaXZlIGxvY2tpbmcuCgpUaGVuIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgYXJlIHRoZXkgZGVhbGluZyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBpbnZhbGlkIHNlZ21lbnQgbGlzdHMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnM/IEdvb2QgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LCBlc3BlY2lhbGx5IGluIG5ldHdvcmtpbmcgY29kZSwgdG8gcHJldmVudCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYW5kIGVuc3VyZSB0aGUgc3lzdGVtJiMzOTtzIHJvYnVzdG5lc3MuIEFueSB1c2Ugb2YgYHNrYmAgKHNvY2tldCBidWZmZXIpIG9wZXJhdGlvbnMgaXMgbGlrZWx5IGhlcmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBJdCBjb3VsZCBpbnZvbHZlIHRoZSBzZXR1cCBvZiBzb21lIGtpbmQgb2YgbG9jYWwgcG9saWN5IHRvIGZvcndhcmQgcGFja2V0cy4KCkVzc2VudGlhbGx5LCBJIGFtIGdvaW5nIHRvIGlkZW50aWZ5IHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHVzZWQgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgbWluZHNldCBvZiBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzODA6XHRcbjEzODE6XHRkcm9wOlxuMTM4MjpcdFx0a2ZyZWVfc2tiKHNrYik7XG4xMzgzOlx0XHRyZXR1cm4gZXJyO1xuMTM4NDpcdH1cbjEzODU6XHRcbjEzODY6XHRERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcbjEzODc6XHRcdC5iaF9sb2NrXHQ9IElOSVRfTE9DQUxfTE9DSyhiaF9sb2NrKSxcbjEzODg6XHR9O1xuMTM4OTpcdFxuMTM5MDpcdGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTM5MTpcdHtcbjEzOTI6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4xMzkzOlx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjEzOTQ6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbjEzOTU6XHRcbjEzOTY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3JoX3N0YXRlLVx1MDAzZWJoX2xvY2spO1xuMTM5NzpcdFx0aWYgKHVubGlrZWx5KHNyaCA9PSBOVUxMKSlcbjEzOTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTM5OTpcdFxuMTQwMDpcdFx0aWYgKHVubGlrZWx5KCFzcmhfc3RhdGUtXHUwMDNldmFsaWQpKSB7XG4xNDAxOlx0XHRcdGlmICgoc3JoX3N0YXRlLVx1MDAzZWhkcmxlbiBcdTAwMjYgNykgIT0gMClcbjE0MDI6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNDAzOlx0XG4xNDA0Olx0XHRcdHNyaC1cdTAwM2VoZHJsZW4gPSAodTgpKHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gXHUwMDNlXHUwMDNlIDMpO1xuMTQwNTpcdFx0XHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgKHNyaC1cdTAwM2VoZHJsZW4gJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDMsIHRydWUpKVxuMTQwNjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjE0MDc6XHRcbjE0MDg6XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjE0MDk6XHRcdH1cbjE0MTA6XHRcbjE0MTE6XHRcdHJldHVybiB0cnVlO1xuMTQxMjpcdH1cbjE0MTM6XHRcbjE0MTQ6XHRzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXG4xNDE1Olx0XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4xNDE2Olx0e1xuMTQxNzpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xuMTQxODpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4xNDE5Olx0XHRpbnQgcmV0O1xuMTQyMDpcdFxuMTQyMTpcdFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcbjE0MjI6XHRcdGlmICghc3JoKSB7XG4xNDIzOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTQyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcdGFkdmFuY2VfbmV4dHNlZyhzcmgsIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpO1xuMTQyNzpcdFxuMTQyODpcdFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXG4xNDI5Olx0XHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcbjE0MzA6XHRcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXG4xNDMxOlx0XHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXG4xNDMyOlx0XHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxuMTQzMzpcdFx0ICovXG4xNDM0Olx0XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQzNTpcdFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuMTQzNjpcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbjE0Mzc6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuMTQzODpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjE0Mzk6XHRcbjE0NDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE0NDE6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjE0NDI6XHRcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXHUwMDNlYnBmLnByb2csIHNrYik7XG4xNDQzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0NDQ6XHRcbjE0NDU6XHRcdHN3aXRjaCAocmV0KSB7XG4xNDQ2Olx0XHRjYXNlIEJQRl9PSzpcbjE0NDc6XHRcdGNhc2UgQlBGX1JFRElSRUNUOlxuMTQ0ODpcdFx0XHRicmVhaztcbjE0NDk6XHRcdGNhc2UgQlBGX0RST1A6XG4xNDUwOlx0XHRcdGdvdG8gZHJvcDtcbjE0NTE6XHRcdGRlZmF1bHQ6XG4xNDUyOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDticGYtc2VnNmxvY2FsOiBJbGxlZ2FsIHJldHVybiB2YWx1ZSAldVxcblwmIzM0OywgcmV0KTtcbjE0NTM6XHRcdFx0Z290byBkcm9wO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4xNDU3Olx0XHRcdGdvdG8gZHJvcDtcbjE0NTg6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0NTk6XHRcbjE0NjA6XHRcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxuMTQ2MTpcdFx0XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XG4xNDYyOlx0XG4xNDYzOlx0XHRyZXR1cm4gZHN0X2lucHV0KHNrYik7XG4xNDY0Olx0XG4xNDY1Olx0ZHJvcDpcbjE0NjY6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0Njc6XHRcdGtmcmVlX3NrYihza2IpO1xuMTQ2ODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzcyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgYHNlZzZfZ2V0X3NyaGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBzZWUgKmV4YWN0bHkqIHdoYXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0YXJnZXRlZCBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgc2VnNl9nZXRfc3JoYC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYnVpbGRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGVsZW1lbnRzIGlzIGtleSBmb3IgbWUgdG8gdGhlbiBkZXRlcm1pbmUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdG8gc2VlIHdoZXJlIHRoZSBwb3RlbnRpYWwgZGVzaWduIGNob2ljZXMgaGF2ZSBiZWVuIG1hZGUsIGFzIHdlbGwgYXMgd2hlcmUgbXkgZm9jdXMgc2hvdWxkIGJlIGluIGV2YWx1YXRpbmcgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2dldF9zcmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2VnNi5oPTY3PWV4dGVybiBib29sIHNlZzZfdmFsaWRhdGVfc3JoKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBpbnQgbGVuLCBib29sIHJlZHVjZWQpO1xuaW5jbHVkZS9uZXQvc2VnNi5oOjY4OmV4dGVybiBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTc9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDIyLVxubmV0L2NvcmUvZmlsdGVyLmM6NzAyMzpcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xubmV0L2NvcmUvZmlsdGVyLmMtNzAyNC1cdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbi0tXG5uZXQvaXB2Ni9zZWc2LmM9MjY9Ym9vbCBzZWc2X3ZhbGlkYXRlX3NyaChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgaW50IGxlbiwgYm9vbCByZWR1Y2VkKVxuLS1cbm5ldC9pcHY2L3NlZzYuYy03OC1cbm5ldC9pcHY2L3NlZzYuYzo3OTpzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXG5uZXQvaXB2Ni9zZWc2LmMtODAte1xuLS1cbm5ldC9pcHY2L3NlZzYuYz0xMTI9dm9pZCBzZWc2X2ljbXBfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0KVxuLS1cbm5ldC9pcHY2L3NlZzYuYy0xMTctXHQvKiBVcGRhdGUgbmV0d29yayBoZWFkZXIgdG8gcG9pbnQgdG8gdGhlIGludm9raW5nIHBhY2tldFxubmV0L2lwdjYvc2VnNi5jOjExODpcdCAqIGluc2lkZSB0aGUgSUNNUCBwYWNrZXQsIHNvIHdlIGNhbiB1c2UgdGhlIHNlZzZfZ2V0X3NyaCgpXG5uZXQvaXB2Ni9zZWc2LmMtMTE5LVx0ICogaGVscGVyLlxuLS1cbm5ldC9pcHY2L3NlZzYuYy0xMjItXG5uZXQvaXB2Ni9zZWc2LmM6MTIzOlx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG5uZXQvaXB2Ni9zZWc2LmMtMTI0LVx0aWYgKCFzcmgpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjIwOlx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgSVA2X0ZIX0ZfU0tJUF9SSCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIxLVx0aWYgKCFzcmgpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzYtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM3Olx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM4LVx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIDApXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQ5ND1lbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MDU6c3RhdGljIGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzUxOlx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzUyLVx0c3Job2ZmID0gc3JoID8gKCh1bnNpZ25lZCBjaGFyICopc3JoIC0gc2tiLVx1MDAzZWRhdGEpIDogMDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NTM6XHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzU0LSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgc2VnNl9nZXRfc3JoYCBpbXBsZW1lbnRhdGlvbiwgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2VnNl9nZXRfc3JoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHB1bGxpbmcgdXAgdGhlIGBzZWc2X2dldF9zcmhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY2L3NlZzYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgYW5kIGhhbmRsZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgU1J2NiwgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWNrZXQgcHJvY2Vzc2luZywgc28gSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCBvcGVyYXRlcyBhdCBhIGxvdyBsZXZlbC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIHRoaW5ncyBsaWtlOiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgU1JIIHR5cGVzIChpZiBhbnkpLCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyByZXRyaWV2YWwsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHV0aWxpemVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBTUnY2IHN0YWNrLiBJJiMzOTttIGFsc28gaW50ZXJlc3RlZCBpbiBpdHMgZWZmaWNpZW5jeTsgaG93IGl0IGFjY2Vzc2VzIHRoZSBoZWFkZXIgZGV0YWlscyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIFNSdjYgcm91dGluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc1Olx0XG4gIDc2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNzc6XHR9XG4gIDc4Olx0XG4gIDc5Olx0c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxuICA4MDpcdHtcbiAgODE6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuICA4MjpcdFx0aW50IGxlbiwgc3Job2ZmID0gMDtcbiAgODM6XHRcbiAgODQ6XHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIFx1MDAyNmZsYWdzKSBcdTAwM2MgMClcbiAgODU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDg2Olx0XG4gIDg3Olx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzcmhvZmYgJiM0Mzsgc2l6ZW9mKCpzcmgpKSlcbiAgODg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDg5Olx0XG4gIDkwOlx0XHRzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG4gIDkxOlx0XG4gIDkyOlx0XHRsZW4gPSAoc3JoLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiAgOTM6XHRcbiAgOTQ6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyaG9mZiAmIzQzOyBsZW4pKVxuICA5NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgOTY6XHRcbiAgOTc6XHRcdC8qIG5vdGUgdGhhdCBwc2tiX21heV9wdWxsIG1heSBjaGFuZ2UgcG9pbnRlcnMgaW4gaGVhZGVyO1xuICA5ODpcdFx0ICogZm9yIHRoaXMgcmVhc29uIGl0IGlzIG5lY2Vzc2FyeSB0byByZWxvYWQgdGhlbSB3aGVuIG5lZWRlZC5cbiAgOTk6XHRcdCAqL1xuIDEwMDpcdFx0c3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzcmhvZmYpO1xuIDEwMTpcdFxuIDEwMjpcdFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgdHJ1ZSkpXG4gMTAzOlx0XHRcdHJldHVybiBOVUxMO1xuIDEwNDpcdFxuIDEwNTpcdFx0cmV0dXJuIHNyaDtcbiAxMDY6XHR9XG4gMTA3Olx0XG4gMTA4Olx0LyogRGV0ZXJtaW5lIGlmIGFuIElDTVAgaW52b2tpbmcgcGFja2V0IGNvbnRhaW5zIGEgc2VnbWVudCByb3V0aW5nXG4gMTA5Olx0ICogaGVhZGVyLiAgSWYgaXQgZG9lcywgZXh0cmFjdCB0aGUgb2Zmc2V0IHRvIHRoZSB0cnVlIGRlc3RpbmF0aW9uXG4gMTEwOlx0ICogYWRkcmVzcywgd2hpY2ggaXMgaW4gdGhlIGZpcnN0IHNlZ21lbnQgYWRkcmVzcy5cbiAxMTE6XHQgKi9cbiAxMTI6XHR2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpXG4gMTEzOlx0e1xuIDExNDpcdFx0X191MTYgbmV0d29ya19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlZzYgQlBGIFVwZGF0ZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcHJvYmxlbSB0aGlzIGFpbXMgdG8gc29sdmUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgc3RhdGUgd2l0aGluIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiBgc2VnNmAuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGlwdjZfZmluZF9oZHJgIHRvIGxvY2F0ZSB0aGUgU1JIIHdpdGhpbiBhIHBhY2tldCwgY2FsY3VsYXRpbmcgYW4gb2Zmc2V0LiBOb3cgdGhlIHBhdGNoIGludHJvZHVjZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBhbmQgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoZSBmaXJzdCBjaGFuZ2Ugc2ltcGxpZmllcyBTUkggcmV0cmlldmFsLCBhbmQgdGhlIHNlY29uZCBtdXN0IGJlIHNvbWUgc29ydCBvZiBwb2ludGVyIHJlLWNhbGN1bGF0aW9uOyBtb3N0IGxpa2VseSBmb3Igd2hlbiBhbiBza2IgaXMgYWRqdXN0ZWQuIFRoZSBjb25kaXRpb25hbCBoYXMgYmVlbiBzaW1wbGlmaWVkOiB3aGVyZSBiZWZvcmUgdGhlcmUgd2FzIGEgbmVnYXRpdmUgcmV0dXJuIGZyb20gYGlwdjZfZmluZF9oZHJgIHRoaXMgaXMgbm93IGhhbmRsZWQgYnkgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2VnNl9nZXRfc3JoKClgLgoKVGhlIG5leHQgcGFydCBvZiB0aGUgcGF0Y2ggdGFja2xlcyB0aGUgc2l0dWF0aW9uIGluIHdoaWNoIHdlIGFkanVzdCB0aGUgSVB2NiBoZWFkZXIsIGxpa2Ugd2hlbiBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCBvciBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYCBhY3Rpb25zIGFyZSB0YWtlbi4gUHJldmlvdXNseSBpdCBwdWxsZWQgdGhlIGhlYWRlci4gTm93LCB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHdpdGggYHBza2JfbWF5X3B1bGxgIHRvIHNlZSBpZiBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIHB1bGwsIGFuZCBpZiBub3Qgc2V0cyBgc3JoYCB0byBudWxsIGFuZCBjYWxscyBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYC4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQgZm9yIGF2b2lkaW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIEFmdGVyIGBwc2tiX21heV9wdWxsYCBzdWNjZWVkcywgdGhlcmUmIzM5O3MgYSBwdWxsIHdpdGggYF9fc2tiX3B1bGxgIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG5ldHdvcmsgaGVhZGVyLiBOb3RhYmx5LCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agc2VlbXMgdG8gYmUgY2FsbGVkICphZnRlciogaGVhZGVyIGFkanVzdG1lbnRzIGluIGJvdGggc2NlbmFyaW9zLgoKVGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gc2V2ZXJhbCBjYXNlcyBhZnRlciBTUkggcHJvY2Vzc2luZywgYW5kIGFmdGVyIHRoZSBhY3Rpb25zIHdoaWNoIGFkanVzdCB0aGUgcGFja2V0IGhlYWRlcnMuIFRoaXMgc3VnZ2VzdHMgdGhlIGludGVudCBpcyB0byB1cGRhdGUgdGhlIFNSSCBzdGF0ZSAqYWZ0ZXIqIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgcGFja2V0IHN0cnVjdHVyZS4gQ3JpdGljYWxseSwgdGhlcmUmIzM5O3Mgbm93IGFuIHVwZGF0ZSB0byB0aGUgY2FsbGluZyBjb252ZW50aW9uIG9mIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAsIHdoaWNoIGRvZXMgKm5vdCogaGFwcGVuIGluIHRoZSBlcnJvciBoYW5kbGluZyBjb2RlLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgcGF0Y2guIFRoaXMgaXMgY2xlYXJseSBhIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgU1JIIGluZm9ybWF0aW9uLiBJJiMzOTtkIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNgIGFuZCBgYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhgIHRvIHVuZGVyc3RhbmQgaG93IGBzcmhfc3RhdGVgIGlzIGJlaW5nICp1c2VkKiBiZXlvbmQganVzdCB0aGUgdXBkYXRlLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSB0cnVlIGtleSB0byBob3cgdGhlIHN0YXRlIGlzIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBieSB0aGUgQlBGIHByb2dyYW0uCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIGEgY2xlYW4tdXAsIG9wdGltaXphdGlvbiwgYW5kIGJ1Z2ZpeCByZWxhdGVkIHRvIFNSSCBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBjb250ZXh0IG9mIEJQRi1iYXNlZCBTZWdtZW50IFJvdXRpbmcsIGZvY3VzaW5nIG9uIGVuc3VyaW5nIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGF2b2lkaW5nIHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMuIFRoZSBhZGRpdGlvbiBvZiBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agc2VlbXMgdG8gYmUgdGhlIGxpbmNocGluIHRvIG1haW50YWluaW5nIGNvcnJlY3QgcG9pbnRlciB2YWx1ZXMgYWZ0ZXIgdGhlIGBza2JgIGlzIGFkanVzdGVkLCBhcyB3ZWxsIGFzIGEgbW9yZSByb2J1c3QgY2hlY2sgdG8gZGV0ZWN0IHRoZSBhYnNlbmNlIG9mIGFuIFNSSC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk3MDpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbjY5NzE6XHR9O1xuNjk3MjpcdFxuNjk3MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxuNjk3NDpcdEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuNjk3NTpcdFx0ICAgY29uc3Qgdm9pZCAqLCBmcm9tLCB1MzIsIGxlbilcbjY5NzY6XHR7XG42OTc3Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuNjk3ODpcdFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG42OTc5Olx0XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG42OTgwOlx0XHR2b2lkICpzcmhfdGx2cywgKnNyaF9lbmQsICpwdHI7XG42OTgxOlx0XHRpbnQgc3Job2ZmID0gMDtcbjY5ODI6XHRcbjY5ODM6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3JoX3N0YXRlLVx1MDAzZWJoX2xvY2spO1xuNjk4NDpcdFx0aWYgKHNyaCA9PSBOVUxMKVxuNjk4NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5ODY6XHRcbjY5ODc6XHRcdHNyaF90bHZzID0gKHZvaWQgKikoKGNoYXIgKilzcmggJiM0MzsgKChzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudCAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgNCkpO1xuNjk4ODpcdFx0c3JoX2VuZCA9ICh2b2lkICopKChjaGFyICopc3JoICYjNDM7IHNpemVvZigqc3JoKSAmIzQzOyBzcmhfc3RhdGUtXHUwMDNlaGRybGVuKTtcbjY5ODk6XHRcbjY5OTA6XHRcdHB0ciA9IHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldDtcbjY5OTE6XHRcdGlmIChwdHIgXHUwMDNlPSBzcmhfdGx2cyBcdTAwMjZcdTAwMjYgcHRyICYjNDM7IGxlbiBcdTAwM2M9IHNyaF9lbmQpXG42OTkyOlx0XHRcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuNjk5MzpcdFx0ZWxzZSBpZiAocHRyIFx1MDAzYyAodm9pZCAqKVx1MDAyNnNyaC1cdTAwM2VmbGFncyB8fFxuNjk5NDpcdFx0XHQgcHRyICYjNDM7IGxlbiBcdTAwM2UgKHZvaWQgKilcdTAwMjZzcmgtXHUwMDNlc2VnbWVudHMpXG42OTk1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuNjk5NjpcdFxuNjk5NzpcdFx0aWYgKHVubGlrZWx5KGJwZl90cnlfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCAmIzQzOyBsZW4pKSlcbjY5OTg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG42OTk5Olx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwMDA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDAxOlx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzcmhvZmYpO1xuNzAwMjpcdFxuNzAwMzpcdFx0bWVtY3B5KHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCwgZnJvbSwgbGVuKTtcbjcwMDQ6XHRcdHJldHVybiAwO1xuNzAwNTpcdH1cbjcwMDY6XHRcbjcwMDc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcbjcwMDg6XHRcdC5mdW5jXHRcdD0gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLFxuNzAwOTpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuNzAxMDpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuNzAxMTpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbjcwMTI6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuNzAxMzpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG43MDE0Olx0XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRVxuNzAxNTpcdH07XG43MDE2Olx0XG43MDE3Olx0c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjcwMTg6XHR7XG43MDE5Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBjaXJjbGluZyBiYWNrIHRvIGBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaGAuIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBvbmUgc3BlY2lmaWNhbGx5LiBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgTFdUIGluZnJhc3RydWN0dXJlLCBidXQgdGhpcyBmdW5jdGlvbiYjMzk7cyBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsIGZyYW1ld29yay4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBtYW5pcHVsYXRpbmcgdGhlIFNSSCB3aXRoaW4gYSBCUEYgcHJvZ3JhbSBvZmZlcnMgc2lnbmlmaWNhbnQgcG93ZXIgYnV0IGFsc28gaW50cm9kdWNlcyBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGluIHRlcm1zIG9mIHBhY2tldCBtb2RpZmljYXRpb24gYW5kIGhlYWRlciB2YWxpZGl0eS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgdXNlIGNhc2VzIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgZm9yPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgaXQgaW4gaGFuZGxpbmcgdmFyaW91cyBTUkggY29uZmlndXJhdGlvbnMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhcGF0aCBhbmQgZW5zdXJlIGl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbnRlbmRlZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byBwb3RlbnRpYWwgbGltaXRhdGlvbnMgYW5kIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIHNlY3VyaXR5IGhhcmRlbmluZyBtaWdodCBiZSBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcxMDg6XHRCUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuNzEwOTpcdFx0ICAgczMyLCBsZW4pXG43MTEwOlx0e1xuNzExMTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcxMTI6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzExMzpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuNzExNDpcdFx0dm9pZCAqc3JoX2VuZCwgKnNyaF90bHZzLCAqcHRyO1xuNzExNTpcdFx0c3RydWN0IGlwdjZoZHIgKmhkcjtcbjcxMTY6XHRcdGludCBzcmhvZmYgPSAwO1xuNzExNzpcdFx0aW50IHJldDtcbjcxMTg6XHRcbjcxMTk6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3JoX3N0YXRlLVx1MDAzZWJoX2xvY2spO1xuNzEyMDpcdFx0aWYgKHVubGlrZWx5KHNyaCA9PSBOVUxMKSlcbjcxMjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MTIyOlx0XG43MTIzOlx0XHRzcmhfdGx2cyA9ICh2b2lkICopKCh1bnNpZ25lZCBjaGFyICopc3JoICYjNDM7IHNpemVvZigqc3JoKSAmIzQzO1xuNzEyNDpcdFx0XHRcdCgoc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDQpKTtcbjcxMjU6XHRcdHNyaF9lbmQgPSAodm9pZCAqKSgodW5zaWduZWQgY2hhciAqKXNyaCAmIzQzOyBzaXplb2YoKnNyaCkgJiM0MztcbjcxMjY6XHRcdFx0XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuKTtcbjcxMjc6XHRcdHB0ciA9IHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldDtcbjcxMjg6XHRcbjcxMjk6XHRcdGlmICh1bmxpa2VseShwdHIgXHUwMDNjIHNyaF90bHZzIHx8IHB0ciBcdTAwM2Ugc3JoX2VuZCkpXG43MTMwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNzEzMTpcdFx0aWYgKHVubGlrZWx5KGxlbiBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgKHZvaWQgKikoKGNoYXIgKilwdHIgLSBsZW4pIFx1MDAzZSBzcmhfZW5kKSlcbjcxMzI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG43MTMzOlx0XG43MTM0Olx0XHRpZiAobGVuIFx1MDAzZSAwKSB7XG43MTM1Olx0XHRcdHJldCA9IHNrYl9jb3dfaGVhZChza2IsIGxlbik7XG43MTM2Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuNzEzNzpcdFx0XHRcdHJldHVybiByZXQ7XG43MTM4Olx0XG43MTM5Olx0XHRcdHJldCA9IGJwZl9za2JfbmV0X2hkcl9wdXNoKHNrYiwgb2Zmc2V0LCBsZW4pO1xuNzE0MDpcdFx0fSBlbHNlIHtcbjcxNDE6XHRcdFx0cmV0ID0gYnBmX3NrYl9uZXRfaGRyX3BvcChza2IsIG9mZnNldCwgLTEgKiBsZW4pO1xuNzE0MjpcdFx0fVxuNzE0MzpcdFxuNzE0NDpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuNzE0NTpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG43MTQ2Olx0XHRcdHJldHVybiByZXQ7XG43MTQ3Olx0XG43MTQ4Olx0XHRoZHIgPSAoc3RydWN0IGlwdjZoZHIgKilza2ItXHUwMDNlZGF0YTtcbjcxNDk6XHRcdGhkci1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbjcxNTA6XHRcbjcxNTE6XHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuNzE1MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcxNTM6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MTU0Olx0XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuICYjNDM7PSBsZW47XG43MTU1Olx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSBmYWxzZTtcbjcxNTY6XHRcdHJldHVybiAwO1xuNzE1NzpcdH1cbjcxNTg6XHRcbjcxNTk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuNzE2MDpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCxcbjcxNjE6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjcxNjI6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjcxNjM6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG43MTY0Olx0XHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbjcxNjU6XHRcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuNzE2NjpcdH07XG43MTY3Olx0I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBGaXggaW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIFRoZSBwcmltYXJ5IGZvY3VzIHNlZW1zIHRvIGJlIHNhZmVndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzdGFsZSBkYXRhIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgd2FzIGdvaW5nIHdyb25nLCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgY2hhbmdlcy4KCkluaXRpYWxseSwgd2l0aCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAsIHRoZSBjb2RlIHdhcyBwdWxsaW5nIGFuIGlubmVyIElQdjYgaGVhZGVyIHdpdGggYHBza2JfcHVsbGAuIEhvd2V2ZXIsIGEgY3J1Y2lhbCBvdmVyc2lnaHQgd2FzIHRoYXQgaXQgKndhc24mIzM5O3QqIHZlcmlmeWluZyBpZiB0aGUgaGVhZGVyIHdhcyAqYWN0dWFsbHkqIHByZXNlbnQgd2l0aGluIHRoZSBsaW5lYXIgYnVmZmVyIGFmdGVyIHRoZSBgaGRyb2ZmYCBvZmZzZXQgd2l0aCBgcHNrYl9tYXlfcHVsbGAsIHNvIHRoZXJlIGNvdWxkIGJlIGEgZGF0YSBjb3B5IGFuZCBhbGxvY2F0aW9uIHRvIHB1bGwgaXQgaW4uIEZ1cnRoZXJtb3JlLCB0aGVyZSB3YXMgYW4gaXNzdWUgd2hlcmUsIGlmIGBwc2tiX21heV9wdWxsYCBmYWlsZWQgb3IgcmVhbGxvY2F0ZWQgdGhlIGBza2JgIGhlYWQsIHRoZSBgc3JoX3N0YXRlYCBvciB0aGUgcmVzdWx0cyBvZiBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agd291bGQgaGF2ZSBwb2ludGVkIHRvIHN0YWxlIG1lbW9yeS4KClNpbWlsYXJseSwgaW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgdGhlIGNvZGUgdXNlZCBgaXB2Nl9maW5kX2hkcmAgdG8gbG9jYXRlIHRoZSBTUkggYnV0IGRpZCBub3QgYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBgaXB2Nl9maW5kX2hkcmAgZG9lc24mIzM5O3QgdmFsaWRhdGUgdGhlIFNSSCYjMzk7cyBwcmVzZW5jZSBpbiB0aGUgbGluZWFyIHNrYiBkYXRhLCBub3IgaWYgdGhlIFNSSCBpcyB2YWxpZCEgSXQgd2FzIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgU1JIIHRocm91Z2ggYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzcmhvZmZgIHdoaWNoIGNvdWxkIGVhc2lseSBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpZiB0aGUgU1JIIHdhc24mIzM5O3QgcHJvcGVybHkgcHVsbGVkIG9yIHZhbGlkYXRlZC4gVGhlIGBzZWc2X2dldF9zcmhgIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgdGhpcyB2aWEgYHBza2JfbWF5X3B1bGxgIGFuZCBmdWxsIFNSSCB2YWxpZGF0aW9uLgoKSSBhbHNvIHNlZSB0aGF0IGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCBpcyBub3cgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBpbiBzb21lIGNvbnRleHRzIChsaWtlIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZgIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYCksIGFuZCBpcyBhbHNvIGNhbGxlZCBhZnRlciBjYWxscyB0aGF0IHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgc2tiLCBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgdG8gZW5zdXJlIGBzcmhfc3RhdGVgIGlzIHVwZGF0ZWQuCgpTbywgdGhlIGZpeCBpbnRyb2R1Y2VzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgdG8gdmFsaWRhdGUgaGVhZGVyIHByZXNlbmNlIGFuZCAqdGhlbiogdGhlIHVzZSBvZiBgc2VnNl9nZXRfc3JoYCB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgU1JILCB0aGVyZWJ5IHJlZHVjaW5nIHRoZSBjaGFuY2VzIG9mIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBhbHNvIGluY29ycG9yYXRlcyBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYCBhZnRlciBhbnkgcG90ZW50aWFsIGBza2JgIHJlYWxsb2NhdGlvbnMgdHJpZ2dlcmVkIGJ5IGBwc2tiX21heV9wdWxsYC4gVGhlc2UgcG9pbnRzIGFyZSBrZXkuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBtZW1vcnkgc2FmZXR5LiBUaGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBydW4gaXQgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipObyB1c2VyLXNwYWNlIGRhdGEgbGVha3MuKiogVGhpcyBwYXRjaCBhdm9pZHMgYW55IGNvcHktdG8tdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMgb3IgaW5mby1sZWFrcywgc28gd2UgY2FuIGNyb3NzIHRoYXQgb25lIG9mZi4KMi4gICoqTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4qKiBUaGUgYHNyaGAgYW5kIGBzcmhfc3RhdGVgIHN0cnVjdCBmaWVsZHMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIGBoZHJvZmZgIGlzIGFzc2lnbmVkIGFuZCBkZWZpbmVkLiBTbyB0aGF0JiMzOTtzIHNhZmUuCjMuICAqKk5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24uKiogTm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkLCB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4uCjQuICAqKk5vIGJvdW5kcyBjaGVjayBpc3N1ZXMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuKiogVGhlIGZpeCBhY3R1YWxseSBhZGRzICpzdHJpY3RlciogY2hlY2tzLCBsaWtlIGBwc2tiX21heV9wdWxsYCBhbmQgYHNlZzZfZ2V0X3NyaGAsIGVuc3VyaW5nIHRoYXQgc2tiIGRhdGEgcG9pbnRlcnMgYXJlIHVwZGF0ZWQgYWZ0ZXIgcmVhbGxvY2F0aW9ucy4gVGhpcyBpcyBhY3R1YWxseSAqaW1wcm92aW5nKiBib3VuZHMgY2hlY2tpbmcuCgpTbywgYmFzZWQgb24gdGhpcywgS01TQU4gaXNuJiMzOTt0IHdhcnJhbnRlZC4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzdGFsZSBwb2ludGVyIGlzc3VlcyBkdWUgdG8gYHBza2JfcHVsbGAgYW5kIGBwc2tiX21heV9wdWxsYCDigJMgY29tbW9uIEtBU0FOIHRlcnJpdG9yeS4gS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVzdWx0aW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHJldmlzaXQgd2hhdCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYCBkb2VzIGV4YWN0bHkuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnksIGFuZCBjb25maXJtIGl0IGhhbmRsZXMgcmVjb21wdXRlZCBgc2tiYCBoZWFkZXIgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYz01Mz1uZXRraXRfcnVuKGNvbnN0IHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTU5LVx0YnBmX21wcm9nX2ZvcmVhY2hfcHJvZyhlbnRyeSwgZnAsIHByb2cpIHtcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjYwOlx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5kcml2ZXJzL25ldC9uZXRraXQuYy02MS1cdFx0cmV0ID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD05NDE9c3RhdGljIGlubGluZSB2b2lkIGJwZl9uZXRfY3R4X2dldF9hbGxfdXNlZF9mbHVzaF9saXN0cyhzdHJ1Y3QgbGlzdF9oZWFkICoqbGhfbWFwLFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTczLSAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo5NzQ6c3RhdGljIGlubGluZSB2b2lkIGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTc1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTk4Mz1zdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ19ydW5fZGF0YV9wb2ludGVycyhcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTk5My1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTk0Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05OTUtXHRyZXMgPSBicGZfcHJvZ19ydW4ocHJvZywgc2tiKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEwMDItXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEwMDM6LyogU2ltaWxhciB0byBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKCksIGV4Y2VwdCB0aGF0IHNhdmUgb3JnaW5hbFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMDA0LSAqIGRhdGEgaW4gY2ItXHUwMDNlZGF0YSBhbmQgY2ItXHUwMDNlbWV0YV9kYXRhIGZvciByZXN0b3JlLlxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTExOTgtXHRpZiAoaXNfZGlyZWN0X3BrdF9hY2Nlc3MpXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTE5OTpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEyMDAtXG4tLVxubmV0L2NvcmUvZGV2LmM9NDQ5Mj10Y3hfcnVuKGNvbnN0IHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTQ1MDEtXHRicGZfbXByb2dfZm9yZWFjaF9wcm9nKGVudHJ5LCBmcCwgcHJvZykge1xubmV0L2NvcmUvZGV2LmM6NDUwMjpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZGV2LmMtNDUwMy1cdFx0cmV0ID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTY5Mj1zdGF0aWMgaW5saW5lIGludCBicGZfdHJ5X21ha2Vfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xNjk2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTY5NzpcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTE2OTgtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTMyOTg9QlBGX0NBTExfMyhicGZfc2tiX3ZsYW5fcHVzaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHZsYW5fcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzMxMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTI6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0zMzEzLVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zMzI1PUJQRl9DQUxMXzEoYnBmX3NrYl92bGFuX3BvcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTMzMzItXG5uZXQvY29yZS9maWx0ZXIuYzozMzMzOlx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtMzMzNC1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzQ5ND1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzUxOS1cdHJldCA9IGJwZl9za2JfcHJvdG9feGxhdChza2IsIHByb3RvKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjM1MjA6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0zNTIxLVx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzctXG5uZXQvY29yZS9maWx0ZXIuYzozOTM4Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtMzkzOS1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDAyOT1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzMtXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM0Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDAzNS1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDA5Nj1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX2hlYWQsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBoZWFkX3Jvb20sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDEwMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQxMDE6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy00MTAyLVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02ODgwPXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MDMtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTA0Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjkwNS1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjMtXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMjQ6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy03MDI1LVx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDMzPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNjQtXHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG5uZXQvY29yZS9maWx0ZXIuYzo3MDY1Olx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNjYtXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDg9QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTQzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNDUtXHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmM9Mzk9c3RhdGljIGludCBydW5fbHd0X2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2x3dF9wcm9nICpsd3QsXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTQ5LVx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXHUwMDI2X19icGZfbmV0X2N0eCk7XG5uZXQvY29yZS9sd3RfYnBmLmM6NTA6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9sd3RfYnBmLmMtNTEtXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihsd3QtXHUwMDNlcHJvZywgc2tiKTtcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmM9NjA1PWludCBicGZfbHd0X3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTY1Ny1cdG1lbWNweShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaGRyLCBsZW4pO1xubmV0L2NvcmUvbHd0X2JwZi5jOjY1ODpcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2x3dF9icGYuYy02NTktXHRza2JfY2xlYXJfaGFzaChza2IpO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ0MC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDQxOlx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDItXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVx1MDAzZWJwZi5wcm9nLCBza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM0MAoJCQkJCQkJb3V0cHV0OiAzMjMKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgZUJQRiBEYXRhIFBvaW50ZXIgSGFuZGxpbmcqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gSXQgc2VlbXMgbGlrZSB0aGUgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGtlZXBpbmcgZUJQRiBwcm9ncmFtcyBzYWZlIHdoZW4gdGhleSYjMzk7cmUgYWNjZXNzaW5nIHBhY2tldCBkYXRhIGRpcmVjdGx5IHZpYSBgY2ItJmd0O2RhdGFgIGFuZCBgY2ItJmd0O2RhdGFfZW5kYC4gVGhlc2UgcG9pbnRlcnMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIHBhY2tldCBkaXJlY3QgYWNjZXNzIHdpdGhpbiBlQlBGIHByb2dyYW1zLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gdGhlIHBhY2tldCBidWZmZXIgKGBza2JgKSBnZXRzIG1hbmlwdWxhdGVkLCBzYXkgd2l0aCBzb21ldGhpbmcgbGlrZSBhIGBwc2tiX21heV9wdWxsYCBvcGVyYXRpb24gKGFzIHNlZW4gaW4gYHNlZzZfZ2V0X3NyaGApLCB0aGUgdW5kZXJseWluZyBtZW1vcnkgY2FuIHNoaWZ0IGFyb3VuZC4gSWYgd2UgKmRvbiYjMzk7dCogdXBkYXRlIHRob3NlIGRhdGEgcG9pbnRlcnMgd2l0aCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2AgaW4gdGhlc2Ugc2l0dWF0aW9ucywgZUJQRiBwcm9ncmFtcyBvciB0aGVpciBoZWxwZXIgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSByZWFkaW5nIG9yIHdyaXRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgbG9jYXRpb25zLiBUaGlzIGxlYWRzIGRpcmVjdGx5IHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIOKAkyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJJiMzOTt2ZSByZWFkLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBsaWtlIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHNvbGVseSBhYm91dCAqcHJldmVudGluZyogbWVtb3J5IGVycm9ycyBpbiB0aGUgZmlyc3QgcGxhY2UsIGVuc3VyaW5nIHRoYXQgZUJQRiBwcm9ncmFtcyBhcmUgb3BlcmF0aW5nIHdpdGggdmFsaWQgZGF0YSBwb2ludGVycy4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTt2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHRvb2wuIEkgbmVlZCB0bzoKCjEuICBDYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wganVzdCBvbmNlLgoyLiAgUHJvdmlkZSB0aGUgY29udHJhc3QgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uCjMuICBLZWVwIHRoZSBvdXRwdXQgY2xlYXIgYW5kIGRldGFpbGVkLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTttIHJlYWR5IHRvIG1ha2UgdGhlIHRvb2wgY2FsbCBhbmQgZG9jdW1lbnQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgbWFudWFsIFNSSCBsb29rdXBzIHdpdGggYHNlZzZfZ2V0X3NyaCgpYCAod2hpY2ggcGVyZm9ybXMgcHJvcGVyIGBwc2tiX21heV9wdWxsYCBhbmQgdmFsaWRhdGVzIHRoZSBTUkgpLCBlbnN1cmVzIEJQRiBwYWNrZXQgZGF0YSBwb2ludGVycyAoYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgKSBhcmUgcmVjYWxjdWxhdGVkIHdoZW4gc2tiIGxpbmVhciBidWZmZXJzIG1heSBiZSByZWFsbG9jYXRlZCBkdXJpbmcgaGVhZGVyIHB1bGxzLCBhbmQgYWRkcyBtaXNzaW5nIGJvdW5kcyB2YWxpZGF0aW9uIChgcHNrYl9tYXlfcHVsbGApIGJlZm9yZSBwdWxsaW5nIElQdjYgaGVhZGVycy5cblxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXG5cblRoZSBwYXRjaCBkb2VzIG5vdDpcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cbjIuIEV4cG9zZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLlxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXG5cblRoZSBidWdzIGFuZCByaXNrcyBhZGRyZXNzZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgYW5kIHVzZS1hZnRlci1mcmVlL3N0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGNhdXNlZCBieSBza2IgYnVmZmVyIHJlYWxsb2NhdGlvbiBvciBtaXNzaW5nIGxpbmVhciBidWZmZXIgY2hlY2tzLiBUaGVzZSBmYWlsdXJlIG1vZGVzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoYW5kIFVCIHNhbml0aXplcnMpLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3Q6XG4xLiBBbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMuXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cbjMuIEludHJvZHVjZSBicmFuY2hpbmcgb3IgY29udHJvbCBmbG93IHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG40LiBNb2RpZnkgbGVuZ3RocyBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjQ3OjQ4LjQ0MTgzOTA3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjgzODA1OTUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJzZWc2X2JwZl9oYXNfdmFsaWRfc3JoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGZ1bmN0aW9ucyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCByZXBsYWNlcyBtYW51YWwgU1JIIGxvb2t1cHMgd2l0aCBgc2VnNl9nZXRfc3JoKClgICh3aGljaCBwZXJmb3JtcyBwcm9wZXIgYHBza2JfbWF5X3B1bGxgIGFuZCB2YWxpZGF0ZXMgdGhlIFNSSCksIGVuc3VyZXMgQlBGIHBhY2tldCBkYXRhIHBvaW50ZXJzIChgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2ApIGFyZSByZWNhbGN1bGF0ZWQgd2hlbiBza2IgbGluZWFyIGJ1ZmZlcnMgbWF5IGJlIHJlYWxsb2NhdGVkIGR1cmluZyBoZWFkZXIgcHVsbHMsIGFuZCBhZGRzIG1pc3NpbmcgYm91bmRzIHZhbGlkYXRpb24gKGBwc2tiX21heV9wdWxsYCkgYmVmb3JlIHB1bGxpbmcgSVB2NiBoZWFkZXJzLlxcblxcblRoZSBidWdzIGFuZCByaXNrcyBhZGRyZXNzZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgYW5kIHVzZS1hZnRlci1mcmVlL3N0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGNhdXNlZCBieSBza2IgYnVmZmVyIHJlYWxsb2NhdGlvbiBvciBtaXNzaW5nIGxpbmVhciBidWZmZXIgY2hlY2tzLiBUaGVzZSBmYWlsdXJlIG1vZGVzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoYW5kIFVCIHNhbml0aXplcnMpLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdDpcXG4xLiBBbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMuXFxuMi4gRXhwb3NlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMuXFxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG40LiBNb2RpZnkgbGVuZ3RocyBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBTUkggc3RhdGUgaGFuZGxpbmcgYW5kIHNrYiBsaW5lYXIgYnVmZmVyIHZhbGlkYXRpb24gKHBza2JfbWF5X3B1bGwgaW5zdGVhZCBvZiBwc2tiX3B1bGwpIGluIHRoZSBTUnY2IEJQRiBoZWxwZXIgYnBmX2x3dF9zZWc2X2FjdGlvbi4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBhbmQgQlBGIHBhY2tldCBoYW5kbGluZyBwYXRocyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDc6NDguNDQxODQ0OTIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI2MDY3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3Yzg4NjBlMzMyMzRiYzY4ZDkxZTVlMmEyM2ZmY2M1MTA4NzRjN2VkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDc6NDc6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFkZDNhNjg1ZDFiODkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC03MDE4LDE1ICs3MDE4LDE2IEBAIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG4gXFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4tXFx0aW50IHNyaG9mZiA9IDA7XFxuK1xcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiBcXG4tXFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXFx1MDAzZWRhdGEgKyBzcmhvZmYpO1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4tXFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuLVxcdH1cXG4rXFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuK1xcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4rXFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuK1xcdGlmICghc3JoKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuK1xcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiB9XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG5AQCAtNzA1OSwxNSArNzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFxuIFxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4tXFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxcbitcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xcbitcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuK1xcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXHRcXHR9XFxuK1xcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbiBcXG4gXFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XFxuIFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiBcXG4tXFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbiBcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbiBcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG5AQCAtNzA3NSw4ICs3MDc5LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4gXFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuLVxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbitcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XFxuQEAgLTcwODQsOCArNzA4Nyw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuIFxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuLVxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbitcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDc6NDguOTc1NDE3NzIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MzM1MzY5Mjg4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJzZWc2X2JwZl9oYXNfdmFsaWRfc3JoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgU1JIIHN0YXRlIGhhbmRsaW5nIGFuZCBza2IgbGluZWFyIGJ1ZmZlciB2YWxpZGF0aW9uIChwc2tiX21heV9wdWxsIGluc3RlYWQgb2YgcHNrYl9wdWxsKSBpbiB0aGUgU1J2NiBCUEYgaGVscGVyIGJwZl9sd3Rfc2VnNl9hY3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgYW5kIEJQRiBwYWNrZXQgaGFuZGxpbmcgcGF0aHMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjODg2MGUzMzIzNGJjNjhkOTFlNWUyYTIzZmZjYzUxMDg3NGM3ZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjQ3OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uMWRkM2E2ODVkMWI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTgsMTUgKzcwMTgsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbitcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFxuLVx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXHUwMDNjIDApIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSArIHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbitcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuK1x0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbitcdGlmICghc3JoKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbitcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4gfVxuIFxuIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTcwNTksMTUgKzcwNjAsMTggQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXG4gXHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbi1cdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuK1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG4gXG4gXHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuIFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIFxuLVx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4gXHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbkBAIC03MDc1LDggKzcwNzksNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XG5AQCAtNzA4NCw4ICs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVmYXVsdDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjQ3OjQ4Ljk3NTQyMDAyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3MDM1Nzg2NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBpZGVudGlmaWVkOiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCBgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCAuLi4pYCDigJMgdGhhdCBgbHd0X3NlZzZfYWN0aW9uYCBjYWxsIHJhaXNlcyBteSBleWVicm93cyBhIGJpdDsgaXQgbGlrZWx5IHRvdWNoZXMgbG93LWxldmVsIElQdjYgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2Nikgb3IgSVB2NiBMaWdodHdlaWdodCBUdW5uZWxpbmcuXG5cbk15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJJ2xsIHJlYWNoIGZvciBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYCBvciwgcHJvYmFibHkgcXVpY2tlciBhbmQgbW9yZSBlZmZpY2llbnQgZm9yIHRoaXMsIEkgd2lsbCB1c2UgYGdyZXBwZXJgLiBJIG5lZWQgdG8gZW5zdXJlIEkgY2hlY2sgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zIHRvbyDigJMgZXNwZWNpYWxseSB0aG9zZSB0b3VjaGluZyBJUHY2LCBTRUc2L1NSdjYsIGFuZCwgaW1wb3J0YW50bHksIEJQRiBoZWxwZXJzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuXG5UaGVuIEknbGwgZm9jdXMgdGhlIGBncmVwcGVyYCBxdWVyaWVzLiBJJ2xsIGRyaWxsIGRvd24gb24gZWl0aGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBvciBgc2VnNl9icGZfc3JoX3N0YXRlc2AgYmVjYXVzZSB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGlzIHdpbGwgcXVpY2tseSByZXZlYWwgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHN0YXRlcyBhcmUgaW52b2x2ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGhhbmRsZSBvbiB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo0OToyNi4wMTEyMDk1OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjUyMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDMzOkJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzQtXFx0ICAgdTMyLCBhY3Rpb24sIHZvaWQgKiwgcGFyYW0sIHUzMiwgcGFyYW1fbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDk5OlxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfYWN0aW9uLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMDAtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDc9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA1My1cXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcXG5uZXQvY29yZS9maWx0ZXIuYzo5MDU0OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy05MDU1LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDk6MjYuNTE5NDcwOTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc4MzU2NDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQlBGIGFuZCBTUnY2IEludGVncmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGFyZSBoYW5kbGVkIHdpdGhpbiBCUEYuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIEtjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHRoZWlyIGluY2x1c2lvbiBvciBhY3RpdmF0aW9uLiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEkgc3VzcGVjdCB0aGF0IHNpbmNlIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgd2l0aGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AtLUknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA3MDAwLiBUaGF0J3MgdXN1YWxseSB0aGUgaGVhcnQgb2YgdGhlIEJQRiBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGFzcGVjdHMgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo0OTozMS4zMDMwMzcwNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjk5MDpcXHRcXHRwdHIgPSBza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQ7XFxuNjk5MTpcXHRcXHRpZiAocHRyIFxcdTAwM2U9IHNyaF90bHZzIFxcdTAwMjZcXHUwMDI2IHB0ciArIGxlbiBcXHUwMDNjPSBzcmhfZW5kKVxcbjY5OTI6XFx0XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbjY5OTM6XFx0XFx0ZWxzZSBpZiAocHRyIFxcdTAwM2MgKHZvaWQgKilcXHUwMDI2c3JoLVxcdTAwM2VmbGFncyB8fFxcbjY5OTQ6XFx0XFx0XFx0IHB0ciArIGxlbiBcXHUwMDNlICh2b2lkICopXFx1MDAyNnNyaC1cXHUwMDNlc2VnbWVudHMpXFxuNjk5NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0aWYgKHVubGlrZWx5KGJwZl90cnlfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbikpKVxcbjY5OTg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNjk5OTpcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwMDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzAwMTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MDAyOlxcdFxcbjcwMDM6XFx0XFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgZnJvbSwgbGVuKTtcXG43MDA0OlxcdFxcdHJldHVybiAwO1xcbjcwMDU6XFx0fVxcbjcwMDY6XFx0XFxuNzAwNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG43MDA4OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXFxuNzAwOTpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjcwMTA6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG43MDExOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbjcwMTI6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbjcwMTM6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjcwMTQ6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuNzAxNTpcXHR9O1xcbjcwMTY6XFx0XFxuNzAxNzpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTg6XFx0e1xcbjcwMTk6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDIwOlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAyMTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG43MDIyOlxcdFxcbjcwMjM6XFx0XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuNzAyNDpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzAyNTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG43MDI2OlxcdFxcdGlmICghc3JoKVxcbjcwMjc6XFx0XFx0XFx0cmV0dXJuO1xcbjcwMjg6XFx0XFxuNzAyOTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuNzAzMDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG43MDMxOlxcdH1cXG43MDMyOlxcdFxcbjcwMzM6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuNzAzNDpcXHRcXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuNzAzNTpcXHR7XFxuNzAzNjpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMzc6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDM4OlxcdFxcdGludCBoZHJvZmYgPSAwO1xcbjcwMzk6XFx0XFx0aW50IGVycjtcXG43MDQwOlxcdFxcbjcwNDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG43MDQyOlxcdFxcdHN3aXRjaCAoYWN0aW9uKSB7XFxuNzA0MzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxcbjcwNDQ6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA0NjpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxcbjcwNDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA0ODpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIChzdHJ1Y3QgaW42X2FkZHIgKilwYXJhbSwgMCk7XFxuNzA0OTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo0OTozMS4zMDM4OTQ0MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTM5NjQ3ODE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGNvbnN0cnVjdC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgdHJhY2sgZG93biBpdHMgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgaXRzIHNjb3BlLCBhbmQgaG93IGl0J3MgYWN0dWFsbHkgdXNlZC4gSXMgaXQgYSBnbG9iYWwgdmFyaWFibGU/IEEgc3RydWN0PyBBIG1hY3JvPyBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoaXMgdGhpbmcuXG5cbkJleW9uZCBqdXN0IHRoZSBkZWZpbml0aW9uLCBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyBhbnkgYCNpZmRlZmAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IGluY2x1ZGUgb3IgZXhjbHVkZSB0aGlzIHZhcmlhYmxlIGJhc2VkIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IGFjdGl2ZS4gRGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucywgbW9kdWxlcywgb3IgZmVhdHVyZXMgZW5hYmxlZCBjYW4gaGF2ZSBhIGh1Z2UgaW1wYWN0IG9uIHRoaXMgc29ydCBvZiBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gaXMgY3JpdGljYWwgdG8gYWN0dWFsbHkgdW5kZXJzdGFuZGluZyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDk6NDIuNzAwMzc1MjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjY4NzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2JwZl9zcmhfc3RhdGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Njk3ND1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzctXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo2OTc4OlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3OS1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAxOS1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMjA6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDIxLVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzAzMz1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzYtXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDM3OlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzOC1cXHRpbnQgaGRyb2ZmID0gMDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDg9QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTEtXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTEyOlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMy1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzNTY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4NS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM4NjpERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4Ny1cXHQuYmhfbG9ja1xcdD0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM5Mi1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzkzOlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTQtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDMzLVxcdCAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDM0OlxcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDM1OlxcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MzYtXFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Ny1cXHRcXHRnb3RvIGRyb3A7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTg6XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1OS1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY1LWRyb3A6XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NjY6XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2Ny1cXHRrZnJlZV9za2Ioc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDk6NDIuODIzMDY3MTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2NDIyMjgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2VnNl9sb2NhbC5jYCBtb2R1bGUgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb24gYElQVjZfU0VHNl9MV1RVTk5FTGAgb3IgYElQVjZfU0VHNl9CUEZgLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3B0aW9ucyBjb250cm9sIGl0cyBpbmNsdXNpb24uIFRoZW4sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZS4gTGV0J3Mgc2VlLi4uSSdsbCBzZWFyY2ggZm9yIGBzZWc2X2xvY2FsLm9gIHdpdGhpbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIHNob3cgbWUgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJ20gc3VyZSBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJ2QgbGlrZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUwOjI2LjQ2NTI5OTEzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NzEyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9NTA4PWludCBfX2luaXQgc2VnNl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmMtNTIzLVxcbm5ldC9pcHY2L3NlZzYuYzo1MjQ6XFx0ZXJyID0gc2VnNl9sb2NhbF9pbml0KCk7XFxubmV0L2lwdjYvc2VnNi5jLTUyNS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jPTU0MT12b2lkIHNlZzZfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzYuYy01NDIte1xcbm5ldC9pcHY2L3NlZzYuYzo1NDM6XFx0c2VnNl9sb2NhbF9leGl0KCk7XFxubmV0L2lwdjYvc2VnNi5jLTU0NC1cXHRzZWc2X2lwdHVubmVsX2V4aXQoKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMzojaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNl9sb2NhbC5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2FkZHJjb25mLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzAtI2VuZGlmXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjMxOiNpbmNsdWRlIFxcdTAwM2NuZXQvc2VnNl9sb2NhbC5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Mzg6c3RydWN0IHNlZzZfbG9jYWxfbHd0O1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDAtLyogY2FsbGJhY2tzIHVzZWQgZm9yIGN1c3RvbWl6aW5nIHRoZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YgYSBiZWhhdmlvciAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MTpzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3R1bm5lbF9vcHMge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MjpcXHRpbnQgKCpidWlsZF9zdGF0ZSkoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTQzLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjQ0OlxcdHZvaWQgKCpkZXN0cm95X3N0YXRlKShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00NS19O1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQ3PXN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02NC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NjU6XFx0aW50ICgqaW5wdXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY2LVxcdGludCBzdGF0aWNfaGVhZHJvb207XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo2ODpcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3R1bm5lbF9vcHMgc2x3dF9vcHM7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY5LX07XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQyPXN0cnVjdCBzZWc2X2VuZF9kdF9pbmZvIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTctXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODpzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzIHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5LVxcdHU2NF9zdGF0c190IHBhY2tldHM7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY5LSAqIHZhbHVlcyBhZnRlciB0aGUgcGVyLUNQVSBjb3VudGVyIGV2YWx1YXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzA6ICogRmluYWxseSwgZWFjaCBjb3VudGVyIHZhbHVlIChpbiBzZWc2X2xvY2FsX2NvdW50ZXJzKSBpcyBzdG9yZWQgaW4gdGhlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MS0gKiBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIGFuZCBzZW50IHRvIHVzZXIgc3BhY2UuXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc0LSAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzU6c3RydWN0IHNlZzZfbG9jYWxfY291bnRlcnMge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzYtXFx0X191NjQgcGFja2V0cztcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODAtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTojZGVmaW5lIHNlZzZfbG9jYWxfYWxsb2NfcGNwdV9jb3VudGVycyhfX2dmcClcXHRcXHRcXHRcXHRcXFxcXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MjpcXHRfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMsXFx0XFxcXFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODMtXFx0XFx0XFx0XFx0ICAoKF9fZ2ZwKSB8IF9fR0ZQX1pFUk8pKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Ni1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg3OnN0cnVjdCBzZWc2X2xvY2FsX2x3dCB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4OC1cXHRpbnQgYWN0aW9uO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAxOlxcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgX19wZXJjcHUgKnBjcHVfY291bnRlcnM7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMi1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTAtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIxMTpzdGF0aWMgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzZWc2X2xvY2FsX2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTIte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTM6XFx0cmV0dXJuIChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKilsd3QtXFx1MDAzZWRhdGE7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxNC19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MzgxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzgyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzgzLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0zODk9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzkwOlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTM5MS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDA2LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MDc6c3RhdGljIGludCBlbmRfbmV4dF9jc2lkX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MDgte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQyMT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfeF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDIyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MjMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQyOT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfeF9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjQzMDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTQzMS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDQ3PXN0YXRpYyBpbnQgZW5kX3hfbmV4dF9jc2lkX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDQ4OlxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDQ5LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz00NzM9c3RhdGljIGludCBzZWc2X2Zsdl9zdXBwX29wc19ieV9hY3Rpb24oaW50IGFjdGlvbiwgX191MzIgKmZvcHMpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDkzLSAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0OTQ6ZW51bSBzZWc2X2xvY2FsX3BrdGluZm8ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00OTUtXFx0LyogdGhlIG9yZGVyIHJlYWxseSBtYXR0ZXJzISAqL1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NTA1OnN0YXRpYyBlbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyBzZWc2X2dldF9zcmhfcGt0aW5mbyhzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNTA2LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy01MTgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjUxOTplbnVtIHNlZzZfbG9jYWxfZmx2X2FjdGlvbiB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUyMC1cXHRTRUc2X0xPQ0FMX0ZMVl9BQ1RfVU5TUEVDXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTU5MT1zdGF0aWMgY29uc3QgdTggZmx2ODk4Nl9hY3RfdGJsW0ZMVjg5ODZfQUNUX1RCTF9TSVpFXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTAtICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjYxMTpzdGF0aWMgZW51bSBzZWc2X2xvY2FsX2Zsdl9hY3Rpb25cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NjEyOnNlZzZfbG9jYWxfZmx2ODk4Nl9hY3RfbG9va3VwKGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHBpbmZvLCBfX3UzMiBmbHZtYXNrKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTYyOD1zdGF0aWMgYm9vbCBzZWc2X3BvcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNyaG9mZilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDEtICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc0MjpzdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDMte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDQtXFx0Y29uc3Qgc3RydWN0IHNlZzZfZmxhdm9yc19pbmZvICpmaW5mbyA9IFxcdTAwMjZzbHd0LVxcdTAwM2VmbHZfaW5mbztcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzQ1OlxcdGVudW0gc2VnNl9sb2NhbF9mbHZfYWN0aW9uIGFjdGlvbjtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzQ2OlxcdGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHBpbmZvO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDctXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzY2LVxcdCAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3Njc6XFx0YWN0aW9uID0gc2VnNl9sb2NhbF9mbHY4OTg2X2FjdF9sb29rdXAocGluZm8sIGZsdm1hc2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjgtXFx0c3dpdGNoIChhY3Rpb24pIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03OTUtLyogcmVndWxhciBlbmRwb2ludCBmdW5jdGlvbiAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3OTY6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzk3LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MTYtLyogcmVndWxhciBlbmRwb2ludCwgYW5kIGZvcndhcmQgdG8gc3BlY2lmaWVkIG5leHRob3AgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODE3OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF94KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODE4LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MjgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjgyOTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTgzMC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9ODQ5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODUwOlxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODUxLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MDU9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4Nl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTA5LVxcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyID0gTlVMTDtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTEwOlxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dDtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTExLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5MTI6XFx0c2x3dCA9IHNlZzZfbG9jYWxfbHd0dW5uZWwob3JpZ19kc3QtXFx1MDAzZWx3dHN0YXRlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTEzLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkyOT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjkzMDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkzMS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2MC1cXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MTpcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2Mi1cXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjQtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2NTpcXHRzbHd0ID0gc2VnNl9sb2NhbF9sd3R1bm5lbChvcmlnX2RzdC1cXHUwMDNlbHd0c3RhdGUpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjYtXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTgyPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTgzOlxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTg0LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbmV0ICpmaWI2X2NvbmZpZ19nZXRfbmV0KGNvbnN0IHN0cnVjdCBmaWI2X2NvbmZpZyAqZmliNl9jZmcpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAxMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAxNDpzdGF0aWMgaW50IF9fc2VnNl9lbmRfZHRfdnJmX2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDE1LVxcdFxcdFxcdFxcdCAgIHUxNiBmYW1pbHksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTMxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZW5kX2R0X3ZyZl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExMzI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgdTE2IGZhbWlseSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTEzMy17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTE3Nz1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExNzg6XFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTc5LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjA5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjEwOnN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ0X2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjExLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMjE2PXN0YXRpYyBlbnVtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMTc6c2VnNl9lbmRfZHRfbW9kZSBzZWc2X2VuZF9kdDZfcGFyc2VfbW9kZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMTgte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMzEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMzI6c3RhdGljIGVudW0gc2VnNl9lbmRfZHRfbW9kZSBzZWc2X2VuZF9kdDZfZ2V0X21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjMzLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjM4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjM5OnN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ2X2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjQwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMjU4PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTI1OTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDAtI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzAxOnN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ0Nl9idWlsZChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTMwMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzMDc9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMwODpcXHRcXHRcXHRcXHQgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzA5LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzMwLS8qIHB1c2ggYW4gU1JIIG9uIHRvcCBvZiB0aGUgY3VycmVudCBvbmUgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMzMTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzMyLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzU3OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzU4LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQxNTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTYte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1NzE9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODY6c3RhdGljIGJvb2wgc2VnNl9sd3R1bm5lbF9jb3VudGVyc19lbmFibGVkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ny17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU5MTpzdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTItXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBsZW4sIGludCBlcnIpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTMte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTk0OlxcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgKnBjb3VudGVycztcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5NS1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjA4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjA5OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjEwLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTMtXFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2M7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTQ6XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0O1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE1LVxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjE4OlxcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVxcdTAwM2Vsd3RzdGF0ZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTktXFx0ZGVzYyA9IHNsd3QtXFx1MDAzZWRlc2M7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYyNS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYyNjpcXHRzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzbHd0LCBsZW4sIHJjKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYyNy1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMwLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjMxOnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMyLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjQwLVxcdFxcdFxcdCAgICAgICBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldiwgTlVMTCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0MTpcXHRcXHRcXHQgICAgICAgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Mi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0MzpcXHRyZXR1cm4gc2VnNl9sb2NhbF9pbnB1dF9jb3JlKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjQ0LX1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0NS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9wb2xpY3lbU0VHNl9MT0NBTF9NQVggKyAxXSA9IHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cXHRbU0VHNl9MT0NBTF9BQ1RJT05dXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NTktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NjA6c3RhdGljIGludCBwYXJzZV9ubGFfc3JoKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjYxLVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY4NC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY4NTpzdGF0aWMgaW50IHB1dF9ubGFfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY4Ni17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcwMi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTcwMzpzdGF0aWMgaW50IGNtcF9ubGFfc3JoKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzA0LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzEyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzEzOnN0YXRpYyB2b2lkIGRlc3Ryb3lfYXR0cl9zcmgoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE0LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzE4OnN0YXRpYyBpbnQgcGFyc2VfbmxhX3RhYmxlKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE5LVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzI1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzI2OnN0YXRpYyBpbnQgcHV0X25sYV90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3Mjcte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MzMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3MzQ6c3RhdGljIGludCBjbXBfbmxhX3RhYmxlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzM1LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNzQyPXN0YXRpYyBzdHJ1Y3RcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc0MzpzZWc2X2VuZF9kdF9pbmZvICpzZWc2X3Bvc3NpYmxlX2VuZF9kdF9pbmZvKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc0NC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTc1Mj1zdGF0aWMgaW50IHBhcnNlX25sYV92cmZ0YWJsZShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3NTM6XFx0XFx0XFx0ICAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzU0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzY1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzY2OnN0YXRpYyBpbnQgcHV0X25sYV92cmZ0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3Njcte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3NzgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3Nzk6c3RhdGljIGludCBjbXBfbmxhX3ZyZnRhYmxlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzgwLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzg5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzkwOnN0YXRpYyBpbnQgcGFyc2VfbmxhX25oNChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc5MS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3OTgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3OTk6c3RhdGljIGludCBwdXRfbmxhX25oNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MDAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MTEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTI6c3RhdGljIGludCBjbXBfbmxhX25oNChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgxMy17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgxNi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTgxNzpzdGF0aWMgaW50IHBhcnNlX25sYV9uaDYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MTgtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODI1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODI2OnN0YXRpYyBpbnQgcHV0X25sYV9uaDYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODI3LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODM4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODM5OnN0YXRpYyBpbnQgY21wX25sYV9uaDYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NDAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NDMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4NDQ6c3RhdGljIGludCBwYXJzZV9ubGFfaWlmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODQ1LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1MS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg1MjpzdGF0aWMgaW50IHB1dF9ubGFfaWlmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1My17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1OS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg2MDpzdGF0aWMgaW50IGNtcF9ubGFfaWlmKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODYxLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODY3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODY4OnN0YXRpYyBpbnQgcGFyc2VfbmxhX29pZihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg2OS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NzUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4NzY6c3RhdGljIGludCBwdXRfbmxhX29pZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Nzcte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4ODMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4ODQ6c3RhdGljIGludCBjbXBfbmxhX29pZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg4NS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnBmX3Byb2dfcG9saWN5W1NFRzZfTE9DQUxfQlBGX1BST0dfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg5OC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg5OTpzdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MDAtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMwLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTMxOnN0YXRpYyBpbnQgcHV0X25sYV9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMyLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTUxLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTUyOnN0YXRpYyBpbnQgY21wX25sYV9icGYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NTMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5NjM6c3RhdGljIHZvaWQgZGVzdHJveV9hdHRyX2JwZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjQte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5NzA9c3RhdGljIGNvbnN0IHN0cnVjdFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTcxOm5sYV9wb2xpY3kgc2VnNl9sb2NhbF9jb3VudGVyc19wb2xpY3lbU0VHNl9MT0NBTF9DTlRfTUFYICsgMV0gPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NzItXFx0W1NFRzZfTE9DQUxfQ05UX1BBQ0tFVFNdXFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5Nzc9c3RhdGljIGludCBwYXJzZV9ubGFfY291bnRlcnMoc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTc4OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk3OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5ODAte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTgxOlxcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgX19wZXJjcHUgKnBjb3VudGVycztcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk4Mi1cXHRzdHJ1Y3QgbmxhdHRyICp0YltTRUc2X0xPQ0FMX0NOVF9NQVggKyAxXTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTg2LVxcdFxcdFxcdFxcdFxcdCAgYXR0cnNbU0VHNl9MT0NBTF9DT1VOVEVSU10sXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5ODc6XFx0XFx0XFx0XFx0XFx0ICBzZWc2X2xvY2FsX2NvdW50ZXJzX3BvbGljeSwgTlVMTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5ODgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk5OC1cXHQvKiBjb3VudGVycyBhcmUgYWx3YXlzIHplcm8gaW5pdGlhbGl6ZWQgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk5OTpcXHRwY291bnRlcnMgPSBzZWc2X2xvY2FsX2FsbG9jX3BjcHVfY291bnRlcnMoR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMDAtXFx0aWYgKCFwY291bnRlcnMpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAwNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAwODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfZmlsbF9ubGFfY291bnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAwOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyAqY291bnRlcnMpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMTAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwMjY6c3RhdGljIGludCBwdXRfbmxhX2NvdW50ZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAyNy17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwMjg6XFx0c3RydWN0IHNlZzZfbG9jYWxfY291bnRlcnMgY291bnRlcnMgPSB7IDAsIDAsIDAgfTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAyOS1cXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMzYtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAzNzpcXHRcXHRzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzICpwY291bnRlcnM7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMzgtXFx0XFx0dTY0IHBhY2tldHMsIGJ5dGVzLCBlcnJvcnM7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA1NS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA1NjpcXHRyYyA9IHNlZzZfbG9jYWxfZmlsbF9ubGFfY291bnRlcnMoc2tiLCBcXHUwMDI2Y291bnRlcnMpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDU3LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDY0LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDY1OnN0YXRpYyBpbnQgY21wX25sYV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA2Ni17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA3MS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA3MjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDczLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMDc3PXN0YXRpYyBjb25zdFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDc4OnN0cnVjdCBubGFfcG9saWN5IHNlZzZfbG9jYWxfZmxhdm9yc19wb2xpY3lbU0VHNl9MT0NBTF9GTFZfTUFYICsgMV0gPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNzktXFx0W1NFRzZfTE9DQUxfRkxWX09QRVJBVElPTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjExMD1zdGF0aWMgaW50IHNlZzZfcGFyc2VfbmxhX25leHRfY3NpZF9jZmcoc3RydWN0IG5sYXR0ciAqKnRiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxMzYtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIxMzc6c3RhdGljIGludCBwYXJzZV9ubGFfZmxhdm9ycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjEzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTQ3LVxcdFxcdFxcdFxcdFxcdCBhdHRyc1tTRUc2X0xPQ0FMX0ZMQVZPUlNdLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTQ4OlxcdFxcdFxcdFxcdFxcdCBzZWc2X2xvY2FsX2ZsYXZvcnNfcG9saWN5LCBOVUxMKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE0OS1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxODA9c3RhdGljIGludCBzZWc2X2ZpbGxfbmxhX25leHRfY3NpZF9jZmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTkyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTkzOnN0YXRpYyBpbnQgcHV0X25sYV9mbGF2b3JzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE5NC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjIyMj1zdGF0aWMgaW50IHNlZzZfY21wX25sYV9uZXh0X2NzaWRfY2ZnKHN0cnVjdCBzZWc2X2ZsYXZvcnNfaW5mbyAqZmluZm9fYSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjMzLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjM0OnN0YXRpYyBpbnQgY21wX25sYV9mbGF2b3JzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjM1LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjQ5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjUwOnN0YXRpYyBpbnQgZW5jYXBfc2l6ZV9mbGF2b3JzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI1MS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjI2NT1zdHJ1Y3Qgc2VnNl9hY3Rpb25fcGFyYW0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjY2OlxcdGludCAoKnBhcnNlKShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI2Ny1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNjg6XFx0aW50ICgqcHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjY5OlxcdGludCAoKmNtcCkoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjcwLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNzQtXFx0ICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNzU6XFx0dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNzYtfTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMzI3PXN0YXRpYyB2b2lkIF9fZGVzdHJveV9hdHRycyh1bnNpZ25lZCBsb25nIHBhcnNlZF9hdHRycywgaW50IG1heF9wYXJzZWQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzMjg6XFx0XFx0XFx0ICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMyOS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM1NS0gKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM1NjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM1Ny17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjM2Mz1zdGF0aWMgaW50IHBhcnNlX25sYV9vcHRpb25hbF9hdHRycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzNjQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM2NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MDU9c3RhdGljIGludFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDA2OnNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MDctXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MDktXFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2MgPSBzbHd0LVxcdTAwM2VkZXNjO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDEwOlxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyAqb3BzO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDExLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjEtICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MjI6c3RhdGljIHZvaWQgc2VnNl9sb2NhbF9sd3R1bm5lbF9kZXN0cm95X3N0YXRlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyMy17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjQtXFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2MgPSBzbHd0LVxcdTAwM2VkZXNjO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDI1OlxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyAqb3BzO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDI2LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MzMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MzQ6c3RhdGljIGludCBwYXJzZV9ubGFfYWN0aW9uKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDM1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTA6MjYuOTI0MDE1NjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTY1MDgyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2LCBzcGVjaWZpY2FsbHkgdGhlIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoYElQVjZfU0VHNl9MV1RVTk5FTGApIGFuZCB0aGUgQlBGIGludGVncmF0aW9uIChgSVBWNl9TRUc2X0JQRmApLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGVyZSwgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIHBvdGVudGlhbGx5IGRlZmF1bHQgdmFsdWVzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3Agd2hhdCdzIGNvbnRyb2xsYWJsZSBhdCBjb21waWxlIHRpbWUgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzIHdpbGwgbGV0IG1lIHBsYW4gYW5kIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUwOjQ5Ljg4OTEwMTUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg3NTEyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfU0VHNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTA6NTAuMDA3ODU4Mzg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODAwNDExMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZTpcblxuKipJUHY2IENvbmZpZ3VyYXRpb24gLSBEaXZpbmcgSW4qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgemVybyBpbiBvbiBsaW5lcyAyODAgdG8gMzIwIGluIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZmVhdHVyZXMgcmVsYXRlZCB0byBJUHY2IG5ldHdvcmsgY29uZmlndXJhdGlvbiwgcGVyaGFwcyB0aGUgZW5hYmxpbmcgZmxhZ3MgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdGllcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIG9mIGhvdyBkaWZmZXJlbnQgb3B0aW9ucyBhcmUgbmVzdGVkIG9yIGRlcGVuZGVudCwgcHJvYmFibHkgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgZmVhdHVyZXMgZm9yIGluY2x1c2lvbiBpbiBhIGtlcm5lbCBidWlsZC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MToxOC44MDgyNzE5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NTpcXHRcXG4gMjg2OlxcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMjg3OlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbiAyODg6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDI4OTpcXHRcXHRzZWxlY3QgTFdUVU5ORUxcXG4gMjkwOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMjkxOlxcdFxcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyOTI6XFx0XFx0aGVscFxcbiAyOTM6XFx0XFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcXG4gMjk0OlxcdFxcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxuIDI5NTpcXHRcXHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxcbiAyOTY6XFx0XFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyOTk6XFx0XFxuIDMwMDpcXHRjb25maWcgSVBWNl9TRUc2X0hNQUNcXG4gMzAxOlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuIDMwMjpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMzAzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gMzA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAzMDU6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gMzA2OlxcdFxcdGhlbHBcXG4gMzA3OlxcdFxcdCAgU3VwcG9ydCBmb3IgSE1BQyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uXFxuIDMwODpcXHRcXHQgIG9mIFNSLWVuYWJsZWQgcGFja2V0cy5cXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzMTE6XFx0XFxuIDMxMjpcXHRjb25maWcgSVBWNl9TRUc2X0JQRlxcbiAzMTM6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAzMTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMzE1OlxcdFxcdGRlcGVuZHMgb24gSVBWNiA9IHlcXG4gMzE2OlxcdFxcbiAzMTc6XFx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxuIDMxODpcXHRcXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuIDMxOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTE6MTguODA4MzUxNzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgwOTY2Njg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBCUEYqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBhIHNpbWlsYXIgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGluc3RhbmNlcyB3aGVyZSB0aGlzIHN5bWJvbCBpcyB1c2VkIGRpcmVjdGx5LCBvciBpbmRpcmVjdGx5IHZpYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdCBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIFNFRzYgQlBGLXJlbGF0ZWQgY29kZSwgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2suIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbmNsdWRlIGZpbGVzIGFzIHdlbGwuIE9uY2UgSSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBjb2RlIGJsb2NrcywgSSdsbCBleGFtaW5lIHRoZSBjb250ZXh0LiBXaGF0J3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzIGNvbmZpZz8gSG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIFNFRzYgZnJhbWV3b3JrPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBCUEYgcHJvZ3JhbXMsIG9yIGhvb2tpbmcgaW50byBzcGVjaWZpYyBpbmZyYXN0cnVjdHVyZT8gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIHJlc3VsdGluZyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTE6MjcuNjE4MDIxNDk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE0ODIxNzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2X1NFRzZfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTY4Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODgwLXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMS19XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMjojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEzLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMj1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNS1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjctXFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTcyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3NC1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjYtfTtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY3OiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjgtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDQ3PWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDktXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6OTA1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy05MDUxLVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zODgtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jOjM4OTpcXHRcXHR7IFxcXCJDT05GSUdfSVBWNl9TRUc2X0JQRlxcXCIsIH0sXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIgYW5kIHJlbGF0ZWQgaGVscGVycyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz00OD1DT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo0OTpDT05GSUdfSVBWNl9TRUc2X0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTE6MzAuMzMyODU3NzIyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NDA5MjY4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgRmlsdGVyaW5nIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgcGFja2V0IGZpbHRlcmluZyBiZWhhdmlvci4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3Mgc29tZXRoaW5nIGFtaXNzIGluIHRoZSBjb3JlIGZpbHRlcmluZyBpbXBsZW1lbnRhdGlvbiwgc28gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGxpa2VseSBuZXN0bGVkIHNvbWV3aGVyZSBiZXR3ZWVuIGxpbmVzIDcwMTUgYW5kIDcwOTAuIFRoYXQgcmFuZ2UgdXN1YWxseSBlbmNvbXBhc3NlcyBzb21lIGNyaXRpY2FsIGZ1bmN0aW9uIGNhbGxzIG9yIGNvbmRpdGlvbmFsIHN0cnVjdHVyZXMsIGdpdmVuIG15IHBhc3QgZXhwZXJpZW5jZS4gVGltZSB0byBnZXQgbXkgZXllcyBvbiB0aGF0IHNlY3Rpb24gYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUxOjM2LjI3Mzc4ODAxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAxNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAxNTpcXHR9O1xcbjcwMTY6XFx0XFxuNzAxNzpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTg6XFx0e1xcbjcwMTk6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDIwOlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAyMTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG43MDIyOlxcdFxcbjcwMjM6XFx0XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuNzAyNDpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzAyNTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG43MDI2OlxcdFxcdGlmICghc3JoKVxcbjcwMjc6XFx0XFx0XFx0cmV0dXJuO1xcbjcwMjg6XFx0XFxuNzAyOTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuNzAzMDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG43MDMxOlxcdH1cXG43MDMyOlxcdFxcbjcwMzM6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuNzAzNDpcXHRcXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuNzAzNTpcXHR7XFxuNzAzNjpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMzc6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDM4OlxcdFxcdGludCBoZHJvZmYgPSAwO1xcbjcwMzk6XFx0XFx0aW50IGVycjtcXG43MDQwOlxcdFxcbjcwNDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG43MDQyOlxcdFxcdHN3aXRjaCAoYWN0aW9uKSB7XFxuNzA0MzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxcbjcwNDQ6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA0NjpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxcbjcwNDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA0ODpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIChzdHJ1Y3QgaW42X2FkZHIgKilwYXJhbSwgMCk7XFxuNzA0OTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxcbjcwNTA6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA1MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA1MjpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxcbjcwNTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA1NDpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbjcwNTU6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2OlxcbjcwNTY6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA1ODpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxcbjcwNTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA2MDpcXHRcXG43MDYxOlxcdFxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuNzA2MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA2MzpcXHRcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xcbjcwNjQ6XFx0XFx0XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBOVUxMO1xcbjcwNjU6XFx0XFx0XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbjcwNjY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNjc6XFx0XFx0XFx0fVxcbjcwNjg6XFx0XFx0XFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XFxuNzA2OTpcXHRcXG43MDcwOlxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xcbjcwNzE6XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuNzA3MjpcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbjcwNzM6XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcXG43MDc0OlxcdFxcbjcwNzU6XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDc2OlxcdFxcdFxcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XFxuNzA3NzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG43MDc4OlxcdFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwODA6XFx0XFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXFxuNzA4MTpcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xcbjcwODI6XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDgzOlxcdFxcbjcwODQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43MDg1OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxcbjcwODY6XFx0XFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA4NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA4ODpcXHRcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxcbjcwODk6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDkwOlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA5MTpcXHRcXG43MDkyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA5MzpcXHRcXHRkZWZhdWx0OlxcbjcwOTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUxOjM2LjI3NDI2OTkyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ2NzAyMjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbiwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIGlzIGVzc2VudGlhbGx5IGEgQlBGIGhlbHBlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGEgYEJQRl9DQUxMXzRgIGhlbHBlciB0aWVkIHRvIHRoZSBgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uYCBCUEYgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgaG93IHRoaXMgdGhpbmcgKmdldHMqIGludm9rZWQuIEZyb20gd2hhdCBJIHJlY2FsbCwgaXQncyBlaXRoZXIgdHJpZ2dlcmVkIHdoZW4gYW4gbHd0dW5uZWwgU0VHNiBsb2NhbCBCUEYgcHJvZ3JhbSBpcyBydW5uaW5nIOKAkyBzbyB0aGF0J3MgYSBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtIGluIGFjdGlvbiDigJMgb3IsIHBvdGVudGlhbGx5LCBkdXJpbmcgQlBGIHRlc3QgcnVucyBvciB0aGUgcmVndWxhciBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS4gUmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgYHNlZzZfbG9jYWwuY2AgZmlsZTsgdGhlIGNvZGUgYXJvdW5kIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgd2lsbCBwcm9iYWJseSBwcm92aWRlIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvciBhbmQgY2xhcmlmeSB0aGUgaW52b2NhdGlvbiBwYXRoLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRlYnVnZ2luZyB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTM1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTI6MDIuNzQxMjk1ODczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgwNjAyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnB1dF9hY3Rpb25fZW5kX2JwZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQxMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQxNDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTUtXFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0NzE9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2NS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU2NjpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfYnBmLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUyOjAyLjgwOTEwNTg5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1OTc1MzExOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDpcblxuKipEaXZpbmcgaW50byBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIHVucGFjayB0aGUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgaG9vaywgcHJlc3VtYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgYW5kIGxvY2FsIFNJRCBwcm9jZXNzaW5nLCBnaXZlbiB0aGUgZmlsZSBwYXRoLiBNeSBpbml0aWFsIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgd2l0aGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93IOKAkyBpcyBpdCBhdCB0aGUgaW5ncmVzcywgZWdyZXNzLCBvciBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZT8gV2hhdCBhcmUgaXRzIGlucHV0cyDigJMgbGlrZWx5IHRoZSBza2IsIGFuZCBzb21lIGNvbnRleHQgc3RydWN0dXJlcyBsaWtlIHRoZSBmbG93LCBkZXZpY2UsIGFuZCBwb3NzaWJseSB0aGUgU1JIPyBXaGF0J3MgdGhlICphY3Rpb24qIGl0J3MgdGFraW5nIGF0IHRoZSBcImVuZFwiPyBJcyBpdCByZWxhdGVkIHRvIHBvbGljeSBlbmZvcmNlbWVudCwgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgb3IgbWF5YmUgc29tZSBmb3JtIG9mIHJlc291cmNlIGFjY291bnRpbmc/IEkgYmV0IGl0J3MgaW52b2x2ZWQgaW4gdGhlIGZpbmFsIGFjdGlvbnMgb2YgdGhlIFNSdjYgcHJvY2Vzc2luZy4gS25vd2luZyBCUEYsIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0OiBpdCBjb3VsZCBiZSByZWRpcmVjdGluZywgZHJvcHBpbmcsIG9yIG1hbmlwdWxhdGluZyBwYWNrZXQgaGVhZGVycy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBjYWxscyB0byBoZWxwZXJzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBkYXRhcGF0aC4gVGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlISBMZXQncyBzZWUgaWYgdGhpcyBob29rIGlzIGludm9sdmVkIGluIHRoZSBlZ3Jlc3Mgb3IgaW5ncmVzcyBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MjoxMS40MDY2MzkyODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcbjE0MTE6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTQxMjpcXHR9XFxuMTQxMzpcXHRcXG4xNDE0OlxcdHN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNDE1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4xNDE2OlxcdHtcXG4xNDE3OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZTtcXG4xNDE4OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbjE0MTk6XFx0XFx0aW50IHJldDtcXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcXG4xNDIyOlxcdFxcdGlmICghc3JoKSB7XFxuMTQyMzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MjU6XFx0XFx0fVxcbjE0MjY6XFx0XFx0YWR2YW5jZV9uZXh0c2VnKHNyaCwgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyKTtcXG4xNDI3OlxcdFxcbjE0Mjg6XFx0XFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXFxuMTQyOTpcXHRcXHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcXG4xNDMwOlxcdFxcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXFxuMTQzMTpcXHRcXHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXFxuMTQzMjpcXHRcXHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxcbjE0MzM6XFx0XFx0ICovXFxuMTQzNDpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDM1OlxcdFxcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuMTQzNjpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4xNDM3OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuID0gc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4xNDM4OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0Mzk6XFx0XFxuMTQ0MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQ0MTpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMTQ0MjpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVxcdTAwM2VicGYucHJvZywgc2tiKTtcXG4xNDQzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE0NDQ6XFx0XFxuMTQ0NTpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbjE0NDY6XFx0XFx0Y2FzZSBCUEZfT0s6XFxuMTQ0NzpcXHRcXHRjYXNlIEJQRl9SRURJUkVDVDpcXG4xNDQ4OlxcdFxcdFxcdGJyZWFrO1xcbjE0NDk6XFx0XFx0Y2FzZSBCUEZfRFJPUDpcXG4xNDUwOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNDUxOlxcdFxcdGRlZmF1bHQ6XFxuMTQ1MjpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImJwZi1zZWc2bG9jYWw6IElsbGVnYWwgcmV0dXJuIHZhbHVlICV1XFxcXG5cXFwiLCByZXQpO1xcbjE0NTM6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NTQ6XFx0XFx0fVxcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG4xNDU3OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNDU4OlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxuMTQ1OTpcXHRcXG4xNDYwOlxcdFxcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxcbjE0NjE6XFx0XFx0XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRyZXR1cm4gZHN0X2lucHV0KHNrYik7XFxuMTQ2NDpcXHRcXG4xNDY1OlxcdGRyb3A6XFxuMTQ2NjpcXHRcXHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbjE0Njc6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTQ2ODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDY5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTI6MTEuNDA2ODAyMjc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDA3NTA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBQcm9ncmFtIFRlc3RpbmcgQ2FwYWJpbGl0aWVzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHdlIGNhbiB0ZXN0IHRoZXNlIEJQRiBwcm9ncmFtcy4gSSBrbm93IHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpcyBhIHZhbHVhYmxlIHRvb2wsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZnVsbCBzY29wZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBicGZfcHJvZ190ZXN0X3J1bmAgY2FuIGhhbmRsZSBCUEYgcHJvZ3JhbXMgb2YgdGhlIGBMV1RfU0VHNkxPQ0FMYCB0eXBlLiBJZiBpdCBjYW4sIHRoYXQncyBmYW50YXN0aWMsIGFuZCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gSWYgbm90LCBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW4gYWx0ZXJuYXRpdmUuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQncyBwb3NzaWJsZSBJIG1heSBuZWVkIHRvIGxvb2sgYXQgZnVuY3Rpb25zIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrYmAgdG8gZXhwbG9yZSB3aGF0IGtpbmQgb2YgYWx0ZXJuYXRpdmUgZXhpc3RzLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXN0aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA5OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTI6MTQuOTA3NTU2MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTE1MTA0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzUtKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxMzY6fCBgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGBgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsd3Rfc2VnNmxvY2FsYGAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzctKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0yNT1CUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjYtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyNzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI4LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVxcdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcXHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXFx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05MDU2PXN0YXRpYyBpbnQgYnBmX3Byb2dfdHlwZV90b19rZnVuY19ob29rKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkwOTEtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxcbmtlcm5lbC9icGYvYnRmLmM6OTA5MjpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL2J0Zi5jLTkwOTMtXFx0XFx0cmV0dXJuIEJURl9LRlVOQ19IT09LX0xXVDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI4NDM9c3RhdGljIGJvb2wgaXNfbmV0X2FkbWluX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg1MjpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUzLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDc4OT1zdGF0aWMgYm9vbCBtYXlfYWNjZXNzX2RpcmVjdF9wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ3OTgtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ3OTk6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MDAtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyODc3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg4OC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg5OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5MC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xODk5PXN0YXRpYyBpbnQgcGFyc2VfbmxhX2JwZihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTIwLVxcdGZkID0gbmxhX2dldF91MzIodGJbU0VHNl9MT0NBTF9CUEZfUFJPR10pO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTIxOlxcdHAgPSBicGZfcHJvZ19nZXRfdHlwZShmZCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkyMi1cXHRpZiAoSVNfRVJSKHApKSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXFx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlxcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTIwMj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2dfdHlwZV9uYW1lW10gPSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMS1cXHRbQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSXVxcdD0gXFxcImNncm91cF9zb2NrX2FkZHJcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjIyOlxcdFtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxdXFx0XFx0PSBcXFwibHd0X3NlZzZsb2NhbFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjMtXFx0W0JQRl9QUk9HX1RZUEVfTElSQ19NT0RFMl1cXHRcXHQ9IFxcXCJsaXJjX21vZGUyXFxcIixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NzE1Nz1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3MC1cXHR7IEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgICAgICAgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo3MTcxOlxcdHsgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzItXFx0eyBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAgICAgICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MTAzPXN0YXRpYyBpbnQgcHJvYmVfcHJvZ19sb2FkKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xNzgtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjE3OTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xODAtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jPTIyNT12b2lkIHRlc3RfdmVyaWZfc2NhbGVfc2VnNl9sb29wKClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjIyNzpcXHRzY2FsZV90ZXN0KFxcXCJ0ZXN0X3NlZzZfbG9vcC5icGYub1xcXCIsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgZmFsc2UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyOC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDItXFx0e1xcXCJsd3RfeG1pdFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAwfSwgey1FSU5WQUwsIDB9IH0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlxcdHtcXFwibHd0X3NlZzZsb2NhbFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDQtXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MjoxNy4zMTkwNzEyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODA5NTU3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU1J2NiBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHBhcnRpY3VsYXJseSBob3cgdGhleSBhZmZlY3QgU1J2NiBCUEYgaGVscGVycy4gSSBzZWUgdHdvIG1haW4gYXJlYXMgb2YgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLlxuXG5GaXJzdCwgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBmaW5kaW5nIHRoZSBTUkggaGVhZGVyIGJ5IHNlYXJjaGluZyB0aGUgc2tiIGRhdGEgYXQgYW4gb2Zmc2V0LCBhbmQgdGhlbiBkZXRlcm1pbmluZyB2YWxpZGl0eS4gVGhlIHVwZGF0ZWQgY29kZSwgaG93ZXZlciwgbm93IHVzZXMgdGhlIGBzZWc2X2dldF9zcmhgIGhlbHBlciBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIFNSSC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlOyB1c2luZyBhIGRlZGljYXRlZCBoZWxwZXIgc3VnZ2VzdHMgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgZm9yIHZhbGlkYXRpb24uIFRoZSBjb2RlIGFsc28gY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgYWZ0ZXIgYHNlZzZfZ2V0X3NyaGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXNlIGRhdGEgcG9pbnRlciB1cGRhdGVzIHdpbGwgZGVmaW5pdGVseSBhZmZlY3QgdGhlIEJQRiBwcm9ncmFtJ3MgYWJpbGl0eSB0byBvcGVyYXRlIG9uIHRoZSBwYWNrZXRzIGFmdGVyIHRoaXMgU1JIIHByb2Nlc3NpbmcuXG5cblNlY29uZCwgdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbiwgd2hpY2ggaGFuZGxlcyB0aGUgQlBGIGxvZ2ljIGZvciBTUnY2IGFjdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBjYXNlcyBsaWtlIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YCwgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNmAsIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYC4gVGhlIG1vZGlmaWNhdGlvbnMgaW4gYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBoZXJlOiB0aGUgb3JpZ2luYWwgY29kZSBqdXN0IHB1bGxlZCB0aGUgSVB2NiBoZWFkZXIsIHdoZXJlYXMgdGhlIHVwZGF0ZWQgY29kZSBpbmNsdWRlcyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsYCB0aGF0IHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgSVB2NiBoZWFkZXIgYmVmb3JlIHB1bGxpbmcgdGhlIGRhdGEuIFRoaXMgaGVscHMgcHJldmVudCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJydW5zIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXJlIGlzIGFsc28gYSBjaGFuZ2UgdG8gY2FsbCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgZmFpbHVyZSBvY2N1cnJlZCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS5cblxuRnJvbSBhIGZ1bmN0aW9uYWxpdHkgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGJ1ZyBmaXgsIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgU1J2NiBCUEYgaW1wbGVtZW50YXRpb24uIEl0IGFkZHJlc3NlcyBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgYW5kIGVuc3VyZXMgc3RhdGUgY29uc2lzdGVuY3kuIEknbSB0aGlua2luZyBvZiBidWZmZXIgb3ZlcnJ1biBjaGVja3MsIGFuZCBwcm9wZXIgZGF0YSBwb2ludGVyIGNvbXB1dGF0aW9uLiBPdmVyYWxsLCBpdCBhcHBlYXJzIHRvIGltcHJvdmUgcmVsaWFiaWxpdHkuXG5cbk5vdywgc2hvdWxkIHdlIGZ1enogdGhpcz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGlzIGNsZWFybHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2ApIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuXG5cblJlZ2FyZGluZyB0aGUgYEZvY3VzU3ltYm9sc2AsIEknbGwgbmVlZCB0byBmb2N1cyBvbiByZWxldmFudCBCUEYgc3ltYm9scyBhbmQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGlmIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgcmVsYXRlZCBoZWxwZXJzIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8ga25vdyBpZiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBkZXRlcm1pbmUgaXRzIGFiaWxpdHkgdG8gYmUgdXNlZCBpbiBleHRlcm5hbCBCUEYgcHJvZ3JhbXMuIEknbGwgbG9vayBhcm91bmQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgYHNlZzZfbG9jYWwuY2AsIGFuZCBwb3RlbnRpYWxseSB1c2UgdG9vbHMgbGlrZSBgZ3JlcHBlcmAgb3IgYG5tYCB0byBiZSBzdXJlLiBJIHdpbGwgdXNlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MzoxNS4xMjg2MzExNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NTYwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzRcXFxcKGJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz03MDE3PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDMyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzM6QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNC1cXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjE1LjY1NTIwMDMyOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTE5Nzc5Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGX0NBTExfNCBNYWNybyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgQlBGX0NBTExfNGAgbWFjcm8gZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIGV4cGVjdGF0aW9uIGlzIHRoYXQgaXQgd2lsbCBleHBhbmQgdG8gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgbGlrZWx5IGB1NjQgbmFtZSh1NjQgX19hMSwgdTY0IF9fYTIsIC4uLilgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYSB0eXBpY2FsIHBhdHRlcm4uIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgbGV0J3MganVzdCBkbyBhIHF1aWNrLCBtb3JlIGVuY29tcGFzc2luZyBjaGVjay4gSXQncyBvZnRlbiBxdWlja2VyIHRvIGp1c3QgZ3JlcCBmb3IgdGhlIGJyb2FkZXIgY29udGV4dC4gSSdsbCBzZWFyY2ggZm9yIGVpdGhlciBgX19fYnBmX3Byb2dfcnVuYCBvciBhbnkgaW5zdGFuY2Ugb2YgYEJQRl9DQUxMX2Agd2l0aGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGRlY2xhcmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgZmlsdGVyaW5nIGZyYW1ld29yay4gQSBicm9hZGVyIHNlYXJjaCB3aWxsIGdpdmUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTY2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTM6MjMuNzc0OTgyNzcyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY0Mzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMX1swLTldXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY3OC0jZGVmaW5lIF9fTk9BVFRSXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Nzk6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MDojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgxOiNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODI6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MzojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Njg0OiNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjIzLjgzMDYzMDYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Mzk3MzY3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSW50ZWdyYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCdzIFNFRzYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBCUEYgaW50ZWdyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU0VHNikgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIHNlZSBgQlBGX0NBTExfeGAgd2hpY2ggc2VlbXMgdG8gZGVmaW5lIGEgYHU2NCBuYW1lKC4uLilgIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQlBGIGNhbGxzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgdXNlZC4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ7IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIGFsb25nIHdpdGggYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGVuIHRoZXJlJ3MgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgd2hpY2ggSSBzaG91bGQgbG9vayBhdCBhcyB3ZWxsLiBJJ20gd29uZGVyaW5nIGlmIGNvcmUgaW5wdXQgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWNhbGx5IG9yIG5vdC4gTGV0IG1lIGp1c3QgY2hlY2sgb24gdGhhdC4gSXMgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgb3IgYHNlZzZfbG9jYWxfaW5wdXRgIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZT8gTGV0IG1lIGNoZWNrIGBzZWc2X2xvY2FsX2lucHV0YCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjQ1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjUzLjIyODAwMDY5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1NDIxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTE9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MDgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MDk6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTAtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzMC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzMTpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzMi17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0MC1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDE6XFx0XFx0XFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDM6XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0NC19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjczLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2NzQ6XFx0LmlucHV0XFx0XFx0PSBzZWc2X2xvY2FsX2lucHV0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjc1LVxcdC5maWxsX2VuY2FwXFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjUzLjMxNjU0NzVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NzA3MzYzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNFRzYgTG9jYWwgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhwb3NlZCBpbnRlcmZhY2UgZm9yIFNFRzYgbG9jYWwuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgc2VnNl9sb2NhbC5oYCBvciwganVzdCB0byBiZSBzdXJlLCBgaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXJzLiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgcHVibGljLWZhY2luZyBBUEkgSSBoYXZlIHRvIHdvcmsgd2l0aCwgb3IgbmVlZCB0byBiZSBhd2FyZSBvZiB3aGVuIEkgd29yayB3aXRoIGl0IGZ1cnRoZXIuIEknbSBhZnRlciB0aGUgcHJvdG90eXBlcywgaW5saW5lIGZ1bmN0aW9ucywgYW5kIGFueSBvdGhlciBkZWNsYXJhdGlvbnMgdGhhdCBkZWZpbmUgaG93IEkgY2FuIGludGVyYWN0IHdpdGggdGhlIG1vZHVsZS4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW55IGluLWRlcHRoIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIHBsYW4gdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTUwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6MTYuMjg3Mjg3ODM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTkzMDQwODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvc2VnNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6MTYuODA2NTk5Mjg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMzk1MTA0NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGluLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGRpc3RpbGxlZCBmb3IgeW91OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRUc2IEhlYWRlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGluY2x1ZGUvbmV0L3NlZzYqLmhgIGZpbGVzLiBUaGlzIGFyZWEgaXMgdGhlIGNvcmUgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2Nikgd2l0aGluIHRoZSBrZXJuZWwuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBoZWFkZXIgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsLiBUaGV5J2xsIGRlZmluZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIHRoZSBiYWNrYm9uZSBvZiBob3cgU1J2NiBpcyBpbXBsZW1lbnRlZCBhdCB0aGUgbmV0d29yayBsZXZlbC4gTG9va2luZyBhdCB0aGVzZSBoZWFkZXJzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaW50ZXJwcmV0cyBhbmQgbWFuaXB1bGF0ZXMgU1J2NiBzZWdtZW50cywgaGFuZGxlcyB0aGUgZGlmZmVyZW50IFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgb3B0aW9ucywgYW5kIGxpa2VseSwgaG93IHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIHBsYW5lIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbG93LWxldmVsIG1lY2hhbmljcyBvZiBTUnY2LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU0OjI3LjIwMTcwNzU5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImluY2x1ZGUvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcIjZsb3dwYW4uaFwiLFxuICAgIFwiYWN0X2FwaS5oXCIsXG4gICAgXCJhZGRyY29uZi5oXCIsXG4gICAgXCJhZl9pZWVlODAyMTU0LmhcIixcbiAgICBcImFmX3J4cnBjLmhcIixcbiAgICBcImFmX3VuaXguaFwiLFxuICAgIFwiYWZfdnNvY2suaFwiLFxuICAgIFwiYWguaFwiLFxuICAgIFwiYWxpZ25lZF9kYXRhLmhcIixcbiAgICBcImFtdC5oXCIsXG4gICAgXCJhcnAuaFwiLFxuICAgIFwiYXgyNS5oXCIsXG4gICAgXCJheDg4Nzk2LmhcIixcbiAgICBcImJhcmV1ZHAuaFwiLFxuICAgIFwiYm9uZF8zYWQuaFwiLFxuICAgIFwiYm9uZF9hbGIuaFwiLFxuICAgIFwiYm9uZF9vcHRpb25zLmhcIixcbiAgICBcImJvbmRpbmcuaFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2UuaFwiLFxuICAgIFwiYnVzeV9wb2xsLmhcIixcbiAgICBcImNhbGlwc28uaFwiLFxuICAgIFwiY2FuLmhcIixcbiAgICBcImNmZzgwMjExLXdleHQuaFwiLFxuICAgIFwiY2ZnODAyMTEuaFwiLFxuICAgIFwiY2ZnODAyMTU0LmhcIixcbiAgICBcImNoZWNrc3VtLmhcIixcbiAgICBcImNpcHNvX2lwdjQuaFwiLFxuICAgIFwiY2xzX2Nncm91cC5oXCIsXG4gICAgXCJjb2RlbC5oXCIsXG4gICAgXCJjb2RlbF9pbXBsLmhcIixcbiAgICBcImNvZGVsX3FkaXNjLmhcIixcbiAgICBcImNvbXBhdC5oXCIsXG4gICAgXCJkYXRhbGluay5oXCIsXG4gICAgXCJkY2JldmVudC5oXCIsXG4gICAgXCJkY2JubC5oXCIsXG4gICAgXCJkZXZsaW5rLmhcIixcbiAgICBcImRyb3ByZWFzb24tY29yZS5oXCIsXG4gICAgXCJkcm9wcmVhc29uLXFkaXNjLmhcIixcbiAgICBcImRyb3ByZWFzb24uaFwiLFxuICAgIFwiZHNhLmhcIixcbiAgICBcImRzYV9zdHVicy5oXCIsXG4gICAgXCJkc2NwLmhcIixcbiAgICBcImRzZmllbGQuaFwiLFxuICAgIFwiZHN0LmhcIixcbiAgICBcImRzdF9jYWNoZS5oXCIsXG4gICAgXCJkc3RfbWV0YWRhdGEuaFwiLFxuICAgIFwiZHN0X29wcy5oXCIsXG4gICAgXCJlZWUuaFwiLFxuICAgIFwiZXJzcGFuLmhcIixcbiAgICBcImVzcC5oXCIsXG4gICAgXCJlc3BpbnRjcC5oXCIsXG4gICAgXCJldGhvYy5oXCIsXG4gICAgXCJmYWlsb3Zlci5oXCIsXG4gICAgXCJmaWJfbm90aWZpZXIuaFwiLFxuICAgIFwiZmliX3J1bGVzLmhcIixcbiAgICBcImZpcmV3aXJlLmhcIixcbiAgICBcImZsb3cuaFwiLFxuICAgIFwiZmxvd19kaXNzZWN0b3IuaFwiLFxuICAgIFwiZmxvd19vZmZsb2FkLmhcIixcbiAgICBcImZvdS5oXCIsXG4gICAgXCJmcS5oXCIsXG4gICAgXCJmcV9pbXBsLmhcIixcbiAgICBcImdhcnAuaFwiLFxuICAgIFwiZ2VuX3N0YXRzLmhcIixcbiAgICBcImdlbmV0bGluay5oXCIsXG4gICAgXCJnZW5ldmUuaFwiLFxuICAgIFwiZ3JlLmhcIixcbiAgICBcImdyby5oXCIsXG4gICAgXCJncm9fY2VsbHMuaFwiLFxuICAgIFwiZ3NvLmhcIixcbiAgICBcImd0cC5oXCIsXG4gICAgXCJndWUuaFwiLFxuICAgIFwiaGFuZHNoYWtlLmhcIixcbiAgICBcImhvdGRhdGEuaFwiLFxuICAgIFwiaHdibS5oXCIsXG4gICAgXCJpY21wLmhcIixcbiAgICBcImllZWU4MDIxMV9yYWRpb3RhcC5oXCIsXG4gICAgXCJpZWVlODAyMTU0X25ldGRldi5oXCIsXG4gICAgXCJpZWVlODAyMXEuaFwiLFxuICAgIFwiaWZfaW5ldDYuaFwiLFxuICAgIFwiaWZlLmhcIixcbiAgICBcImluZXQ2X2Nvbm5lY3Rpb25fc29jay5oXCIsXG4gICAgXCJpbmV0Nl9oYXNodGFibGVzLmhcIixcbiAgICBcImluZXRfY29tbW9uLmhcIixcbiAgICBcImluZXRfY29ubmVjdGlvbl9zb2NrLmhcIixcbiAgICBcImluZXRfZHNjcC5oXCIsXG4gICAgXCJpbmV0X2Vjbi5oXCIsXG4gICAgXCJpbmV0X2ZyYWcuaFwiLFxuICAgIFwiaW5ldF9oYXNodGFibGVzLmhcIixcbiAgICBcImluZXRfc29jay5oXCIsXG4gICAgXCJpbmV0X3RpbWV3YWl0X3NvY2suaFwiLFxuICAgIFwiaW5ldHBlZXIuaFwiLFxuICAgIFwiaW9hbTYuaFwiLFxuICAgIFwiaXAuaFwiLFxuICAgIFwiaXA2X2NoZWNrc3VtLmhcIixcbiAgICBcImlwNl9maWIuaFwiLFxuICAgIFwiaXA2X3JvdXRlLmhcIixcbiAgICBcImlwNl90dW5uZWwuaFwiLFxuICAgIFwiaXBfZmliLmhcIixcbiAgICBcImlwX3R1bm5lbHMuaFwiLFxuICAgIFwiaXBfdnMuaFwiLFxuICAgIFwiaXBjb21wLmhcIixcbiAgICBcImlwY29uZmlnLmhcIixcbiAgICBcImlwdjYuaFwiLFxuICAgIFwiaXB2Nl9mcmFnLmhcIixcbiAgICBcIml3X2hhbmRsZXIuaFwiLFxuICAgIFwia2NtLmhcIixcbiAgICBcImwzbWRldi5oXCIsXG4gICAgXCJsYWcuaFwiLFxuICAgIFwibGFwYi5oXCIsXG4gICAgXCJsbGMuaFwiLFxuICAgIFwibGxjX2NfYWMuaFwiLFxuICAgIFwibGxjX2NfZXYuaFwiLFxuICAgIFwibGxjX2Nfc3QuaFwiLFxuICAgIFwibGxjX2Nvbm4uaFwiLFxuICAgIFwibGxjX2lmLmhcIixcbiAgICBcImxsY19wZHUuaFwiLFxuICAgIFwibGxjX3NfYWMuaFwiLFxuICAgIFwibGxjX3NfZXYuaFwiLFxuICAgIFwibGxjX3Nfc3QuaFwiLFxuICAgIFwibGxjX3NhcC5oXCIsXG4gICAgXCJsd3R1bm5lbC5oXCIsXG4gICAgXCJtYWM4MDIxMS5oXCIsXG4gICAgXCJtYWM4MDIxNTQuaFwiLFxuICAgIFwibWFjc2VjLmhcIixcbiAgICBcIm1jdHAuaFwiLFxuICAgIFwibWN0cGRldmljZS5oXCIsXG4gICAgXCJtaXA2LmhcIixcbiAgICBcIm1sZC5oXCIsXG4gICAgXCJtcGxzLmhcIixcbiAgICBcIm1wbHNfaXB0dW5uZWwuaFwiLFxuICAgIFwibXB0Y3AuaFwiLFxuICAgIFwibXJwLmhcIixcbiAgICBcIm5jc2kuaFwiLFxuICAgIFwibmRpc2MuaFwiLFxuICAgIFwibmVpZ2hib3VyLmhcIixcbiAgICBcIm5laWdoYm91cl90YWJsZXMuaFwiLFxuICAgIFwibmV0X2RlYnVnLmhcIixcbiAgICBcIm5ldF9mYWlsb3Zlci5oXCIsXG4gICAgXCJuZXRfbmFtZXNwYWNlLmhcIixcbiAgICBcIm5ldF9yYXRlbGltaXQuaFwiLFxuICAgIFwibmV0X3NoYXBlci5oXCIsXG4gICAgXCJuZXRfdHJhY2tlcnMuaFwiLFxuICAgIFwibmV0ZGV2X2xvY2suaFwiLFxuICAgIFwibmV0ZGV2X25ldGxpbmsuaFwiLFxuICAgIFwibmV0ZGV2X3F1ZXVlcy5oXCIsXG4gICAgXCJuZXRkZXZfcnhfcXVldWUuaFwiLFxuICAgIFwibmV0ZXZlbnQuaFwiLFxuICAgIFwibmV0a2l0LmhcIixcbiAgICBcIm5ldGxhYmVsLmhcIixcbiAgICBcIm5ldGxpbmsuaFwiLFxuICAgIFwibmV0bWVtLmhcIixcbiAgICBcIm5ldHByaW9fY2dyb3VwLmhcIixcbiAgICBcIm5leHRob3AuaFwiLFxuICAgIFwibmw4MDIxNTQuaFwiLFxuICAgIFwibnNoLmhcIixcbiAgICBcInBmY3AuaFwiLFxuICAgIFwicGllLmhcIixcbiAgICBcInBpbmcuaFwiLFxuICAgIFwicGt0X2Nscy5oXCIsXG4gICAgXCJwa3Rfc2NoZWQuaFwiLFxuICAgIFwicHB0cC5oXCIsXG4gICAgXCJwcm90b19tZW1vcnkuaFwiLFxuICAgIFwicHJvdG9jb2wuaFwiLFxuICAgIFwicHNhbXBsZS5oXCIsXG4gICAgXCJwc25hcC5oXCIsXG4gICAgXCJwc3AuaFwiLFxuICAgIFwicmF3LmhcIixcbiAgICBcInJhd3Y2LmhcIixcbiAgICBcInJlZC5oXCIsXG4gICAgXCJyZWd1bGF0b3J5LmhcIixcbiAgICBcInJlcXVlc3Rfc29jay5oXCIsXG4gICAgXCJyb3NlLmhcIixcbiAgICBcInJvdXRlLmhcIixcbiAgICBcInJwbC5oXCIsXG4gICAgXCJycHMtdHlwZXMuaFwiLFxuICAgIFwicnBzLmhcIixcbiAgICBcInJzaV85MXguaFwiLFxuICAgIFwicnN0cmVhc29uLmhcIixcbiAgICBcInJ0bmV0bGluay5oXCIsXG4gICAgXCJydG5oLmhcIixcbiAgICBcInNjaF9nZW5lcmljLmhcIixcbiAgICBcInNjaF9wcml2LmhcIixcbiAgICBcInNjbS5oXCIsXG4gICAgXCJzZWN1cmVfc2VxLmhcIixcbiAgICBcInNlZzYuaFwiLFxuICAgIFwic2VnNl9obWFjLmhcIixcbiAgICBcInNlZzZfbG9jYWwuaFwiLFxuICAgIFwic2VsZnRlc3RzLmhcIixcbiAgICBcInNsaGNfdmouaFwiLFxuICAgIFwic21jLmhcIixcbiAgICBcInNubXAuaFwiLFxuICAgIFwic29jay5oXCIsXG4gICAgXCJzb2NrX3JldXNlcG9ydC5oXCIsXG4gICAgXCJzdHAuaFwiLFxuICAgIFwic3RycGFyc2VyLmhcIixcbiAgICBcInN3aXRjaGRldi5oXCIsXG4gICAgXCJ0Y193cmFwcGVyLmhcIixcbiAgICBcInRjcC5oXCIsXG4gICAgXCJ0Y3BfYW8uaFwiLFxuICAgIFwidGNwX2Vjbi5oXCIsXG4gICAgXCJ0Y3Bfc3RhdGVzLmhcIixcbiAgICBcInRjeC5oXCIsXG4gICAgXCJ0aW1ld2FpdF9zb2NrLmhcIixcbiAgICBcInRpcGMuaFwiLFxuICAgIFwidGxzLmhcIixcbiAgICBcInRsc19wcm90LmhcIixcbiAgICBcInRyYW5zcF92Ni5oXCIsXG4gICAgXCJ0c28uaFwiLFxuICAgIFwidHVuX3Byb3RvLmhcIixcbiAgICBcInVkcC5oXCIsXG4gICAgXCJ1ZHBfdHVubmVsLmhcIixcbiAgICBcInZzb2NrX2FkZHIuaFwiLFxuICAgIFwidnhsYW4uaFwiLFxuICAgIFwid2V4dC5oXCIsXG4gICAgXCJ4MjUuaFwiLFxuICAgIFwieDI1ZGV2aWNlLmhcIixcbiAgICBcInhkcC5oXCIsXG4gICAgXCJ4ZHBfcHJpdi5oXCIsXG4gICAgXCJ4ZHBfc29jay5oXCIsXG4gICAgXCJ4ZHBfc29ja19kcnYuaFwiLFxuICAgIFwieGZybS5oXCIsXG4gICAgXCJ4c2tfYnVmZl9wb29sLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiOXBcIixcbiAgICBcImJsdWV0b290aFwiLFxuICAgIFwiaXVjdlwiLFxuICAgIFwibGliZXRoXCIsXG4gICAgXCJtYW5hXCIsXG4gICAgXCJuZXRmaWx0ZXJcIixcbiAgICBcIm5ldG5zXCIsXG4gICAgXCJuZmNcIixcbiAgICBcInBhZ2VfcG9vbFwiLFxuICAgIFwicGhvbmV0XCIsXG4gICAgXCJwaHlcIixcbiAgICBcInBzcFwiLFxuICAgIFwic2N0cFwiLFxuICAgIFwidGNfYWN0XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6MjcuMjAxOTU5MjI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0MjAyNTE4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRUc2IENvZGUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9jYWwgc2VnbWVudCByb3V0aW5nIHNwZWNpZmljcyBhbmQgdGhlIGJyb2FkZXIgU0VHNiBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGhlYWRlciBmaWxlcy4gSSBmaWd1cmUgYGluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaGAgd2lsbCBjb250YWluIHRoZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGxvY2FsIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byB0aGUgaGFuZGxpbmcgb2YgU0VHNiByb3V0ZXMgb24gdGhpcyBzeXN0ZW0uIEl0IHNob3VsZCBkZXRhaWwgdGhpbmdzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpYyBmbGFncywgYW5kIHBlcmhhcHMgc29tZSBvZiB0aGUgZnVuZGFtZW50YWwgZGF0YSB0eXBlcyB1c2VkIGluIHRoZSBsb2NhbCByb3V0aW5nIHRhYmxlLiBUaGVuLCBJJ2xsIG5lZWQgYSBicm9hZGVyIHZpZXcsIHNvIGBpbmNsdWRlL25ldC9zZWc2LmhgIGlzIHRoZSBuZXh0IHN0b3AuIEknbSBleHBlY3RpbmcgdGhpcyBvbmUgdG8gcHJvdmlkZSB0aGUgY29yZSBkZWZpbml0aW9ucywgY29tbW9uIHN0cnVjdHVyZXMsIGFuZCBtYXliZSB0aGUgaW50ZXJmYWNlcyB0aGF0IHRpZSB0aGUgdmFyaW91cyBTRUc2IG1vZHVsZXMgdG9nZXRoZXIuIEl0J2xsIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlIGNvbnRleHQsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGxvY2FsIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgbW9yZSBnZW5lcmFsIFNFRzYgcHJvdG9jb2wuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NDozNC42MjIyMTM4OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqICBBdXRob3JzOlxcbiAgIDY6XFx0ICogIERhdmlkIExlYnJ1biBcXHUwMDNjZGF2aWQubGVicnVuQHVjbG91dmFpbi5iZVxcdTAwM2VcXG4gICA3OlxcdCAqICBlQlBGIHN1cHBvcnQ6IE1hdGhpZXUgWGhvbm5ldXggXFx1MDAzY20ueGhvbm5ldXhAZ21haWwuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDExOlxcdCNkZWZpbmUgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0ZXh0ZXJuIGludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgICAgIHUzMiB0YmxfaWQpO1xcbiAgMTk6XFx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSB7XFxuICAyMjpcXHRcXHRsb2NhbF9sb2NrX3QgYmhfbG9jaztcXG4gIDIzOlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiAgMjQ6XFx0XFx0dTE2IGhkcmxlbjtcXG4gIDI1OlxcdFxcdGJvb2wgdmFsaWQ7XFxuICAyNjpcXHR9O1xcbiAgMjc6XFx0XFxuICAyODpcXHRERUNMQVJFX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuICAyOTpcXHRcXG4gIDMwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NDozNC42MjIyNzQzNTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU0NjkyMDQyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU0VHNiBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTRUc2KSBpbXBsZW1lbnRhdGlvbiwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgaGVhcnQgb2YgaXQgYWxsOiBgaW5jbHVkZS9uZXQvc2VnNi5oYC4gVGhpcyBoZWFkZXIgZmlsZSBpcyB3aGVyZSB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgYXJlLCBzbyBpdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgU0VHNi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBTSUQgbGlzdHMsIHRoZSBjb250cm9sIGZsYWdzLCBwZXJoYXBzIHNvbWUgbWFjcm9zIGZvciBtYW5pcHVsYXRpbmcgdGhlIHNlZ21lbnRzLCBhbmQgb2YgY291cnNlLCB0aGUga2V5IHN0cnVjdHVyZXMgdXNlZCBmb3IgZW5jYXBzdWxhdGluZyB0aGUgSVB2NiBoZWFkZXJzIHdpdGhpbiBJUHY2LiBLbm93aW5nIHRoZXNlIGJ1aWxkaW5nIGJsb2NrcyBpcyBjcnVjaWFsIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUgb3RoZXIgYC5jYCBmaWxlcy4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHRoZSBzZWdtZW50IGxpc3QgZW50cnksIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCBhbmQgbWF5YmUgZXZlbiBzb21lIGlubGluZSBmdW5jdGlvbnMgZm9yIHF1aWNrbHkgYWNjZXNzaW5nIGZpZWxkcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgd2FpdGluZyB0byBiZSB1bmNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NDo1MC4wOTE0ODE1MTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3NlZzYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogIFNSLUlQdjYgaW1wbGVtZW50YXRpb25cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQXV0aG9yOlxcbiAgIDY6XFx0ICogIERhdmlkIExlYnJ1biBcXHUwMDNjZGF2aWQubGVicnVuQHVjbG91dmFpbi5iZVxcdTAwM2VcXG4gICA3OlxcdCAqL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQjaWZuZGVmIF9ORVRfU0VHNl9IXFxuICAxMDpcXHQjZGVmaW5lIF9ORVRfU0VHNl9IXFxuICAxMTpcXHRcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNi5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jc3VtX2RpZmY0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBmcm9tLFxcbiAgMTg6XFx0XFx0XFx0XFx0XFx0ICAgICBfX2JlMzIgdG8pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRfX2JlMzIgZGlmZltdID0geyB+ZnJvbSwgdG8gfTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gfmNzdW1fcGFydGlhbCgoY2hhciAqKWRpZmYsIHNpemVvZihkaWZmKSwgfnNrYi1cXHUwMDNlY3N1bSk7XFxuICAyMzpcXHR9XFxuICAyNDpcXHRcXG4gIDI1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3N1bV9kaWZmMTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyICpmcm9tLFxcbiAgMjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTMyICp0bylcXG4gIDI3OlxcdHtcXG4gIDI4OlxcdFxcdF9fYmUzMiBkaWZmW10gPSB7XFxuICAyOTpcXHRcXHRcXHR+ZnJvbVswXSwgfmZyb21bMV0sIH5mcm9tWzJdLCB+ZnJvbVszXSxcXG4gIDMwOlxcdFxcdFxcdHRvWzBdLCB0b1sxXSwgdG9bMl0sIHRvWzNdLFxcbiAgMzE6XFx0XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gfmNzdW1fcGFydGlhbCgoY2hhciAqKWRpZmYsIHNpemVvZihkaWZmKSwgfnNrYi1cXHUwMDNlY3N1bSk7XFxuICAzNDpcXHR9XFxuICAzNTpcXHRcXG4gIDM2OlxcdHN0cnVjdCBzZWc2X3Blcm5ldF9kYXRhIHtcXG4gIDM3OlxcdFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiAgMzg6XFx0XFx0c3RydWN0IGluNl9hZGRyIF9fcmN1ICp0dW5fc3JjO1xcbiAgMzk6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAgNDA6XFx0XFx0c3RydWN0IHJoYXNodGFibGUgaG1hY19pbmZvcztcXG4gIDQxOlxcdCNlbmRpZlxcbiAgNDI6XFx0fTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VnNl9wZXJuZXRfZGF0YSAqc2VnNl9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxcbiAgNDU6XFx0e1xcbiAgNDY6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuICA0NzpcXHRcXHRyZXR1cm4gbmV0LVxcdTAwM2VpcHY2LnNlZzZfZGF0YTtcXG4gIDQ4OlxcdCNlbHNlXFxuICA0OTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDUwOlxcdCNlbmRpZlxcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHRleHRlcm4gaW50IHNlZzZfaW5pdCh2b2lkKTtcXG4gIDU0OlxcdGV4dGVybiB2b2lkIHNlZzZfZXhpdCh2b2lkKTtcXG4gIDU1OlxcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMXFxuICA1NjpcXHRleHRlcm4gaW50IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKTtcXG4gIDU3OlxcdGV4dGVybiB2b2lkIHNlZzZfaXB0dW5uZWxfZXhpdCh2b2lkKTtcXG4gIDU4OlxcdGV4dGVybiBpbnQgc2VnNl9sb2NhbF9pbml0KHZvaWQpO1xcbiAgNTk6XFx0ZXh0ZXJuIHZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpO1xcbiAgNjA6XFx0I2Vsc2VcXG4gIDYxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuICA2MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpIHt9XFxuICA2MzpcXHRzdGF0aWMgaW5saW5lIGludCBzZWc2X2xvY2FsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbiAgNjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNlZzZfbG9jYWxfZXhpdCh2b2lkKSB7fVxcbiAgNjU6XFx0I2VuZGlmXFxuICA2NjpcXHRcXG4gIDY3OlxcdGV4dGVybiBib29sIHNlZzZfdmFsaWRhdGVfc3JoKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBpbnQgbGVuLCBib29sIHJlZHVjZWQpO1xcbiAgNjg6XFx0ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XFxuICA2OTpcXHRleHRlcm4gdm9pZCBzZWc2X2ljbXBfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0KTtcXG4gIDcwOlxcdGV4dGVybiBpbnQgc2VnNl9kb19zcmhfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxcbiAgNzE6XFx0XFx0XFx0XFx0ICAgICBpbnQgcHJvdG8pO1xcbiAgNzI6XFx0ZXh0ZXJuIGludCBzZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoKTtcXG4gIDczOlxcdGV4dGVybiBpbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcXG4gIDc0OlxcdFxcdFxcdFxcdCAgICAgICB1MzIgdGJsX2lkKTtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0LyogSWYgdGhlIHBhY2tldCB3aGljaCBpbnZva2VkIGFuIElDTVAgZXJyb3IgY29udGFpbnMgYW4gU1JIIHJldHVyblxcbiAgNzc6XFx0ICogdGhlIHRydWUgZGVzdGluYXRpb24gYWRkcmVzcyBmcm9tIHdpdGhpbiB0aGUgU1JILCBvdGhlcndpc2UgdXNlIHRoZVxcbiAgNzg6XFx0ICogZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgSVAgaGVhZGVyLlxcbiAgNzk6XFx0ICovXFxuICA4MDpcXHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VnNl9nZXRfZGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6NTAuMDkxNTk1ODExWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjk0OTAwMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRi1iYXNlZCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyB0aGUgQlBGIGludGVncmF0aW9uIHdpdGggSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBJJ20gc3RhcnRpbmcgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBjb21wb25lbnRzLiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgdGhlIHByaW1hcnkgQlBGIGhlbHBlciBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIHN5bWJvbCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0aGF0J3MgY2FsbGVkIGZyb20gQlBGIHByb2dyYW1zIHRvIGhhbmRsZSB0aGUgU1JIIG9wZXJhdGlvbnMsIHNvIGl0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgYEZvY3VzU3ltYm9sYC4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBzdGF0aWMgaGVscGVycyBsaWtlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCwgYHNlZzZfZ2V0X3NyaGAsIGFuZCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgc3ltYm9scy4gYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBsb29rcyBpbnRlcmVzdGluZyBzaW5jZSB0aGF0IHNldHMgdXAgYHNyaF9zdGF0ZWAgYW5kIGludm9rZXMgdGhlIEJQRiBwcm9ncmFtIGNhbGxpbmcgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGVyZWZvcmUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCB3aWxsIGFsc28gYmUgaW5jbHVkZWQgaW4gYEZvY3VzU3ltYm9sc2AuIEZpbmFsbHksIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYCB3aWxsIGFsc28gYmUgaW5jbHVkZWQgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbk5leHQsIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9TRUc2X0JQRmAgaXMgdGhlIGtleSwgYW5kIGl0J3MgYGRlZl9ib29sIHlgIGlmIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGFuZCBgSVBWNmAgYXJlIGVuYWJsZWQsIGFuZCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBkZXBlbmRzIG9uIGBJUFY2YC4gVGhpcyBtZWFucyBgSVBWNmAsIGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBgSVBWNl9TRUc2X0JQRmAgbXVzdCBiZSBlbmFibGVkLiBBbHNvLCB0aGUgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIHJlbGF0ZWQgaGVscGVycyBhcmUgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpYC4gVGhlc2UgYXJlIG15IGBFbmFibGVDb25maWdzYC4gSSB3aWxsIGFsc28gbmVlZCBgQlBGX1NZU0NBTExgIHRvIGJlIGVuYWJsZWQsIGJlY2F1c2UgdGhlIEJQRiBwcm9ncmFtIG5lZWRzIHRvIGJlIGFjY2Vzc2libGUuXG5cblNvLCB0byBzdW1tYXJpemUgZm9yIGZ1enppbmcgcHVycG9zZXM6XG5cbiogICAqKmBGb2N1c1N5bWJvbHNgKio6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgXG4qICAgKipgRW5hYmxlQ29uZmlnc2AqKjogYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgQlBGX1NZU0NBTExgXG5cbkdpdmVuIHRoZXNlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgYXJlIHRoZSBjcnVjaWFsIGFzcGVjdHMgdG8gZW5hYmxlIGFuZCB0YXJnZXQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIG9mIHRoZSBCUEYtYmFzZWQgU1JIIGltcGxlbWVudGF0aW9uLiBUaGlzIGFuYWx5c2lzIGlzIGNvbmNpc2UgYW5kIHByb3ZpZGVzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMDIsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MDIuMzg2NDk4ODMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODQ0MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInNlZzZfYnBmX2hhc192YWxpZF9zcmhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBTUkggc3RhdGUgaGFuZGxpbmcgYW5kIHNrYiBsaW5lYXIgYnVmZmVyIHZhbGlkYXRpb24gKHBza2JfbWF5X3B1bGwgaW5zdGVhZCBvZiBwc2tiX3B1bGwpIGluIHRoZSBTUnY2IEJQRiBoZWxwZXIgYnBmX2x3dF9zZWc2X2FjdGlvbi4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBhbmQgQlBGIHBhY2tldCBoYW5kbGluZyBwYXRocyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInNlZzZfYnBmX2hhc192YWxpZF9zcmhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBTUkggc3RhdGUgaGFuZGxpbmcgYW5kIHNrYiBsaW5lYXIgYnVmZmVyIHZhbGlkYXRpb24gKHBza2JfbWF5X3B1bGwgaW5zdGVhZCBvZiBwc2tiX3B1bGwpIGluIHRoZSBTUnY2IEJQRiBoZWxwZXIgYnBmX2x3dF9zZWc2X2FjdGlvbi4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBhbmQgQlBGIHBhY2tldCBoYW5kbGluZyBwYXRocyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MDIuNTEyMzQ5OTg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQzMTAwNzEwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NTowMi41MTI4MDIzNTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1OTQzMDk2MTI4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXFxuXFxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90OlxcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cXG4zLiBJbnRyb2R1Y2UgYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjODg2MGUzMzIzNGJjNjhkOTFlNWUyYTIzZmZjYzUxMDg3NGM3ZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjQ3OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uMWRkM2E2ODVkMWI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTgsMTUgKzcwMTgsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbitcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFxuLVx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXHUwMDNjIDApIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSArIHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbitcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuK1x0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbitcdGlmICghc3JoKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbitcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4gfVxuIFxuIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTcwNTksMTUgKzcwNjAsMTggQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXG4gXHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbi1cdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuK1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG4gXG4gXHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuIFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIFxuLVx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4gXHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbkBAIC03MDc1LDggKzcwNzksNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XG5AQCAtNzA4NCw4ICs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVmYXVsdDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU1OjAyLjUxMjgwMzI2N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQ3NDY2NTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBGdXp6aW5nIFJlcXVlc3QqKlxuXG5Pa2F5LCBzbyBzb21lb25lJ3MgYXNraW5nIG1lIHdoZXRoZXIgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzIG5lZWRzIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzPyBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIGtlZXBpbmcgaW4gbWluZCB0aGUgc2FmZXR5IGd1aWRlbGluZXMgd2UndmUgZXN0YWJsaXNoZWQuIFRoaXMgaXNuJ3QgYWJvdXQgbWFsaWNpb3VzIGFjdGl2aXR5IG9yIGV4cGxvaXQgZGV2ZWxvcG1lbnQ7IGl0J3MgYSByb3V0aW5lIHBhdGNoIGFuYWx5c2lzIGZvY3VzaW5nIG9uIHNhbml0aXplciBzZWxlY3Rpb24g4oCTIEtBU0FOIHZlcnN1cyBLTVNBTi4gR29vZCwgdGhhdCBtYWtlcyBpdCBhIG11Y2ggbW9yZSBtYW5hZ2VhYmxlIHRhc2suXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIFRoZXkncmUgd29ya2luZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0J3MgdGhlIGtleSBhcmVhIG9mIGNvbmNlcm4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSA3MDE4LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hldGhlciBLTVNBTiBpcyB3YXJyYW50ZWQgYmFzZWQgb24gdGhlIGNoYW5nZXMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MzAuOTg3NDcxMjlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDEwOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuNzAxMTpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG43MDEyOlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG43MDEzOlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG43MDE0OlxcdFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRVxcbjcwMTU6XFx0fTtcXG43MDE2OlxcdFxcbjcwMTc6XFx0c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG43MDE4OlxcdHtcXG43MDE5OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuNzAyMDpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjcwMjE6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuNzAyMjpcXHRcXG43MDIzOlxcdFxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbjcwMjQ6XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbjcwMjU6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuNzAyNjpcXHRcXHRpZiAoIXNyaClcXG43MDI3OlxcdFxcdFxcdHJldHVybjtcXG43MDI4OlxcdFxcbjcwMjk6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gPSBzcmgtXFx1MDAzZWhkcmxlbiBcXHUwMDNjXFx1MDAzYyAzO1xcbjcwMzA6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuNzAzMTpcXHR9XFxuNzAzMjpcXHRcXG43MDMzOlxcdEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbjcwMzQ6XFx0XFx0ICAgdTMyLCBhY3Rpb24sIHZvaWQgKiwgcGFyYW0sIHUzMiwgcGFyYW1fbGVuKVxcbjcwMzU6XFx0e1xcbjcwMzY6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDM3OlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAzODpcXHRcXHRpbnQgaGRyb2ZmID0gMDtcXG43MDM5OlxcdFxcdGludCBlcnI7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyaF9zdGF0ZS1cXHUwMDNlYmhfbG9jayk7XFxuNzA0MjpcXHRcXHRzd2l0Y2ggKGFjdGlvbikge1xcbjcwNDM6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcXG43MDQ0OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNDU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNDY6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSlcXG43MDQ3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNDg6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCAoc3RydWN0IGluNl9hZGRyICopcGFyYW0sIDApO1xcbjcwNDk6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfVDpcXG43MDUwOlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTI6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDUzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNTQ6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcXG43MDU1OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcXG43MDU2OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTg6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDU5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNjA6XFx0XFxuNzA2MTpcXHRcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNjM6XFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcXG43MDY0OlxcdFxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gTlVMTDtcXG43MDY1OlxcdFxcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MDY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDY3OlxcdFxcdFxcdH1cXG43MDY4OlxcdFxcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbjcwNjk6XFx0XFxuNzA3MDpcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaGRyb2ZmKTtcXG43MDcxOlxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjcwNzI6XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG43MDczOlxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuNzA3NDpcXHRcXG43MDc1OlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA3NjpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbjcwNzc6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XFxuNzA3ODpcXHRcXHRcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDc5OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDgwOlxcdFxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxcbjcwODE6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDgyOlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA4MzpcXHRcXG43MDg0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA4NTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcXG43MDg2OlxcdFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwODc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwODg6XFx0XFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcXG43MDg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuNzA5MDpcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbjcwOTE6XFx0XFxuNzA5MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjcwOTM6XFx0XFx0ZGVmYXVsdDpcXG43MDk0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwOTU6XFx0XFx0fVxcbjcwOTY6XFx0fVxcbjcwOTc6XFx0XFxuNzA5ODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG8gPSB7XFxuNzA5OTpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX2x3dF9zZWc2X2FjdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MzAuOTkwMzU3MzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIxODI1MTQzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGludG8sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIFNFRzYgQlBGIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUgU0VHNiBCUEYgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBvZiBgc2VnNl9icGZfc3JoX3N0YXRlc2AgYW5kIGBzZWc2X2dldF9zcmhgIOKAkyBjcml0aWNhbCBjb21wb25lbnRzIGluIHRoZSBCUEYtZHJpdmVuIFNFRzYgZGF0YSBwbGFuZS4gSSdtIGVzcGVjaWFsbHkga2VlbiBvbiBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIGBzcmhfc3RhdGVgIGFyZSBiZWluZyBoYW5kbGVkLiBUbyBnYWluIHRoaXMgdW5kZXJzdGFuZGluZyBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgdGhlc2Uga2V5IGlkZW50aWZpZXJzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvaXB2Ni9zZWc2LmNgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiB0aGUgY29yZSBmdW5jdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgdHJhbnNpdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MuIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIEJQRiBoZWxwZXJzIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIGluZnJhc3RydWN0dXJlIGluIG9yZGVyIHRvIHRob3JvdWdobHkgYXNzZXNzIHRoZSBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU1OjQzLjE3Mjg3NTQ4N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NTAyMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2JwZl9zcmhfc3RhdGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaD0yMT1zdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaC0yNy1cXG5pbmNsdWRlL25ldC9zZWc2X2xvY2FsLmg6Mjg6REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbmluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaC0yOS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5NzQ9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTc3LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6Njk3ODpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzktXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTc9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTktXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDIwOlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyMS1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDM2LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAzNzpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzgtXFx0aW50IGhkcm9mZiA9IDA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTA4PUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTExLVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzExMjpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTMtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzODY6REVGSU5FX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcykgPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODctXFx0LmJoX2xvY2tcXHQ9IElOSVRfTE9DQUxfTE9DSyhiaF9sb2NrKSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzkwPWJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTItXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM5MzpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk0LVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVxcdTAwM2Vzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQxND1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQzMy1cXHQgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNDpcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNTpcXHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDM2LVxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTctXFx0XFx0Z290byBkcm9wO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4OlxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTktXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2NS1kcm9wOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY2OlxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjctXFx0a2ZyZWVfc2tiKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU1OjQ1Ljg1NzkwNzE5NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc5NDk5ODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0VHNiBMb2NhbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFNFRzYgbG9jYWwgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgdGhlIHByaW1hcnkgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZXNpZGU/XCIgVGhhdCBsZWFkcyBtZSBkaXJlY3RseSB0byBgaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oYC4gSSdsbCB3YW50IHRvIHNlZSB0aGUgZXhwb3NlZCBBUElzLCBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgU0lEcyBhbmQgbG9jYWwgcG9saWN5LCBhbmQgbWF5YmUgc29tZSBvZiB0aGUgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMuIFRoZW4sIG5hdHVyYWxseSwgSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhvc2UgZWxlbWVudHMgYXJlICp1c2VkKiBhbmQgKmltcGxlbWVudGVkKi4gU28sIEknbGwgaGVhZCBvdmVyIHRvIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBjb2RlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIFNJRCBwcm9jZXNzaW5nLCB0aGUgbG9jYWwgcG9saWN5IGFwcGxpY2F0aW9uIGxvZ2ljLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGZvcndhcmRpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCBpdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjoyMS42NTI5MDgyODZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqICBBdXRob3JzOlxcbiAgIDY6XFx0ICogIERhdmlkIExlYnJ1biBcXHUwMDNjZGF2aWQubGVicnVuQHVjbG91dmFpbi5iZVxcdTAwM2VcXG4gICA3OlxcdCAqICBlQlBGIHN1cHBvcnQ6IE1hdGhpZXUgWGhvbm5ldXggXFx1MDAzY20ueGhvbm5ldXhAZ21haWwuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDExOlxcdCNkZWZpbmUgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0ZXh0ZXJuIGludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgICAgIHUzMiB0YmxfaWQpO1xcbiAgMTk6XFx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSB7XFxuICAyMjpcXHRcXHRsb2NhbF9sb2NrX3QgYmhfbG9jaztcXG4gIDIzOlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiAgMjQ6XFx0XFx0dTE2IGhkcmxlbjtcXG4gIDI1OlxcdFxcdGJvb2wgdmFsaWQ7XFxuICAyNjpcXHR9O1xcbiAgMjc6XFx0XFxuICAyODpcXHRERUNMQVJFX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuICAyOTpcXHRcXG4gIDMwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjoyMS42NTI5OTA3MzZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI0MzAwNjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2gsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHNlZzZfbG9jYWwuYyAtIEEgRGVlcCBEaXZlIChMaW5lcyAxMzgwLTE0NzApKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyAxMzgwIHRvIDE0NzAgd2l0aGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBwcm9jZXNzaW5nIGFuZCBoYW5kbGluZyBvZiBTZWdtZW50IFJvdXRpbmcgSVB2NiAoU1J2NikgbG9jYWwgcG9saWNpZXMuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgZ2VuZXJhbCBhcmVhIG9mIG5ldHdvcmtpbmcgSSB3b3JrIGluLCBpdCdzIGEgc2FmZSBiZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgY2h1bmssIHNvIEknbSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBmdW5jdGlvbiBjYWxscyBhbmQgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb25zIHRvIHVuZm9sZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaXNtcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBtYWluIGZ1bmN0aW9ucyBpbiBwbGF5LiBJcyB0aGVyZSBhbiBpZiBzdGF0ZW1lbnQgb3Igc29tZSBzb3J0IG9mIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgcmFuZ2UgdGhhdCBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4gUGVyaGFwcyBpdCBjb25jZXJucyB0aGUgcGFyc2luZyBvZiB0aGUgU1JIIChTZWdtZW50IFJvdXRpbmcgSGVhZGVyKSBleHRlbnNpb24gaGVhZGVyPyBBcmUgdGhleSBjaGVja2luZyBmb3Igc3BlY2lmaWMgYmVoYXZpb3JzLCBsaWtlIGVuY2Fwc3VsYXRpb24gb3IgZGVjYXBzdWxhdGlvbiBvZiB0aGUgdHJhZmZpYz8gT3IgbWF5YmUgdGhpcyBpbnZvbHZlcyBtYW5pcHVsYXRpb24gb2YgdGhlIHJvdXRpbmcgdGFibGVzIG9yIGZvcndhcmRpbmcgZGF0YSBzdHJ1Y3R1cmVzP1xuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGNvbWJpbmF0aW9uIG9mIEMtc3BlY2lmaWMgZWxlbWVudHM7IHBvaW50ZXJzLCBzdHJ1Y3RzLCBhbmQgaG9wZWZ1bGx5IHNvbWUga2VybmVsLWxldmVsIGFic3RyYWN0aW9ucyB0byBrZWVwIGl0IHJlYWRhYmxlLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgcmFjZSBjb25kaXRpb25zLiBLbm93aW5nIGtlcm5lbCBjb2RlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBpZiB0aGlzIGludm9sdmVzIGFjY2Vzc2luZyBzaGFyZWQgcmVzb3VyY2VzLiBMb2NraW5nIHByaW1pdGl2ZXMg4oCTIHNwaW5sb2NrcywgbXV0ZXhlcywgcmVhZC13cml0ZSBsb2NrcyDigJMgd2lsbCBiZSBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyB0aHJlYWQtc2FmZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGR1ZSB0byBleGNlc3NpdmUgbG9ja2luZy5cblxuVGhlbiBJJ2xsIHNjcnV0aW5pemUgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgYXJlIHRoZXkgZGVhbGluZyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBpbnZhbGlkIHNlZ21lbnQgbGlzdHMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnM/IEdvb2QgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LCBlc3BlY2lhbGx5IGluIG5ldHdvcmtpbmcgY29kZSwgdG8gcHJldmVudCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYW5kIGVuc3VyZSB0aGUgc3lzdGVtJ3Mgcm9idXN0bmVzcy4gQW55IHVzZSBvZiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgb3BlcmF0aW9ucyBpcyBsaWtlbHkgaGVyZSwgc28gSSdsbCBiZSBsb29raW5nIGF0IGhvdyB0aGV5J3JlIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBJdCBjb3VsZCBpbnZvbHZlIHRoZSBzZXR1cCBvZiBzb21lIGtpbmQgb2YgbG9jYWwgcG9saWN5IHRvIGZvcndhcmQgcGFja2V0cy5cblxuRXNzZW50aWFsbHksIEkgYW0gZ29pbmcgdG8gaWRlbnRpZnkgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgYmVpbmcgcGVyZm9ybWVkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgdXNlZCB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC4gSSdsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIG1pbmRzZXQgb2YgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU2OjI3Ljg5NjAwMTQzOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODA6XFx0XFxuMTM4MTpcXHRkcm9wOlxcbjEzODI6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTM4MzpcXHRcXHRyZXR1cm4gZXJyO1xcbjEzODQ6XFx0fVxcbjEzODU6XFx0XFxuMTM4NjpcXHRERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG4xMzg3OlxcdFxcdC5iaF9sb2NrXFx0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXFxuMTM4ODpcXHR9O1xcbjEzODk6XFx0XFxuMTM5MDpcXHRib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzkxOlxcdHtcXG4xMzkyOlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuMTM5MzpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjEzOTQ6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4xMzk1OlxcdFxcbjEzOTY6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG4xMzk3OlxcdFxcdGlmICh1bmxpa2VseShzcmggPT0gTlVMTCkpXFxuMTM5ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTM5OTpcXHRcXG4xNDAwOlxcdFxcdGlmICh1bmxpa2VseSghc3JoX3N0YXRlLVxcdTAwM2V2YWxpZCkpIHtcXG4xNDAxOlxcdFxcdFxcdGlmICgoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAyNiA3KSAhPSAwKVxcbjE0MDI6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0MDM6XFx0XFxuMTQwNDpcXHRcXHRcXHRzcmgtXFx1MDAzZWhkcmxlbiA9ICh1OCkoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAzZVxcdTAwM2UgMyk7XFxuMTQwNTpcXHRcXHRcXHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMywgdHJ1ZSkpXFxuMTQwNjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0MDk6XFx0XFx0fVxcbjE0MTA6XFx0XFxuMTQxMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNDEyOlxcdH1cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE0MTU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbjE0MTY6XFx0e1xcbjE0MTc6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xcbjE0MTg6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuMTQxOTpcXHRcXHRpbnQgcmV0O1xcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xcbjE0MjI6XFx0XFx0aWYgKCFzcmgpIHtcXG4xNDIzOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE0MjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQyNTpcXHRcXHR9XFxuMTQyNjpcXHRcXHRhZHZhbmNlX25leHRzZWcoc3JoLCBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpO1xcbjE0Mjc6XFx0XFxuMTQyODpcXHRcXHQvKiBUaGUgYWNjZXNzIHRvIHRoZSBwZXItQ1BVIGJ1ZmZlciBzcmhfc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHJ1bm5pbmdcXG4xNDI5OlxcdFxcdCAqIGFsd2F5cyBpbiBzb2Z0aXJxIGNvbnRleHQgKHdpdGggZGlzYWJsZWQgQkgpLiBPbiBQUkVFTVBUX1JUIHRoZVxcbjE0MzA6XFx0XFx0ICogcmVxdWlyZWQgbG9ja2luZyBpcyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIGxvY2FsX2xvY2tfbmVzdGVkX2JoKClcXG4xNDMxOlxcdFxcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcXG4xNDMyOlxcdFxcdCAqIGJwZl9wcm9nX3J1bl9zYXZlX2NiKCkuXFxuMTQzMzpcXHRcXHQgKi9cXG4xNDM0OlxcdFxcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbjE0MzU6XFx0XFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4xNDM2OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbjE0Mzc6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gPSBzcmgtXFx1MDAzZWhkcmxlbiBcXHUwMDNjXFx1MDAzYyAzO1xcbjE0Mzg6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuMTQzOTpcXHRcXG4xNDQwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNDQxOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4xNDQyOlxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXFx1MDAzZWJwZi5wcm9nLCBza2IpO1xcbjE0NDM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ0NDpcXHRcXG4xNDQ1OlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMTQ0NjpcXHRcXHRjYXNlIEJQRl9PSzpcXG4xNDQ3OlxcdFxcdGNhc2UgQlBGX1JFRElSRUNUOlxcbjE0NDg6XFx0XFx0XFx0YnJlYWs7XFxuMTQ0OTpcXHRcXHRjYXNlIEJQRl9EUk9QOlxcbjE0NTA6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NTE6XFx0XFx0ZGVmYXVsdDpcXG4xNDUyOlxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiYnBmLXNlZzZsb2NhbDogSWxsZWdhbCByZXR1cm4gdmFsdWUgJXVcXFxcblxcXCIsIHJldCk7XFxuMTQ1MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTQ1NDpcXHRcXHR9XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjE0NTc6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NTg6XFx0XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDU5OlxcdFxcbjE0NjA6XFx0XFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxuMTQ2MTpcXHRcXHRcXHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XFxuMTQ2MjpcXHRcXG4xNDYzOlxcdFxcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcXG4xNDY0OlxcdFxcbjE0NjU6XFx0ZHJvcDpcXG4xNDY2OlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxuMTQ2NzpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDY4OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0Njk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjoyNy44OTYyMTA2MzhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExMDk5NjM2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBhbmQgZnVuY3Rpb25hbGl0eSBvZiBgc2VnNl9nZXRfc3JoYC4gSSdsbCBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0YXJnZXRlZCBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgc2VnNl9nZXRfc3JoYC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYnVpbGRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGVsZW1lbnRzIGlzIGtleSBmb3IgbWUgdG8gdGhlbiBkZXRlcm1pbmUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdG8gc2VlIHdoZXJlIHRoZSBwb3RlbnRpYWwgZGVzaWduIGNob2ljZXMgaGF2ZSBiZWVuIG1hZGUsIGFzIHdlbGwgYXMgd2hlcmUgbXkgZm9jdXMgc2hvdWxkIGJlIGluIGV2YWx1YXRpbmcgdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjozOS4wMDYxNzczNTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTg2NzcyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9nZXRfc3JoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NlZzYuaD02Nz1leHRlcm4gYm9vbCBzZWc2X3ZhbGlkYXRlX3NyaChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgaW50IGxlbiwgYm9vbCByZWR1Y2VkKTtcXG5pbmNsdWRlL25ldC9zZWc2Lmg6Njg6ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDIzOlxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjQtXFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNi5jPTI2PWJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZClcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy03OC1cXG5uZXQvaXB2Ni9zZWc2LmM6Nzk6c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxcbm5ldC9pcHY2L3NlZzYuYy04MC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9MTEyPXZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy0xMTctXFx0LyogVXBkYXRlIG5ldHdvcmsgaGVhZGVyIHRvIHBvaW50IHRvIHRoZSBpbnZva2luZyBwYWNrZXRcXG5uZXQvaXB2Ni9zZWc2LmM6MTE4OlxcdCAqIGluc2lkZSB0aGUgSUNNUCBwYWNrZXQsIHNvIHdlIGNhbiB1c2UgdGhlIHNlZzZfZ2V0X3NyaCgpXFxubmV0L2lwdjYvc2VnNi5jLTExOS1cXHQgKiBoZWxwZXIuXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmMtMTIyLVxcbm5ldC9pcHY2L3NlZzYuYzoxMjM6XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxubmV0L2lwdjYvc2VnNi5jLTEyNC1cXHRpZiAoIXNyaClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMTY9c3RhdGljIHN0cnVjdCBpcHY2X3NyX2hkciAqZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyMDpcXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCBJUDZfRkhfRl9TS0lQX1JIKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIxLVxcdGlmICghc3JoKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIzNi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM3OlxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzgtXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiBzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZSAwKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQ5ND1lbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNTA0LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MDU6c3RhdGljIGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy01MDYte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzUxOlxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTItXFx0c3Job2ZmID0gc3JoID8gKCh1bnNpZ25lZCBjaGFyICopc3JoIC0gc2tiLVxcdTAwM2VkYXRhKSA6IDA7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc1MzpcXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1NC0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU2OjQzLjAyNDg2MDA4M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDgyMDE2OTMzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgc2VnNl9nZXRfc3JoYCBpbXBsZW1lbnRhdGlvbiwgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIGBzZWc2X2dldF9zcmhgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHB1bGxpbmcgdXAgdGhlIGBzZWc2X2dldF9zcmhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY2L3NlZzYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgYW5kIGhhbmRsZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgU1J2NiwgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWNrZXQgcHJvY2Vzc2luZywgc28gSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCBvcGVyYXRlcyBhdCBhIGxvdyBsZXZlbC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhpbmdzIGxpa2U6IGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBTUkggdHlwZXMgKGlmIGFueSksIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHJldHJpZXZhbCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFNSdjYgc3RhY2suIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGVmZmljaWVuY3k7IGhvdyBpdCBhY2Nlc3NlcyB0aGUgaGVhZGVyIGRldGFpbHMgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiBTUnY2IHJvdXRpbmcuIExldCdzIHNlZSBob3cgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU4OjMxLjIyNjU1NjU0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzc6XFx0fVxcbiAgNzg6XFx0XFxuICA3OTpcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gIDgyOlxcdFxcdGludCBsZW4sIHNyaG9mZiA9IDA7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBcXHUwMDI2ZmxhZ3MpIFxcdTAwM2MgMClcXG4gIDg1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzcmhvZmYgKyBzaXplb2YoKnNyaCkpKVxcbiAgODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0bGVuID0gKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc3Job2ZmICsgbGVuKSlcXG4gIDk1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBub3RlIHRoYXQgcHNrYl9tYXlfcHVsbCBtYXkgY2hhbmdlIHBvaW50ZXJzIGluIGhlYWRlcjtcXG4gIDk4OlxcdFxcdCAqIGZvciB0aGlzIHJlYXNvbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVsb2FkIHRoZW0gd2hlbiBuZWVkZWQuXFxuICA5OTpcXHRcXHQgKi9cXG4gMTAwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgdHJ1ZSkpXFxuIDEwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0cmV0dXJuIHNyaDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0LyogRGV0ZXJtaW5lIGlmIGFuIElDTVAgaW52b2tpbmcgcGFja2V0IGNvbnRhaW5zIGEgc2VnbWVudCByb3V0aW5nXFxuIDEwOTpcXHQgKiBoZWFkZXIuICBJZiBpdCBkb2VzLCBleHRyYWN0IHRoZSBvZmZzZXQgdG8gdGhlIHRydWUgZGVzdGluYXRpb25cXG4gMTEwOlxcdCAqIGFkZHJlc3MsIHdoaWNoIGlzIGluIHRoZSBmaXJzdCBzZWdtZW50IGFkZHJlc3MuXFxuIDExMTpcXHQgKi9cXG4gMTEyOlxcdHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdF9fdTE2IG5ldHdvcmtfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTg6MzEuMjI2NjI0ODRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc3NDAyNjYyNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VnNiBCUEYgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcHJvYmxlbSB0aGlzIGFpbXMgdG8gc29sdmUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgc3RhdGUgd2l0aGluIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiBgc2VnNmAuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGFwcGVhcnMgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgaXB2Nl9maW5kX2hkcmAgdG8gbG9jYXRlIHRoZSBTUkggd2l0aGluIGEgcGFja2V0LCBjYWxjdWxhdGluZyBhbiBvZmZzZXQuIE5vdyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc2VnNl9nZXRfc3JoKHNrYiwgMClgIGFuZCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYC4gVGhlIGZpcnN0IGNoYW5nZSBzaW1wbGlmaWVzIFNSSCByZXRyaWV2YWwsIGFuZCB0aGUgc2Vjb25kIG11c3QgYmUgc29tZSBzb3J0IG9mIHBvaW50ZXIgcmUtY2FsY3VsYXRpb247IG1vc3QgbGlrZWx5IGZvciB3aGVuIGFuIHNrYiBpcyBhZGp1c3RlZC4gVGhlIGNvbmRpdGlvbmFsIGhhcyBiZWVuIHNpbXBsaWZpZWQ6IHdoZXJlIGJlZm9yZSB0aGVyZSB3YXMgYSBuZWdhdGl2ZSByZXR1cm4gZnJvbSBgaXB2Nl9maW5kX2hkcmAgdGhpcyBpcyBub3cgaGFuZGxlZCBieSBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzZWc2X2dldF9zcmgoKWAuXG5cblRoZSBuZXh0IHBhcnQgb2YgdGhlIHBhdGNoIHRhY2tsZXMgdGhlIHNpdHVhdGlvbiBpbiB3aGljaCB3ZSBhZGp1c3QgdGhlIElQdjYgaGVhZGVyLCBsaWtlIHdoZW4gYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNmAgb3IgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUGAgYWN0aW9ucyBhcmUgdGFrZW4uIFByZXZpb3VzbHkgaXQgcHVsbGVkIHRoZSBoZWFkZXIuIE5vdywgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayB3aXRoIGBwc2tiX21heV9wdWxsYCB0byBzZWUgaWYgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBwdWxsLCBhbmQgaWYgbm90IHNldHMgYHNyaGAgdG8gbnVsbCBhbmQgY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50IGZvciBhdm9pZGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBBZnRlciBgcHNrYl9tYXlfcHVsbGAgc3VjY2VlZHMsIHRoZXJlJ3MgYSBwdWxsIHdpdGggYF9fc2tiX3B1bGxgIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG5ldHdvcmsgaGVhZGVyLiBOb3RhYmx5LCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agc2VlbXMgdG8gYmUgY2FsbGVkICphZnRlciogaGVhZGVyIGFkanVzdG1lbnRzIGluIGJvdGggc2NlbmFyaW9zLlxuXG5UaGUgYGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYilgIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBzZXZlcmFsIGNhc2VzIGFmdGVyIFNSSCBwcm9jZXNzaW5nLCBhbmQgYWZ0ZXIgdGhlIGFjdGlvbnMgd2hpY2ggYWRqdXN0IHRoZSBwYWNrZXQgaGVhZGVycy4gVGhpcyBzdWdnZXN0cyB0aGUgaW50ZW50IGlzIHRvIHVwZGF0ZSB0aGUgU1JIIHN0YXRlICphZnRlciogcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSBwYWNrZXQgc3RydWN0dXJlLiBDcml0aWNhbGx5LCB0aGVyZSdzIG5vdyBhbiB1cGRhdGUgdG8gdGhlIGNhbGxpbmcgY29udmVudGlvbiBvZiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCB3aGljaCBkb2VzICpub3QqIGhhcHBlbiBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgY29kZS5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgcGF0Y2guIFRoaXMgaXMgY2xlYXJseSBhIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgU1JIIGluZm9ybWF0aW9uLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc2AgYW5kIGBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaGAgdG8gdW5kZXJzdGFuZCBob3cgYHNyaF9zdGF0ZWAgaXMgYmVpbmcgKnVzZWQqIGJleW9uZCBqdXN0IHRoZSB1cGRhdGUuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHRydWUga2V5IHRvIGhvdyB0aGUgc3RhdGUgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGJ5IHRoZSBCUEYgcHJvZ3JhbS5cblxuT3ZlcmFsbCwgaXQgbG9va3MgbGlrZSBhIGNsZWFuLXVwLCBvcHRpbWl6YXRpb24sIGFuZCBidWdmaXggcmVsYXRlZCB0byBTUkggc3RhdGUgbWFuYWdlbWVudCBpbiB0aGUgY29udGV4dCBvZiBCUEYtYmFzZWQgU2VnbWVudCBSb3V0aW5nLCBmb2N1c2luZyBvbiBlbnN1cmluZyBwb2ludGVyIHZhbGlkaXR5IGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb25zLiBUaGUgYWRkaXRpb24gb2YgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgIHNlZW1zIHRvIGJlIHRoZSBsaW5jaHBpbiB0byBtYWludGFpbmluZyBjb3JyZWN0IHBvaW50ZXIgdmFsdWVzIGFmdGVyIHRoZSBgc2tiYCBpcyBhZGp1c3RlZCwgYXMgd2VsbCBhcyBhIG1vcmUgcm9idXN0IGNoZWNrIHRvIGRldGVjdCB0aGUgYWJzZW5jZSBvZiBhbiBTUkguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA4OjAxOjI4LjYyOTI5MDIyOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjk3MDpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVcXG42OTcxOlxcdH07XFxuNjk3MjpcXHRcXG42OTczOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbjY5NzQ6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuNjk3NTpcXHRcXHQgICBjb25zdCB2b2lkICosIGZyb20sIHUzMiwgbGVuKVxcbjY5NzY6XFx0e1xcbjY5Nzc6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG42OTc4OlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNjk3OTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbjY5ODA6XFx0XFx0dm9pZCAqc3JoX3RsdnMsICpzcmhfZW5kLCAqcHRyO1xcbjY5ODE6XFx0XFx0aW50IHNyaG9mZiA9IDA7XFxuNjk4MjpcXHRcXG42OTgzOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyaF9zdGF0ZS1cXHUwMDNlYmhfbG9jayk7XFxuNjk4NDpcXHRcXHRpZiAoc3JoID09IE5VTEwpXFxuNjk4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42OTg2OlxcdFxcbjY5ODc6XFx0XFx0c3JoX3RsdnMgPSAodm9pZCAqKSgoY2hhciAqKXNyaCArICgoc3JoLVxcdTAwM2VmaXJzdF9zZWdtZW50ICsgMSkgXFx1MDAzY1xcdTAwM2MgNCkpO1xcbjY5ODg6XFx0XFx0c3JoX2VuZCA9ICh2b2lkICopKChjaGFyICopc3JoICsgc2l6ZW9mKCpzcmgpICsgc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4pO1xcbjY5ODk6XFx0XFxuNjk5MDpcXHRcXHRwdHIgPSBza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQ7XFxuNjk5MTpcXHRcXHRpZiAocHRyIFxcdTAwM2U9IHNyaF90bHZzIFxcdTAwMjZcXHUwMDI2IHB0ciArIGxlbiBcXHUwMDNjPSBzcmhfZW5kKVxcbjY5OTI6XFx0XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbjY5OTM6XFx0XFx0ZWxzZSBpZiAocHRyIFxcdTAwM2MgKHZvaWQgKilcXHUwMDI2c3JoLVxcdTAwM2VmbGFncyB8fFxcbjY5OTQ6XFx0XFx0XFx0IHB0ciArIGxlbiBcXHUwMDNlICh2b2lkICopXFx1MDAyNnNyaC1cXHUwMDNlc2VnbWVudHMpXFxuNjk5NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0aWYgKHVubGlrZWx5KGJwZl90cnlfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbikpKVxcbjY5OTg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNjk5OTpcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwMDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzAwMTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MDAyOlxcdFxcbjcwMDM6XFx0XFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgZnJvbSwgbGVuKTtcXG43MDA0OlxcdFxcdHJldHVybiAwO1xcbjcwMDU6XFx0fVxcbjcwMDY6XFx0XFxuNzAwNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG43MDA4OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXFxuNzAwOTpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjcwMTA6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG43MDExOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbjcwMTI6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbjcwMTM6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjcwMTQ6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuNzAxNTpcXHR9O1xcbjcwMTY6XFx0XFxuNzAxNzpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTg6XFx0e1xcbjcwMTk6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDE6MjguNjI5OTA4MDQ4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzQyOTE4ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGNpcmNsaW5nIGJhY2sgdG8gYGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoYC4gSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIG9uZSBzcGVjaWZpY2FsbHkuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIExXVCBpbmZyYXN0cnVjdHVyZSwgYnV0IHRoaXMgZnVuY3Rpb24ncyBuYW1lIHN1Z2dlc3RzIGl0J3MgZGVhbGluZyB3aXRoIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgYWRqdXN0bWVudHMgd2l0aGluIHRoZSBsaWdodHdlaWdodCB0dW5uZWwgZnJhbWV3b3JrLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgbWFuaXB1bGF0aW5nIHRoZSBTUkggd2l0aGluIGEgQlBGIHByb2dyYW0gb2ZmZXJzIHNpZ25pZmljYW50IHBvd2VyIGJ1dCBhbHNvIGludHJvZHVjZXMgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBpbiB0ZXJtcyBvZiBwYWNrZXQgbW9kaWZpY2F0aW9uIGFuZCBoZWFkZXIgdmFsaWRpdHkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgdXNlIGNhc2VzIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgZm9yPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgaXQgaW4gaGFuZGxpbmcgdmFyaW91cyBTUkggY29uZmlndXJhdGlvbnMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhcGF0aCBhbmQgZW5zdXJlIGl0J3Mgbm90IGludHJvZHVjaW5nIGFueSB1bmludGVuZGVkIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gTGV0J3MgZGlnIGluIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byBwb3RlbnRpYWwgbGltaXRhdGlvbnMgYW5kIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIHNlY3VyaXR5IGhhcmRlbmluZyBtaWdodCBiZSBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwODowMTo1OC45NzI4MzA2MzRaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMDgsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcxMDg6XFx0QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG43MTA5OlxcdFxcdCAgIHMzMiwgbGVuKVxcbjcxMTA6XFx0e1xcbjcxMTE6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MTEyOlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzExMzpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbjcxMTQ6XFx0XFx0dm9pZCAqc3JoX2VuZCwgKnNyaF90bHZzLCAqcHRyO1xcbjcxMTU6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmhkcjtcXG43MTE2OlxcdFxcdGludCBzcmhvZmYgPSAwO1xcbjcxMTc6XFx0XFx0aW50IHJldDtcXG43MTE4OlxcdFxcbjcxMTk6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG43MTIwOlxcdFxcdGlmICh1bmxpa2VseShzcmggPT0gTlVMTCkpXFxuNzEyMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MTIyOlxcdFxcbjcxMjM6XFx0XFx0c3JoX3RsdnMgPSAodm9pZCAqKSgodW5zaWduZWQgY2hhciAqKXNyaCArIHNpemVvZigqc3JoKSArXFxuNzEyNDpcXHRcXHRcXHRcXHQoKHNyaC1cXHUwMDNlZmlyc3Rfc2VnbWVudCArIDEpIFxcdTAwM2NcXHUwMDNjIDQpKTtcXG43MTI1OlxcdFxcdHNyaF9lbmQgPSAodm9pZCAqKSgodW5zaWduZWQgY2hhciAqKXNyaCArIHNpemVvZigqc3JoKSArXFxuNzEyNjpcXHRcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbik7XFxuNzEyNzpcXHRcXHRwdHIgPSBza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQ7XFxuNzEyODpcXHRcXG43MTI5OlxcdFxcdGlmICh1bmxpa2VseShwdHIgXFx1MDAzYyBzcmhfdGx2cyB8fCBwdHIgXFx1MDAzZSBzcmhfZW5kKSlcXG43MTMwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjcxMzE6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgKHZvaWQgKikoKGNoYXIgKilwdHIgLSBsZW4pIFxcdTAwM2Ugc3JoX2VuZCkpXFxuNzEzMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MTMzOlxcdFxcbjcxMzQ6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIDApIHtcXG43MTM1OlxcdFxcdFxcdHJldCA9IHNrYl9jb3dfaGVhZChza2IsIGxlbik7XFxuNzEzNjpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuNzEzNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjcxMzg6XFx0XFxuNzEzOTpcXHRcXHRcXHRyZXQgPSBicGZfc2tiX25ldF9oZHJfcHVzaChza2IsIG9mZnNldCwgbGVuKTtcXG43MTQwOlxcdFxcdH0gZWxzZSB7XFxuNzE0MTpcXHRcXHRcXHRyZXQgPSBicGZfc2tiX25ldF9oZHJfcG9wKHNrYiwgb2Zmc2V0LCAtMSAqIGxlbik7XFxuNzE0MjpcXHRcXHR9XFxuNzE0MzpcXHRcXG43MTQ0OlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MTQ1OlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG43MTQ2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNzE0NzpcXHRcXG43MTQ4OlxcdFxcdGhkciA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG43MTQ5OlxcdFxcdGhkci1cXHUwMDNlcGF5bG9hZF9sZW4gPSBodG9ucyhza2ItXFx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbjcxNTA6XFx0XFxuNzE1MTpcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcxNTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzE1MzpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MTU0OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuICs9IGxlbjtcXG43MTU1OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSBmYWxzZTtcXG43MTU2OlxcdFxcdHJldHVybiAwO1xcbjcxNTc6XFx0fVxcbjcxNTg6XFx0XFxuNzE1OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbjcxNjA6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLFxcbjcxNjE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG43MTYyOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuNzE2MzpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG43MTY0OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG43MTY1OlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG43MTY2OlxcdH07XFxuNzE2NzpcXHQjZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDE6NTguOTczMzAwNDY0WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDYyMjAyNTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggaW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBzYWZlZ3VhcmRpbmcgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgc3RhbGUgZGF0YSBwb2ludGVycyB3aXRoaW4gdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHdhcyBnb2luZyB3cm9uZywgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgY2hhbmdlcy5cblxuSW5pdGlhbGx5LCB3aXRoIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YCwgdGhlIGNvZGUgd2FzIHB1bGxpbmcgYW4gaW5uZXIgSVB2NiBoZWFkZXIgd2l0aCBgcHNrYl9wdWxsYC4gSG93ZXZlciwgYSBjcnVjaWFsIG92ZXJzaWdodCB3YXMgdGhhdCBpdCAqd2Fzbid0KiB2ZXJpZnlpbmcgaWYgdGhlIGhlYWRlciB3YXMgKmFjdHVhbGx5KiBwcmVzZW50IHdpdGhpbiB0aGUgbGluZWFyIGJ1ZmZlciBhZnRlciB0aGUgYGhkcm9mZmAgb2Zmc2V0IHdpdGggYHBza2JfbWF5X3B1bGxgLCBzbyB0aGVyZSBjb3VsZCBiZSBhIGRhdGEgY29weSBhbmQgYWxsb2NhdGlvbiB0byBwdWxsIGl0IGluLiBGdXJ0aGVybW9yZSwgdGhlcmUgd2FzIGFuIGlzc3VlIHdoZXJlLCBpZiBgcHNrYl9tYXlfcHVsbGAgZmFpbGVkIG9yIHJlYWxsb2NhdGVkIHRoZSBgc2tiYCBoZWFkLCB0aGUgYHNyaF9zdGF0ZWAgb3IgdGhlIHJlc3VsdHMgb2YgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgIHdvdWxkIGhhdmUgcG9pbnRlZCB0byBzdGFsZSBtZW1vcnkuXG5cblNpbWlsYXJseSwgaW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgdGhlIGNvZGUgdXNlZCBgaXB2Nl9maW5kX2hkcmAgdG8gbG9jYXRlIHRoZSBTUkggYnV0IGRpZCBub3QgYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBgaXB2Nl9maW5kX2hkcmAgZG9lc24ndCB2YWxpZGF0ZSB0aGUgU1JIJ3MgcHJlc2VuY2UgaW4gdGhlIGxpbmVhciBza2IgZGF0YSwgbm9yIGlmIHRoZSBTUkggaXMgdmFsaWQhIEl0IHdhcyBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIFNSSCB0aHJvdWdoIGBza2ItXHUwMDNlZGF0YSArIHNyaG9mZmAgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTUkggd2Fzbid0IHByb3Blcmx5IHB1bGxlZCBvciB2YWxpZGF0ZWQuIFRoZSBgc2VnNl9nZXRfc3JoYCBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRoaXMgdmlhIGBwc2tiX21heV9wdWxsYCBhbmQgZnVsbCBTUkggdmFsaWRhdGlvbi5cblxuSSBhbHNvIHNlZSB0aGF0IGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCBpcyBub3cgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBpbiBzb21lIGNvbnRleHRzIChsaWtlIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZgIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYCksIGFuZCBpcyBhbHNvIGNhbGxlZCBhZnRlciBjYWxscyB0aGF0IHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgc2tiLCBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgdG8gZW5zdXJlIGBzcmhfc3RhdGVgIGlzIHVwZGF0ZWQuXG5cblNvLCB0aGUgZml4IGludHJvZHVjZXMgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyB0byB2YWxpZGF0ZSBoZWFkZXIgcHJlc2VuY2UgYW5kICp0aGVuKiB0aGUgdXNlIG9mIGBzZWc2X2dldF9zcmhgIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBTUkgsIHRoZXJlYnkgcmVkdWNpbmcgdGhlIGNoYW5jZXMgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIENydWNpYWxseSwgdGhlIGNvZGUgbm93IGFsc28gaW5jb3Jwb3JhdGVzIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGFmdGVyIGFueSBwb3RlbnRpYWwgYHNrYmAgcmVhbGxvY2F0aW9ucyB0cmlnZ2VyZWQgYnkgYHBza2JfbWF5X3B1bGxgLiBUaGVzZSBwb2ludHMgYXJlIGtleS5cblxuTm93LCBsZXQncyBwaXZvdCB0byBtZW1vcnkgc2FmZXR5LiBUaGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIHJ1biBpdCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqTm8gdXNlci1zcGFjZSBkYXRhIGxlYWtzLioqIFRoaXMgcGF0Y2ggYXZvaWRzIGFueSBjb3B5LXRvLXVzZXIsIHB1dF91c2VyLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zIG9yIGluZm8tbGVha3MsIHNvIHdlIGNhbiBjcm9zcyB0aGF0IG9uZSBvZmYuXG4yLiAgKipObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLioqIFRoZSBgc3JoYCBhbmQgYHNyaF9zdGF0ZWAgc3RydWN0IGZpZWxkcyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBUaGUgYGhkcm9mZmAgaXMgYXNzaWduZWQgYW5kIGRlZmluZWQuIFNvIHRoYXQncyBzYWZlLlxuMy4gICoqTm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi4qKiBObyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIHRoYXQncyBub3QgYSBjb25jZXJuLlxuNC4gICoqTm8gYm91bmRzIGNoZWNrIGlzc3VlcyBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4qKiBUaGUgZml4IGFjdHVhbGx5IGFkZHMgKnN0cmljdGVyKiBjaGVja3MsIGxpa2UgYHBza2JfbWF5X3B1bGxgIGFuZCBgc2VnNl9nZXRfc3JoYCwgZW5zdXJpbmcgdGhhdCBza2IgZGF0YSBwb2ludGVycyBhcmUgdXBkYXRlZCBhZnRlciByZWFsbG9jYXRpb25zLiBUaGlzIGlzIGFjdHVhbGx5ICppbXByb3ZpbmcqIGJvdW5kcyBjaGVja2luZy5cblxuU28sIGJhc2VkIG9uIHRoaXMsIEtNU0FOIGlzbid0IHdhcnJhbnRlZC4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzdGFsZSBwb2ludGVyIGlzc3VlcyBkdWUgdG8gYHBza2JfcHVsbGAgYW5kIGBwc2tiX21heV9wdWxsYCDigJMgY29tbW9uIEtBU0FOIHRlcnJpdG9yeS4gS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVzdWx0aW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcmV2aXNpdCB3aGF0IGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGRvZXMgZXhhY3RseS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGNvbmZpcm0gaXQgaGFuZGxlcyByZWNvbXB1dGVkIGBza2JgIGhlYWRlciBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwODowNDozMy41OTUzMjg5OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MDIxOTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGtpdC5jPTUzPW5ldGtpdF9ydW4oY29uc3Qgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy01OS1cXHRicGZfbXByb2dfZm9yZWFjaF9wcm9nKGVudHJ5LCBmcCwgcHJvZykge1xcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjYwOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5kcml2ZXJzL25ldC9uZXRraXQuYy02MS1cXHRcXHRyZXQgPSBicGZfcHJvZ19ydW4ocHJvZywgc2tiKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9OTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbmV0X2N0eF9nZXRfYWxsX3VzZWRfZmx1c2hfbGlzdHMoc3RydWN0IGxpc3RfaGVhZCAqKmxoX21hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTczLSAqL1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTc0OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05NzUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD05ODM9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfcnVuX2RhdGFfcG9pbnRlcnMoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTk5My1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjk5NDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05OTUtXFx0cmVzID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEwMDItXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMDAzOi8qIFNpbWlsYXIgdG8gYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycygpLCBleGNlcHQgdGhhdCBzYXZlIG9yZ2luYWxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEwMDQtICogZGF0YSBpbiBjYi1cXHUwMDNlZGF0YSBhbmQgY2ItXFx1MDAzZW1ldGFfZGF0YSBmb3IgcmVzdG9yZS5cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTE5OC1cXHRpZiAoaXNfZGlyZWN0X3BrdF9hY2Nlc3MpXFxubmV0L2JwZi90ZXN0X3J1bi5jOjExOTk6XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjAwLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDQ5Mj10Y3hfcnVuKGNvbnN0IHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDUwMS1cXHRicGZfbXByb2dfZm9yZWFjaF9wcm9nKGVudHJ5LCBmcCwgcHJvZykge1xcbm5ldC9jb3JlL2Rldi5jOjQ1MDI6XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2Rldi5jLTQ1MDMtXFx0XFx0cmV0ID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNjkyPXN0YXRpYyBpbmxpbmUgaW50IGJwZl90cnlfbWFrZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTY5Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxNjk3OlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xNjk4LVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMjk4PUJQRl9DQUxMXzMoYnBmX3NrYl92bGFuX3B1c2gsIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCB2bGFuX3Byb3RvLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMxMS1cXG5uZXQvY29yZS9maWx0ZXIuYzozMzEyOlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zMzEzLVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMzI1PUJQRl9DQUxMXzEoYnBmX3NrYl92bGFuX3BvcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzozMzMzOlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zMzM0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zNDk0PUJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MTktXFx0cmV0ID0gYnBmX3NrYl9wcm90b194bGF0KHNrYiwgcHJvdG8pO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjM1MjA6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MjEtXFx0aWYgKHJldClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM4NDc9QlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zOTM3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5Mzg6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzktXFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQwMjk9QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzNDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDAzNS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDA5Nj1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX2hlYWQsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBoZWFkX3Jvb20sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MTAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQxMDE6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQxMDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4ODA9c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTAzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MDQ6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MDUtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTc9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjMtXFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAyNDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyNS1cXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDY0LVxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gTlVMTDtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDY1OlxcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDY2LVxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDg9QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNDMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzE0NS1cXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmM9Mzk9c3RhdGljIGludCBydW5fbHd0X2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2x3dF9wcm9nICpsd3QsXFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmMtNDktXFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXFx1MDAyNl9fYnBmX25ldF9jdHgpO1xcbm5ldC9jb3JlL2x3dF9icGYuYzo1MDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvbHd0X2JwZi5jLTUxLVxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKGx3dC1cXHUwMDNlcHJvZywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYz02MDU9aW50IGJwZl9sd3RfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYy02NTctXFx0bWVtY3B5KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHIsIGxlbik7XFxubmV0L2NvcmUvbHd0X2JwZi5jOjY1ODpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvbHd0X2JwZi5jLTY1OS1cXHRza2JfY2xlYXJfaGFzaChza2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MTQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDAtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDQxOlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ0Mi1cXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVxcdTAwM2VicGYucHJvZywgc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDQ6MzUuODc1NTU3NjI2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTQ2ODIyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGVCUEYgRGF0YSBQb2ludGVyIEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIEl0IHNlZW1zIGxpa2UgdGhlIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBrZWVwaW5nIGVCUEYgcHJvZ3JhbXMgc2FmZSB3aGVuIHRoZXkncmUgYWNjZXNzaW5nIHBhY2tldCBkYXRhIGRpcmVjdGx5IHZpYSBgY2ItXHUwMDNlZGF0YWAgYW5kIGBjYi1cdTAwM2VkYXRhX2VuZGAuIFRoZXNlIHBvaW50ZXJzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBwYWNrZXQgZGlyZWN0IGFjY2VzcyB3aXRoaW4gZUJQRiBwcm9ncmFtcy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIHRoZSBwYWNrZXQgYnVmZmVyIChgc2tiYCkgZ2V0cyBtYW5pcHVsYXRlZCwgc2F5IHdpdGggc29tZXRoaW5nIGxpa2UgYSBgcHNrYl9tYXlfcHVsbGAgb3BlcmF0aW9uIChhcyBzZWVuIGluIGBzZWc2X2dldF9zcmhgKSwgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGNhbiBzaGlmdCBhcm91bmQuIElmIHdlICpkb24ndCogdXBkYXRlIHRob3NlIGRhdGEgcG9pbnRlcnMgd2l0aCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2AgaW4gdGhlc2Ugc2l0dWF0aW9ucywgZUJQRiBwcm9ncmFtcyBvciB0aGVpciBoZWxwZXIgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSByZWFkaW5nIG9yIHdyaXRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgbG9jYXRpb25zLiBUaGlzIGxlYWRzIGRpcmVjdGx5IHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIOKAkyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEkndmUgcmVhZCwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBsaWtlIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0J3Mgc29sZWx5IGFib3V0ICpwcmV2ZW50aW5nKiBtZW1vcnkgZXJyb3JzIGluIHRoZSBmaXJzdCBwbGFjZSwgZW5zdXJpbmcgdGhhdCBlQlBGIHByb2dyYW1zIGFyZSBvcGVyYXRpbmcgd2l0aCB2YWxpZCBkYXRhIHBvaW50ZXJzLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSd2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHRvb2wuIEkgbmVlZCB0bzpcblxuMS4gIENhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBqdXN0IG9uY2UuXG4yLiAgUHJvdmlkZSB0aGUgY29udHJhc3QgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uXG4zLiAgS2VlcCB0aGUgb3V0cHV0IGNsZWFyIGFuZCBkZXRhaWxlZC5cblxuQWxyaWdodCwgSSB0aGluayBJJ20gcmVhZHkgdG8gbWFrZSB0aGUgdG9vbCBjYWxsIGFuZCBkb2N1bWVudCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0MCwiT3V0cHV0VG9rZW5zIjozMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDQ6NTYuODIyMzgzMDJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXFxuXFxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90OlxcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cXG4zLiBJbnRyb2R1Y2UgYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXFxuXFxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90OlxcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cXG4zLiBJbnRyb2R1Y2UgYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 07:45:57 +0000 UTC FinishedAt: 2026-09-02 08:04:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "fa029dd5-e76d-4745-a062-e0d26e2a9239" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_lwt_seg6_action", "input_action_end_bpf", "seg6_bpf_has_valid_srh" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgbWFudWFsIFNSSCBsb29rdXBzIHdpdGggYHNlZzZfZ2V0X3NyaCgpYCAod2hpY2ggcGVyZm9ybXMgcHJvcGVyIGBwc2tiX21heV9wdWxsYCBhbmQgdmFsaWRhdGVzIHRoZSBTUkgpLCBlbnN1cmVzIEJQRiBwYWNrZXQgZGF0YSBwb2ludGVycyAoYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgKSBhcmUgcmVjYWxjdWxhdGVkIHdoZW4gc2tiIGxpbmVhciBidWZmZXJzIG1heSBiZSByZWFsbG9jYXRlZCBkdXJpbmcgaGVhZGVyIHB1bGxzLCBhbmQgYWRkcyBtaXNzaW5nIGJvdW5kcyB2YWxpZGF0aW9uIChgcHNrYl9tYXlfcHVsbGApIGJlZm9yZSBwdWxsaW5nIElQdjYgaGVhZGVycy5cblxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXG5cblRoZSBwYXRjaCBkb2VzIG5vdDpcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cbjIuIEV4cG9zZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLlxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgU1JIIHN0YXRlIGhhbmRsaW5nIGFuZCBza2IgbGluZWFyIGJ1ZmZlciB2YWxpZGF0aW9uIChwc2tiX21heV9wdWxsIGluc3RlYWQgb2YgcHNrYl9wdWxsKSBpbiB0aGUgU1J2NiBCUEYgaGVscGVyIGJwZl9sd3Rfc2VnNl9hY3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgYW5kIEJQRiBwYWNrZXQgaGFuZGxpbmcgcGF0aHMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3Yzg4NjBlMzMyMzRiYzY4ZDkxZTVlMmEyM2ZmY2M1MTA4NzRjN2VkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzo0Nzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi4xZGQzYTY4NWQxYjg5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzAxOCwxNSAmIzQzOzcwMTgsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbiYjNDM7XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKSB7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc3Job2ZmKTtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cdTAwM2VzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuLVx0fVxuJiM0MztcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuJiM0MztcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiYjNDM7XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuJiM0MztcdGlmICghc3JoKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbiYjNDM7XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuIH1cbiBcbiBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbkBAIC03MDU5LDE1ICYjNDM7NzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcbiBcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLVx0XHRpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpXG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcbiYjNDM7XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4mIzQzO1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcbiBcbiBcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XG4gXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXG4tXHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxuQEAgLTcwNzUsOCAmIzQzOzcwNzksNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuJiM0MztcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxuQEAgLTcwODQsOCAmIzQzOzcwODcsNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsXG4gXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tXHRcdGlmICghZXJyKVxuLVx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4mIzQzO1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFNSSCBzdGF0ZSBoYW5kbGluZyBhbmQgc2tiIGxpbmVhciBidWZmZXIgdmFsaWRhdGlvbiAocHNrYl9tYXlfcHVsbCBpbnN0ZWFkIG9mIHBza2JfcHVsbCkgaW4gdGhlIFNSdjYgQlBGIGhlbHBlciBicGZfbHd0X3NlZzZfYWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGFuZCBCUEYgcGFja2V0IGhhbmRsaW5nIHBhdGhzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M4ODYwZTMzMjM0YmM2OGQ5MWU1ZTJhMjNmZmNjNTEwODc0YzdlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDc6NDc6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjFkZDNhNjg1ZDFiODkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDE4LDE1ICYjNDM7NzAxOCwxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwotCWludCBzcmhvZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgJmx0OyAwKSB7Ci0JCXNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTDsKLQl9IGVsc2UgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNyaG9mZik7Ci0JCXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoX3N0YXRlLSZndDtzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwotCQlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKLQl9CiYjNDM7CXNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApOwomIzQzOwlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7c3JoID0gc3JoOwomIzQzOwlpZiAoIXNyaCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3JoX3N0YXRlLSZndDtoZHJsZW4gPSBzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwomIzQzOwlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKIH0KIAogQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC03MDU5LDE1ICYjNDM7NzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYiwKIAogCQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpICZsdDsgMCkKIAkJCXJldHVybiAtRUJBRE1TRzsKLQkJaWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKQomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7CiYjNDM7CQkJc3JoX3N0YXRlLSZndDtzcmggPSBOVUxMOwomIzQzOwkJCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCX0KJiM0MzsJCV9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpOwogCiAJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAotCQlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiAJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAJCXJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6CkBAIC03MDc1LDggJiM0Mzs3MDc5LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKLQkJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiYjNDM7CQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6CkBAIC03MDg0LDggJiM0Mzs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQotCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKJiM0MzsJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAKIAkJcmV0dXJuIGVycjsKIAlkZWZhdWx0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGlkZW50aWZpZWQ6IGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIC4uLilgIOKAkyB0aGF0IGBsd3Rfc2VnNl9hY3Rpb25gIGNhbGwgcmFpc2VzIG15IGV5ZWJyb3dzIGEgYml0OyBpdCBsaWtlbHkgdG91Y2hlcyBsb3ctbGV2ZWwgSVB2NiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBvciBJUHY2IExpZ2h0d2VpZ2h0IFR1bm5lbGluZy4KCk15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJJiMzOTtsbCByZWFjaCBmb3IgZWl0aGVyIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9mIGBuZXQvY29yZS9maWx0ZXIuY2Agb3IsIHByb2JhYmx5IHF1aWNrZXIgYW5kIG1vcmUgZWZmaWNpZW50IGZvciB0aGlzLCBJIHdpbGwgdXNlIGBncmVwcGVyYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgb3B0aW9ucyB0b28g4oCTIGVzcGVjaWFsbHkgdGhvc2UgdG91Y2hpbmcgSVB2NiwgU0VHNi9TUnY2LCBhbmQsIGltcG9ydGFudGx5LCBCUEYgaGVscGVycy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuCgpUaGVuIEkmIzM5O2xsIGZvY3VzIHRoZSBgZ3JlcHBlcmAgcXVlcmllcy4gSSYjMzk7bGwgZHJpbGwgZG93biBvbiBlaXRoZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIG9yIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGlzIHdpbGwgcXVpY2tseSByZXZlYWwgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHN0YXRlcyBhcmUgaW52b2x2ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGhhbmRsZSBvbiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9sd3Rfc2VnNl9hY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz03MDE3PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAzMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzM6QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MDM0LVx0ICAgdTMyLCBhY3Rpb24sIHZvaWQgKiwgcGFyYW0sIHUzMiwgcGFyYW1fbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwOTctXG5uZXQvY29yZS9maWx0ZXIuYzo3MDk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwOTk6XHQuZnVuY1x0XHQ9IGJwZl9sd3Rfc2VnNl9hY3Rpb24sXG5uZXQvY29yZS9maWx0ZXIuYy03MTAwLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDc9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTMtXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTQ6XHRcdHJldHVybiBcdTAwMjZicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtOTA1NS1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBhbmQgU1J2NiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1J2NikgYXJlIGhhbmRsZWQgd2l0aGluIEJQRi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIEtjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHRoZWlyIGluY2x1c2lvbiBvciBhY3RpdmF0aW9uLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJIHN1c3BlY3QgdGhhdCBzaW5jZSBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIHdpdGhpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC0tSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA3MDAwLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgcGFja2V0IHByb2Nlc3NpbmcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGFzcGVjdHMgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk5MDpcdFx0cHRyID0gc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0O1xuNjk5MTpcdFx0aWYgKHB0ciBcdTAwM2U9IHNyaF90bHZzIFx1MDAyNlx1MDAyNiBwdHIgJiM0MzsgbGVuIFx1MDAzYz0gc3JoX2VuZClcbjY5OTI6XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gZmFsc2U7XG42OTkzOlx0XHRlbHNlIGlmIChwdHIgXHUwMDNjICh2b2lkICopXHUwMDI2c3JoLVx1MDAzZWZsYWdzIHx8XG42OTk0Olx0XHRcdCBwdHIgJiM0MzsgbGVuIFx1MDAzZSAodm9pZCAqKVx1MDAyNnNyaC1cdTAwM2VzZWdtZW50cylcbjY5OTU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG42OTk2Olx0XG42OTk3Olx0XHRpZiAodW5saWtlbHkoYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbikpKVxuNjk5ODpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjY5OTk6XHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuNzAwMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwMDE6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MDAyOlx0XG43MDAzOlx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xuNzAwNDpcdFx0cmV0dXJuIDA7XG43MDA1Olx0fVxuNzAwNjpcdFxuNzAwNzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuNzAwODpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXG43MDA5Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG43MDEwOlx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG43MDExOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNzAxMjpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG43MDEzOlx0XHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjcwMTQ6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG43MDE1Olx0fTtcbjcwMTY6XHRcbjcwMTc6XHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzAxODpcdHtcbjcwMTk6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG43MDIwOlx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjcwMjE6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuNzAyMjpcdFxuNzAyMzpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG43MDI0Olx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG43MDI1Olx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuNzAyNjpcdFx0aWYgKCFzcmgpXG43MDI3Olx0XHRcdHJldHVybjtcbjcwMjg6XHRcbjcwMjk6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuNzAzMDpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjcwMzE6XHR9XG43MDMyOlx0XG43MDMzOlx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG43MDM0Olx0XHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG43MDM1Olx0e1xuNzAzNjpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMzc6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAzODpcdFx0aW50IGhkcm9mZiA9IDA7XG43MDM5Olx0XHRpbnQgZXJyO1xuNzA0MDpcdFxuNzA0MTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmhfc3RhdGUtXHUwMDNlYmhfbG9jayk7XG43MDQyOlx0XHRzd2l0Y2ggKGFjdGlvbikge1xuNzA0MzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcbjcwNDQ6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDQ1Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA0NjpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxuNzA0NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA0ODpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIChzdHJ1Y3QgaW42X2FkZHIgKilwYXJhbSwgMCk7XG43MDQ5Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCBjb25zdHJ1Y3QuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNrIGRvd24gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUsIGl0cyBzY29wZSwgYW5kIGhvdyBpdCYjMzk7cyBhY3R1YWxseSB1c2VkLiBJcyBpdCBhIGdsb2JhbCB2YXJpYWJsZT8gQSBzdHJ1Y3Q/IEEgbWFjcm8/IEkgaGF2ZSB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyB0aGluZy4KCkJleW9uZCBqdXN0IHRoZSBkZWZpbml0aW9uLCBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgYW55IGAjaWZkZWZgIHN0YXRlbWVudHMgdGhhdCBtaWdodCBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhpcyB2YXJpYWJsZSBiYXNlZCBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvciBrZXJuZWwgZmVhdHVyZXMuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBhY3RpdmUuIERpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGVuYWJsZWQgY2FuIGhhdmUgYSBodWdlIGltcGFjdCBvbiB0aGlzIHNvcnQgb2YgY29kZS4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGlzIGNyaXRpY2FsIHRvIGFjdHVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njk3ND1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTc3LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5Nzg6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzktXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTktXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzAyMDpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzAyMS1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNi1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDM3Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDM4LVx0aW50IGhkcm9mZiA9IDA7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzEwOD1CUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTEtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzExMjpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzExMy1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM1Nj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzg2OkRFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODctXHQuYmhfbG9ja1x0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTItXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzOTM6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk0LVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQzMy1cdCAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MzQ6XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MzU6XHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQzNi1cdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTctXHRcdGdvdG8gZHJvcDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4Olx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTktXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjUtZHJvcDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY2Olx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjctXHRrZnJlZV9za2Ioc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjUzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHNlZzZfbG9jYWwuY2AgbW9kdWxlIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIGBJUFY2X1NFRzZfTFdUVU5ORUxgIG9yIGBJUFY2X1NFRzZfQlBGYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGVuLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGUuIExldCYjMzk7cyBzZWUuLi5JJiMzOTtsbCBzZWFyY2ggZm9yIGBzZWc2X2xvY2FsLm9gIHdpdGhpbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIHNob3cgbWUgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJiMzOTttIHN1cmUgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkmIzM5O2QgbGlrZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuLS1cbm5ldC9pcHY2L3NlZzYuYz01MDg9aW50IF9faW5pdCBzZWc2X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtNTIzLVxubmV0L2lwdjYvc2VnNi5jOjUyNDpcdGVyciA9IHNlZzZfbG9jYWxfaW5pdCgpO1xubmV0L2lwdjYvc2VnNi5jLTUyNS1cdGlmIChlcnIpXG4tLVxubmV0L2lwdjYvc2VnNi5jPTU0MT12b2lkIHNlZzZfZXhpdCh2b2lkKVxubmV0L2lwdjYvc2VnNi5jLTU0Mi17XG5uZXQvaXB2Ni9zZWc2LmM6NTQzOlx0c2VnNl9sb2NhbF9leGl0KCk7XG5uZXQvaXB2Ni9zZWc2LmMtNTQ0LVx0c2VnNl9pcHR1bm5lbF9leGl0KCk7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZzZfbG9jYWwuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTMwLSNlbmRpZlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjMxOiNpbmNsdWRlIFx1MDAzY25ldC9zZWc2X2xvY2FsLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTM3LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjM4OnN0cnVjdCBzZWc2X2xvY2FsX2x3dDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MC0vKiBjYWxsYmFja3MgdXNlZCBmb3IgY3VzdG9taXppbmcgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBhIGJlaGF2aW9yICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDE6c3RydWN0IHNlZzZfbG9jYWxfbHd0dW5uZWxfb3BzIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MjpcdGludCAoKmJ1aWxkX3N0YXRlKShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00My1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjQ0Olx0dm9pZCAoKmRlc3Ryb3lfc3RhdGUpKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDUtfTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDc9c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02NC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo2NTpcdGludCAoKmlucHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY2LVx0aW50IHN0YXRpY19oZWFkcm9vbTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo2ODpcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyBzbHd0X29wcztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02OS19O1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDI9c3RydWN0IHNlZzZfZW5kX2R0X2luZm8ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU4OnN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OS1cdHU2NF9zdGF0c190IHBhY2tldHM7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2OS0gKiB2YWx1ZXMgYWZ0ZXIgdGhlIHBlci1DUFUgY291bnRlciBldmFsdWF0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZC5cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzA6ICogRmluYWxseSwgZWFjaCBjb3VudGVyIHZhbHVlIChpbiBzZWc2X2xvY2FsX2NvdW50ZXJzKSBpcyBzdG9yZWQgaW4gdGhlXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcxLSAqIGNvcnJlc3BvbmRpbmcgbmV0bGluayBhdHRyaWJ1dGUgYW5kIHNlbnQgdG8gdXNlciBzcGFjZS5cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc0LSAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3NTpzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc2LVx0X191NjQgcGFja2V0cztcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgwLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTojZGVmaW5lIHNlZzZfbG9jYWxfYWxsb2NfcGNwdV9jb3VudGVycyhfX2dmcClcdFx0XHRcdFxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTgyOlx0X19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzLFx0XFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODMtXHRcdFx0XHQgICgoX19nZnApIHwgX19HRlBfWkVSTykpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Ni1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODc6c3RydWN0IHNlZzZfbG9jYWxfbHd0IHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODgtXHRpbnQgYWN0aW9uO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAxOlx0c3RydWN0IHBjcHVfc2VnNl9sb2NhbF9jb3VudGVycyBfX3BlcmNwdSAqcGNwdV9jb3VudGVycztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDItXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxMC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTE6c3RhdGljIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2VnNl9sb2NhbF9sd3R1bm5lbChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTIte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIxMzpcdHJldHVybiAoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICopbHd0LVx1MDAzZWRhdGE7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE0LX1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MzgxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozODI6XHRcdFx0XHQgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzgzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9Mzg5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzkwOlx0XHRcdFx0IHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOTEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MDYtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDA3OnN0YXRpYyBpbnQgZW5kX25leHRfY3NpZF9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MDgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz00MjE9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX3hfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDIyOlx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDIzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDI5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF94X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MzA6XHRcdFx0XHQgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDMxLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDQ3PXN0YXRpYyBpbnQgZW5kX3hfbmV4dF9jc2lkX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0NDg6XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDQ5LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDczPXN0YXRpYyBpbnQgc2VnNl9mbHZfc3VwcF9vcHNfYnlfYWN0aW9uKGludCBhY3Rpb24sIF9fdTMyICpmb3BzKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00OTMtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDk0OmVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00OTUtXHQvKiB0aGUgb3JkZXIgcmVhbGx5IG1hdHRlcnMhICovXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MDU6c3RhdGljIGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUxOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MTk6ZW51bSBzZWc2X2xvY2FsX2Zsdl9hY3Rpb24ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUyMC1cdFNFRzZfTE9DQUxfRkxWX0FDVF9VTlNQRUNcdD0gMCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NTkxPXN0YXRpYyBjb25zdCB1OCBmbHY4OTg2X2FjdF90YmxbRkxWODk4Nl9BQ1RfVEJMX1NJWkVdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTAtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NjExOnN0YXRpYyBlbnVtIHNlZzZfbG9jYWxfZmx2X2FjdGlvblxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjYxMjpzZWc2X2xvY2FsX2Zsdjg5ODZfYWN0X2xvb2t1cChlbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyBwaW5mbywgX191MzIgZmx2bWFzaylcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz02Mjg9c3RhdGljIGJvb2wgc2VnNl9wb3Bfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBzcmhvZmYpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc0MS0gKi9cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NDI6c3RhdGljIGludCBlbmRfZmx2ODk4Nl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDMte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc0NC1cdGNvbnN0IHN0cnVjdCBzZWc2X2ZsYXZvcnNfaW5mbyAqZmluZm8gPSBcdTAwMjZzbHd0LVx1MDAzZWZsdl9pbmZvO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc0NTpcdGVudW0gc2VnNl9sb2NhbF9mbHZfYWN0aW9uIGFjdGlvbjtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NDY6XHRlbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyBwaW5mbztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDctXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzY2LVx0ICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzY3Olx0YWN0aW9uID0gc2VnNl9sb2NhbF9mbHY4OTg2X2FjdF9sb29rdXAocGluZm8sIGZsdm1hc2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc2OC1cdHN3aXRjaCAoYWN0aW9uKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc5NS0vKiByZWd1bGFyIGVuZHBvaW50IGZ1bmN0aW9uICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Nzk2OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzk3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODE2LS8qIHJlZ3VsYXIgZW5kcG9pbnQsIGFuZCBmb3J3YXJkIHRvIHNwZWNpZmllZCBuZXh0aG9wICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODE3OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF94KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MTgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MjgtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODI5OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF90KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MzAte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz04NDk9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjg1MDpcdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04NTEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MDU9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4Nl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkwOS1cdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyID0gTlVMTDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5MTA6XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTExLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjkxMjpcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05MTMtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkyOT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTMwOlx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkzMS17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk1Nj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYwLVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MTpcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjItXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTY0LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2NTpcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjYtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4Mj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTgzOlx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk4NC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEwMDc9c3RhdGljIHN0cnVjdCBuZXQgKmZpYjZfY29uZmlnX2dldF9uZXQoY29uc3Qgc3RydWN0IGZpYjZfY29uZmlnICpmaWI2X2NmZylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAxMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMDE0OnN0YXRpYyBpbnQgX19zZWc2X2VuZF9kdF92cmZfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAxNS1cdFx0XHRcdCAgIHUxNiBmYW1pbHksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTEzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVuZF9kdF92cmZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExMzI6XHRcdFx0XHQgICAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCB1MTYgZmFtaWx5KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExMzMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTc3PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTc4Olx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExNzkte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjA5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMTA6c3RhdGljIGludCBzZWc2X2VuZF9kdDRfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTIxMS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyMTY9c3RhdGljIGVudW1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjE3OnNlZzZfZW5kX2R0X21vZGUgc2VnNl9lbmRfZHQ2X3BhcnNlX21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMTgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjMxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMzI6c3RhdGljIGVudW0gc2VnNl9lbmRfZHRfbW9kZSBzZWc2X2VuZF9kdDZfZ2V0X21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMzMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjM4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMzk6c3RhdGljIGludCBzZWc2X2VuZF9kdDZfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI0MC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyNTg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyNTk6XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2MC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDAtI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzMDE6c3RhdGljIGludCBzZWc2X2VuZF9kdDQ2X2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDItXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTMwNz1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzMDg6XHRcdFx0XHQgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDkte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzMwLS8qIHB1c2ggYW4gU1JIIG9uIHRvcCBvZiB0aGUgY3VycmVudCBvbmUgKi9cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzMxOnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTMzMi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzNTY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM1NzpcdFx0XHRcdCAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzNTgte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDE1Olx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTYte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNTcxPXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyAqX19nZXRfYWN0aW9uX2Rlc2MoaW50IGFjdGlvbilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg2OnN0YXRpYyBib29sIHNlZzZfbHd0dW5uZWxfY291bnRlcnNfZW5hYmxlZChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ny17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU5MTpzdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5Mi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgZXJyKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTMte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1OTQ6XHRzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzICpwY291bnRlcnM7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5NS1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYwOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjA5OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTAtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxMy1cdHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpkZXNjO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTQ6XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxNS1cdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTg6XHRzbHd0ID0gc2VnNl9sb2NhbF9sd3R1bm5lbChvcmlnX2RzdC1cdTAwM2Vsd3RzdGF0ZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxOS1cdGRlc2MgPSBzbHd0LVx1MDAzZWRlc2M7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYyNjpcdHNlZzZfbG9jYWxfdXBkYXRlX2NvdW50ZXJzKHNsd3QsIGxlbiwgcmMpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MjctXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MzAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzMTpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMyLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0MC1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDE6XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjQzOlx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDQtfVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9wb2xpY3lbU0VHNl9MT0NBTF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cdFtTRUc2X0xPQ0FMX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY1OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjYwOnN0YXRpYyBpbnQgcGFyc2VfbmxhX3NyaChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjYxLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2ODQtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY4NTpzdGF0aWMgaW50IHB1dF9ubGFfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjg2LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcwMi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzAzOnN0YXRpYyBpbnQgY21wX25sYV9zcmgoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcwNC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MTItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTcxMzpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJfc3JoKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE0LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcxNy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzE4OnN0YXRpYyBpbnQgcGFyc2VfbmxhX3RhYmxlKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MTktXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzI1LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3MjY6c3RhdGljIGludCBwdXRfbmxhX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzI3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTczMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzM0OnN0YXRpYyBpbnQgY21wX25sYV90YWJsZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzM1LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTc0Mj1zdGF0aWMgc3RydWN0XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc0MzpzZWc2X2VuZF9kdF9pbmZvICpzZWc2X3Bvc3NpYmxlX2VuZF9kdF9pbmZvKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzQ0LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTc1Mj1zdGF0aWMgaW50IHBhcnNlX25sYV92cmZ0YWJsZShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc1MzpcdFx0XHQgICAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc1NC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3NjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc2NjpzdGF0aWMgaW50IHB1dF9ubGFfdnJmdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3Njcte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzc4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3Nzk6c3RhdGljIGludCBjbXBfbmxhX3ZyZnRhYmxlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3ODAte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzg5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3OTA6c3RhdGljIGludCBwYXJzZV9ubGFfbmg0KHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3OTEtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc5OC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzk5OnN0YXRpYyBpbnQgcHV0X25sYV9uaDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MDAte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODExLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTI6c3RhdGljIGludCBjbXBfbmxhX25oNChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODEzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgxNi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODE3OnN0YXRpYyBpbnQgcGFyc2VfbmxhX25oNihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODE4LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTgyNjpzdGF0aWMgaW50IHB1dF9ubGFfbmg2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODI3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgzOC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODM5OnN0YXRpYyBpbnQgY21wX25sYV9uaDYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg0MC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NDMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg0NDpzdGF0aWMgaW50IHBhcnNlX25sYV9paWYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg0NS1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODUxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4NTI6c3RhdGljIGludCBwdXRfbmxhX2lpZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1My17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NTktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg2MDpzdGF0aWMgaW50IGNtcF9ubGFfaWlmKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NjEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODY3LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4Njg6c3RhdGljIGludCBwYXJzZV9ubGFfb2lmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NjktXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg3NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODc2OnN0YXRpYyBpbnQgcHV0X25sYV9vaWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Nzcte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODgzLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4ODQ6c3RhdGljIGludCBjbXBfbmxhX29pZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODg1LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnBmX3Byb2dfcG9saWN5W1NFRzZfTE9DQUxfQlBGX1BST0dfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODk4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4OTk6c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MDAtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzMC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTMxOnN0YXRpYyBpbnQgcHV0X25sYV9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzIte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTUxLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5NTI6c3RhdGljIGludCBjbXBfbmxhX2JwZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTUzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk2Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTYzOnN0YXRpYyB2b2lkIGRlc3Ryb3lfYXR0cl9icGYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjQte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xOTcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Rcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTcxOm5sYV9wb2xpY3kgc2VnNl9sb2NhbF9jb3VudGVyc19wb2xpY3lbU0VHNl9MT0NBTF9DTlRfTUFYICYjNDM7IDFdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NzItXHRbU0VHNl9MT0NBTF9DTlRfUEFDS0VUU11cdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTk3Nz1zdGF0aWMgaW50IHBhcnNlX25sYV9jb3VudGVycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk3ODpcdFx0XHQgICAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk3OS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk4MC17XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk4MTpcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgX19wZXJjcHUgKnBjb3VudGVycztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTgyLVx0c3RydWN0IG5sYXR0ciAqdGJbU0VHNl9MT0NBTF9DTlRfTUFYICYjNDM7IDFdO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTg2LVx0XHRcdFx0XHQgIGF0dHJzW1NFRzZfTE9DQUxfQ09VTlRFUlNdLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5ODc6XHRcdFx0XHRcdCAgc2VnNl9sb2NhbF9jb3VudGVyc19wb2xpY3ksIE5VTEwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5ODgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTk4LVx0LyogY291bnRlcnMgYXJlIGFsd2F5cyB6ZXJvIGluaXRpYWxpemVkICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk5OTpcdHBjb3VudGVycyA9IHNlZzZfbG9jYWxfYWxsb2NfcGNwdV9jb3VudGVycyhHRlBfS0VSTkVMKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDAwLVx0aWYgKCFwY291bnRlcnMpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMDctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAwODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfZmlsbF9ubGFfY291bnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDA5Olx0XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyAqY291bnRlcnMpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAxMC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAyNjpzdGF0aWMgaW50IHB1dF9ubGFfY291bnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwMjg6XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyBjb3VudGVycyA9IHsgMCwgMCwgMCB9O1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjktXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDM2LVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDM3Olx0XHRzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzICpwY291bnRlcnM7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAzOC1cdFx0dTY0IHBhY2tldHMsIGJ5dGVzLCBlcnJvcnM7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNTUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA1NjpcdHJjID0gc2VnNl9sb2NhbF9maWxsX25sYV9jb3VudGVycyhza2IsIFx1MDAyNmNvdW50ZXJzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDU3LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNjQtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA2NTpzdGF0aWMgaW50IGNtcF9ubGFfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA2Ni17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNzEtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA3MjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNzMte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMDc3PXN0YXRpYyBjb25zdFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwNzg6c3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9mbGF2b3JzX3BvbGljeVtTRUc2X0xPQ0FMX0ZMVl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA3OS1cdFtTRUc2X0xPQ0FMX0ZMVl9PUEVSQVRJT05dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxMTA9c3RhdGljIGludCBzZWc2X3BhcnNlX25sYV9uZXh0X2NzaWRfY2ZnKHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjEzNi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTM3OnN0YXRpYyBpbnQgcGFyc2VfbmxhX2ZsYXZvcnMoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjEzOC1cdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE0Ny1cdFx0XHRcdFx0IGF0dHJzW1NFRzZfTE9DQUxfRkxBVk9SU10sXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjE0ODpcdFx0XHRcdFx0IHNlZzZfbG9jYWxfZmxhdm9yc19wb2xpY3ksIE5VTEwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxNDktXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxODA9c3RhdGljIGludCBzZWc2X2ZpbGxfbmxhX25leHRfY3NpZF9jZmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE5Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTkzOnN0YXRpYyBpbnQgcHV0X25sYV9mbGF2b3JzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTk0LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjIyMj1zdGF0aWMgaW50IHNlZzZfY21wX25sYV9uZXh0X2NzaWRfY2ZnKHN0cnVjdCBzZWc2X2ZsYXZvcnNfaW5mbyAqZmluZm9fYSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIzMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjM0OnN0YXRpYyBpbnQgY21wX25sYV9mbGF2b3JzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMzUte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjQ5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNTA6c3RhdGljIGludCBlbmNhcF9zaXplX2ZsYXZvcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNTEte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMjY1PXN0cnVjdCBzZWc2X2FjdGlvbl9wYXJhbSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI2NjpcdGludCAoKnBhcnNlKShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjY3LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI2ODpcdGludCAoKnB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjY5Olx0aW50ICgqY21wKShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYik7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI3MC1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI3NC1cdCAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNzU6XHR2b2lkICgqZGVzdHJveSkoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjc2LX07XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMjc9c3RhdGljIHZvaWQgX19kZXN0cm95X2F0dHJzKHVuc2lnbmVkIGxvbmcgcGFyc2VkX2F0dHJzLCBpbnQgbWF4X3BhcnNlZCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMzI4Olx0XHRcdCAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMyOS17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIzNTUtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM1NjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzU3LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjM2Mz1zdGF0aWMgaW50IHBhcnNlX25sYV9vcHRpb25hbF9hdHRycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM2NDpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM2NS1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MDU9c3RhdGljIGludFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MDY6c2VnNl9sb2NhbF9sd3R1bm5lbF9idWlsZF9zdGF0ZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDA3LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDA5LVx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2MgPSBzbHd0LVx1MDAzZWRlc2M7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQxMDpcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyAqb3BzO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MTEtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjEtICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQyMjpzdGF0aWMgdm9pZCBzZWc2X2xvY2FsX2x3dHVubmVsX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjMte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjQtXHRzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyAqZGVzYyA9IHNsd3QtXHUwMDNlZGVzYztcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDI1Olx0c3RydWN0IHNlZzZfbG9jYWxfbHd0dW5uZWxfb3BzICpvcHM7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyNi1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQzMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDM0OnN0YXRpYyBpbnQgcGFyc2VfbmxhX2FjdGlvbihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDM1LVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYsIHNwZWNpZmljYWxseSB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsIChgSVBWNl9TRUc2X0xXVFVOTkVMYCkgYW5kIHRoZSBCUEYgaW50ZWdyYXRpb24gKGBJUFY2X1NFRzZfQlBGYCkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudHMgdGhlcmUsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBkZWZhdWx0IHZhbHVlcy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB3aGF0JiMzOTtzIGNvbnRyb2xsYWJsZSBhdCBjb21waWxlIHRpbWUgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzIHdpbGwgbGV0IG1lIHBsYW4gYW5kIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9TRUc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZToKCioqSVB2NiBDb25maWd1cmF0aW9uIC0gRGl2aW5nIEluKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIElQdjYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAyODAgdG8gMzIwIGluIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGZlYXR1cmVzIHJlbGF0ZWQgdG8gSVB2NiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgdGhlIGVuYWJsaW5nIGZsYWdzIGZvciBjcml0aWNhbCBmdW5jdGlvbmFsaXRpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmUgb2YgaG93IGRpZmZlcmVudCBvcHRpb25zIGFyZSBuZXN0ZWQgb3IgZGVwZW5kZW50LCBwcm9iYWJseSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGltcG9ydGFudCBmZWF0dXJlcyBmb3IgaW5jbHVzaW9uIGluIGEga2VybmVsIGJ1aWxkLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcbiAyODY6XHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG4gMjg3Olx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMjg4Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyODk6XHRcdHNlbGVjdCBMV1RVTk5FTFxuIDI5MDpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDI5MTpcdFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXG4gMjkyOlx0XHRoZWxwXG4gMjkzOlx0XHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxuIDI5NDpcdFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAyOTU6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXG4gMjk2Olx0XHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxuIDI5NzpcdFxuIDI5ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI5OTpcdFxuIDMwMDpcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xuIDMwMTpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4gMzAyOlx0XHRkZXBlbmRzIG9uIElQVjZcbiAzMDM6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAzMDQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDMwNTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAzMDY6XHRcdGhlbHBcbiAzMDc6XHRcdCAgU3VwcG9ydCBmb3IgSE1BQyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uXG4gMzA4Olx0XHQgIG9mIFNSLWVuYWJsZWQgcGFja2V0cy5cbiAzMDk6XHRcbiAzMTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAzMTE6XHRcbiAzMTI6XHRjb25maWcgSVBWNl9TRUc2X0JQRlxuIDMxMzpcdFx0ZGVmX2Jvb2wgeVxuIDMxNDpcdFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcbiAzMTU6XHRcdGRlcGVuZHMgb24gSVBWNiA9IHlcbiAzMTY6XHRcbiAzMTc6XHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbiAzMTg6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4gMzE5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIEJQRioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoaXMgc3ltYm9sIGlzIHVzZWQgZGlyZWN0bHksIG9yIGluZGlyZWN0bHkgdmlhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2Nrcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpdCBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIFNFRzYgQlBGLXJlbGF0ZWQgY29kZSwgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW5jbHVkZSBmaWxlcyBhcyB3ZWxsLiBPbmNlIEkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhbmQgY29kZSBibG9ja3MsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvbnRleHQuIFdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzIGNvbmZpZz8gSG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIFNFRzYgZnJhbWV3b3JrPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBCUEYgcHJvZ3JhbXMsIG9yIGhvb2tpbmcgaW50byBzcGVjaWZpYyBpbmZyYXN0cnVjdHVyZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHRoZSByZXN1bHRpbmcgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfU0VHNl9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njg2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzgtXG5uZXQvY29yZS9maWx0ZXIuYzo2ODc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjg4MC1zdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTExLX1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTI6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG5uZXQvY29yZS9maWx0ZXIuYy02OTEzLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjI9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTI1LVx0c3dpdGNoICh0eXBlKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2OTI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNy1cdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTcyLVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzQtQlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjYtfTtcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNjc6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG5uZXQvY29yZS9maWx0ZXIuYy03MTY4LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDc9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDktXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy05MDUxLVx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcbi0tXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzg4LVx0XHQvKiBCUEZfUFJPR19UWVBFX0xXVF9TRUc2X0xPQ0FMIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYzozODk6XHRcdHsgXCYjMzQ7Q09ORklHX0lQVjZfU0VHNl9CUEZcJiMzNDssIH0sXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzkwLVx0XHQvKiBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIgYW5kIHJlbGF0ZWQgaGVscGVycyAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9NDg9Q09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo0OTpDT05GSUdfSVBWNl9TRUc2X0JQRj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTUwLUNPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUw9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ5NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgRmlsdGVyaW5nIExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIHBhY2tldCBmaWx0ZXJpbmcgYmVoYXZpb3IuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYW1pc3MgaW4gdGhlIGNvcmUgZmlsdGVyaW5nIGltcGxlbWVudGF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBsb2dpYyBpcyBsaWtlbHkgbmVzdGxlZCBzb21ld2hlcmUgYmV0d2VlbiBsaW5lcyA3MDE1IGFuZCA3MDkwLiBUaGF0IHJhbmdlIHVzdWFsbHkgZW5jb21wYXNzZXMgc29tZSBjcml0aWNhbCBmdW5jdGlvbiBjYWxscyBvciBjb25kaXRpb25hbCBzdHJ1Y3R1cmVzLCBnaXZlbiBteSBwYXN0IGV4cGVyaWVuY2UuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gdGhhdCBzZWN0aW9uIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMTU6XHR9O1xuNzAxNjpcdFxuNzAxNzpcdHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG43MDE4Olx0e1xuNzAxOTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMjA6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAyMTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG43MDIyOlx0XG43MDIzOlx0XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbjcwMjQ6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwMjU6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG43MDI2Olx0XHRpZiAoIXNyaClcbjcwMjc6XHRcdFx0cmV0dXJuO1xuNzAyODpcdFxuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG43MDMwOlx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuNzAzMTpcdH1cbjcwMzI6XHRcbjcwMzM6XHRCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbjcwMzQ6XHRcdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcbjcwMzU6XHR7XG43MDM2Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuNzAzNzpcdFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG43MDgxOlx0XHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG43MDgyOlx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDgzOlx0XG43MDg0Olx0XHRcdHJldHVybiBlcnI7XG43MDg1Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODY6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA4ODpcdFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuNzA4OTpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA5MDpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5MTpcdFxuNzA5MjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5MzpcdFx0ZGVmYXVsdDpcbjcwOTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgZnVuY3Rpb24sIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSBhIEJQRiBoZWxwZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYSBgQlBGX0NBTExfNGAgaGVscGVyIHRpZWQgdG8gdGhlIGBCUEZfRlVOQ19sd3Rfc2VnNl9hY3Rpb25gIEJQRiBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyBob3cgdGhpcyB0aGluZyAqZ2V0cyogaW52b2tlZC4gRnJvbSB3aGF0IEkgcmVjYWxsLCBpdCYjMzk7cyBlaXRoZXIgdHJpZ2dlcmVkIHdoZW4gYW4gbHd0dW5uZWwgU0VHNiBsb2NhbCBCUEYgcHJvZ3JhbSBpcyBydW5uaW5nIOKAkyBzbyB0aGF0JiMzOTtzIGEgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgcHJvZ3JhbSBpbiBhY3Rpb24g4oCTIG9yLCBwb3RlbnRpYWxseSwgZHVyaW5nIEJQRiB0ZXN0IHJ1bnMgb3IgdGhlIHJlZ3VsYXIgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBzZWc2X2xvY2FsLmNgIGZpbGU7IHRoZSBjb2RlIGFyb3VuZCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIHdpbGwgcHJvYmFibHkgcHJvdmlkZSB0aGUgYW5zd2VycyBJJiMzOTttIGxvb2tpbmcgZm9yIGFuZCBjbGFyaWZ5IHRoZSBpbnZvY2F0aW9uIHBhdGguIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZGVidWdnaW5nIHRoZSBzcGVjaWZpYyBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQxNDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQxNS1cdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3MT1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2NS1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTY2Olx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2JwZixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY3LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDoKCioqRGl2aW5nIGludG8gYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIHVucGFjayB0aGUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgQlBGIGhvb2ssIHByZXN1bWFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYgKFNSdjYpIGFuZCBsb2NhbCBTSUQgcHJvY2Vzc2luZywgZ2l2ZW4gdGhlIGZpbGUgcGF0aC4gTXkgaW5pdGlhbCBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIHdpdGhpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdyDigJMgaXMgaXQgYXQgdGhlIGluZ3Jlc3MsIGVncmVzcywgb3Igc29tZXdoZXJlIGluIHRoZSBtaWRkbGU/IFdoYXQgYXJlIGl0cyBpbnB1dHMg4oCTIGxpa2VseSB0aGUgc2tiLCBhbmQgc29tZSBjb250ZXh0IHN0cnVjdHVyZXMgbGlrZSB0aGUgZmxvdywgZGV2aWNlLCBhbmQgcG9zc2libHkgdGhlIFNSSD8gV2hhdCYjMzk7cyB0aGUgKmFjdGlvbiogaXQmIzM5O3MgdGFraW5nIGF0IHRoZSAmIzM0O2VuZCYjMzQ7PyBJcyBpdCByZWxhdGVkIHRvIHBvbGljeSBlbmZvcmNlbWVudCwgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgb3IgbWF5YmUgc29tZSBmb3JtIG9mIHJlc291cmNlIGFjY291bnRpbmc/IEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBmaW5hbCBhY3Rpb25zIG9mIHRoZSBTUnY2IHByb2Nlc3NpbmcuIEtub3dpbmcgQlBGLCB0aGUgcG9zc2liaWxpdGllcyBhcmUgdmFzdDogaXQgY291bGQgYmUgcmVkaXJlY3RpbmcsIGRyb3BwaW5nLCBvciBtYW5pcHVsYXRpbmcgcGFja2V0IGhlYWRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIGhlbHBlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGFwYXRoLiBUaW1lIHRvIHN0YXJ0IHJlYWRpbmcgdGhlIGNvZGUhIExldCYjMzk7cyBzZWUgaWYgdGhpcyBob29rIGlzIGludm9sdmVkIGluIHRoZSBlZ3Jlc3Mgb3IgaW5ncmVzcyBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTA6XHRcbjE0MTE6XHRcdHJldHVybiB0cnVlO1xuMTQxMjpcdH1cbjE0MTM6XHRcbjE0MTQ6XHRzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXG4xNDE1Olx0XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4xNDE2Olx0e1xuMTQxNzpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xuMTQxODpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4xNDE5Olx0XHRpbnQgcmV0O1xuMTQyMDpcdFxuMTQyMTpcdFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcbjE0MjI6XHRcdGlmICghc3JoKSB7XG4xNDIzOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTQyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcdGFkdmFuY2VfbmV4dHNlZyhzcmgsIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpO1xuMTQyNzpcdFxuMTQyODpcdFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXG4xNDI5Olx0XHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcbjE0MzA6XHRcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXG4xNDMxOlx0XHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXG4xNDMyOlx0XHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxuMTQzMzpcdFx0ICovXG4xNDM0Olx0XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQzNTpcdFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuMTQzNjpcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbjE0Mzc6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuMTQzODpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjE0Mzk6XHRcbjE0NDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE0NDE6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjE0NDI6XHRcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXHUwMDNlYnBmLnByb2csIHNrYik7XG4xNDQzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0NDQ6XHRcbjE0NDU6XHRcdHN3aXRjaCAocmV0KSB7XG4xNDQ2Olx0XHRjYXNlIEJQRl9PSzpcbjE0NDc6XHRcdGNhc2UgQlBGX1JFRElSRUNUOlxuMTQ0ODpcdFx0XHRicmVhaztcbjE0NDk6XHRcdGNhc2UgQlBGX0RST1A6XG4xNDUwOlx0XHRcdGdvdG8gZHJvcDtcbjE0NTE6XHRcdGRlZmF1bHQ6XG4xNDUyOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDticGYtc2VnNmxvY2FsOiBJbGxlZ2FsIHJldHVybiB2YWx1ZSAldVxcblwmIzM0OywgcmV0KTtcbjE0NTM6XHRcdFx0Z290byBkcm9wO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4xNDU3Olx0XHRcdGdvdG8gZHJvcDtcbjE0NTg6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0NTk6XHRcbjE0NjA6XHRcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxuMTQ2MTpcdFx0XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XG4xNDYyOlx0XG4xNDYzOlx0XHRyZXR1cm4gZHN0X2lucHV0KHNrYik7XG4xNDY0Olx0XG4xNDY1Olx0ZHJvcDpcbjE0NjY6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0Njc6XHRcdGtmcmVlX3NrYihza2IpO1xuMTQ2ODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA5OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBQcm9ncmFtIFRlc3RpbmcgQ2FwYWJpbGl0aWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd2UgY2FuIHRlc3QgdGhlc2UgQlBGIHByb2dyYW1zLiBJIGtub3cgdGhhdCBgYnBmX3Byb2dfdGVzdF9ydW5gIGlzIGEgdmFsdWFibGUgdG9vbCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBmdWxsIHNjb3BlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGJwZl9wcm9nX3Rlc3RfcnVuYCBjYW4gaGFuZGxlIEJQRiBwcm9ncmFtcyBvZiB0aGUgYExXVF9TRUc2TE9DQUxgIHR5cGUuIElmIGl0IGNhbiwgdGhhdCYjMzk7cyBmYW50YXN0aWMsIGFuZCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFuIGFsdGVybmF0aXZlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBwb3NzaWJsZSBJIG1heSBuZWVkIHRvIGxvb2sgYXQgZnVuY3Rpb25zIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrYmAgdG8gZXhwbG9yZSB3aGF0IGtpbmQgb2YgYWx0ZXJuYXRpdmUgZXhpc3RzLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXN0aW5nIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzUtJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q6MTM2OnwgYGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgYCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgbHd0X3NlZzZsb2NhbGBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzctJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0yNT1CUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyNzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkwNTY9c3RhdGljIGludCBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2soZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkwOTEtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjkwOTI6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvYnRmLmMtOTA5My1cdFx0cmV0dXJuIEJURl9LRlVOQ19IT09LX0xXVDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODQzPXN0YXRpYyBib29sIGlzX25ldF9hZG1pbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg1MjpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1My1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ3ODk9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19kaXJlY3RfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDc5OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfT1VUOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ3OTk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODAwLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg3Nz1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyODg4LVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODk6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODkwLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTg5OT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MjAtXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTIxOlx0cCA9IGJwZl9wcm9nX2dldF90eXBlKGZkLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MjItXHRpZiAoSVNfRVJSKHApKSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0yMDI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9nX3R5cGVfbmFtZVtdID0ge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVx0W0JQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUl1cdD0gXCYjMzQ7Y2dyb3VwX3NvY2tfYWRkclwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjIyOlx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cdFx0PSBcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjMtXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVx0XHQ9IFwmIzM0O2xpcmNfbW9kZTJcJiMzNDssXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03MTU3PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3MC1cdHsgQlBGX1BST0dfVFlQRV9MV1RfT1VULCAgICAgICAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjcxNzE6XHR7IEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcyLVx0eyBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAgICAgICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0xMDM9c3RhdGljIGludCBwcm9iZV9wcm9nX2xvYWQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xNzgtXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzoxNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTE4MC1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjI1PXZvaWQgdGVzdF92ZXJpZl9zY2FsZV9zZWc2X2xvb3AoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjIyNzpcdHNjYWxlX3Rlc3QoXCYjMzQ7dGVzdF9zZWc2X2xvb3AuYnBmLm9cJiMzNDssIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVx0e1wmIzM0O2x3dF94bWl0XCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlx0e1wmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1NzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU1J2NiBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgcGFydGljdWxhcmx5IGhvdyB0aGV5IGFmZmVjdCBTUnY2IEJQRiBoZWxwZXJzLiBJIHNlZSB0d28gbWFpbiBhcmVhcyBvZiBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuCgpGaXJzdCwgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBmaW5kaW5nIHRoZSBTUkggaGVhZGVyIGJ5IHNlYXJjaGluZyB0aGUgc2tiIGRhdGEgYXQgYW4gb2Zmc2V0LCBhbmQgdGhlbiBkZXRlcm1pbmluZyB2YWxpZGl0eS4gVGhlIHVwZGF0ZWQgY29kZSwgaG93ZXZlciwgbm93IHVzZXMgdGhlIGBzZWc2X2dldF9zcmhgIGhlbHBlciBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIFNSSC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlOyB1c2luZyBhIGRlZGljYXRlZCBoZWxwZXIgc3VnZ2VzdHMgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgZm9yIHZhbGlkYXRpb24uIFRoZSBjb2RlIGFsc28gY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgYWZ0ZXIgYHNlZzZfZ2V0X3NyaGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXNlIGRhdGEgcG9pbnRlciB1cGRhdGVzIHdpbGwgZGVmaW5pdGVseSBhZmZlY3QgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGFiaWxpdHkgdG8gb3BlcmF0ZSBvbiB0aGUgcGFja2V0cyBhZnRlciB0aGlzIFNSSCBwcm9jZXNzaW5nLgoKU2Vjb25kLCB0aGUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHRoZSBCUEYgbG9naWMgZm9yIFNSdjYgYWN0aW9ucywgcGFydGljdWxhcmx5IGluIGNhc2VzIGxpa2UgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgLCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCwgYW5kIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVBgLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgYXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIGhlcmU6IHRoZSBvcmlnaW5hbCBjb2RlIGp1c3QgcHVsbGVkIHRoZSBJUHY2IGhlYWRlciwgd2hlcmVhcyB0aGUgdXBkYXRlZCBjb2RlIGluY2x1ZGVzIGEgY2hlY2sgdXNpbmcgYHBza2JfbWF5X3B1bGxgIHRoYXQgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBJUHY2IGhlYWRlciBiZWZvcmUgcHVsbGluZyB0aGUgZGF0YS4gVGhpcyBoZWxwcyBwcmV2ZW50IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJ1bnMgb3Igb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlcmUgaXMgYWxzbyBhIGNoYW5nZSB0byBjYWxsIGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBmYWlsdXJlIG9jY3VycmVkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLgoKRnJvbSBhIGZ1bmN0aW9uYWxpdHkgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGJ1ZyBmaXgsIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgU1J2NiBCUEYgaW1wbGVtZW50YXRpb24uIEl0IGFkZHJlc3NlcyBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgYW5kIGVuc3VyZXMgc3RhdGUgY29uc2lzdGVuY3kuIEkmIzM5O20gdGhpbmtpbmcgb2YgYnVmZmVyIG92ZXJydW4gY2hlY2tzLCBhbmQgcHJvcGVyIGRhdGEgcG9pbnRlciBjb21wdXRhdGlvbi4gT3ZlcmFsbCwgaXQgYXBwZWFycyB0byBpbXByb3ZlIHJlbGlhYmlsaXR5LgoKTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGlzIGNsZWFybHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2ApIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCgpSZWdhcmRpbmcgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHJlbGV2YW50IEJQRiBzeW1ib2xzIGFuZCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGlmIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgcmVsYXRlZCBoZWxwZXJzIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8ga25vdyBpZiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBkZXRlcm1pbmUgaXRzIGFiaWxpdHkgdG8gYmUgdXNlZCBpbiBleHRlcm5hbCBCUEYgcHJvZ3JhbXMuIEkmIzM5O2xsIGxvb2sgYXJvdW5kIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIGBzZWc2X2xvY2FsLmNgLCBhbmQgcG90ZW50aWFsbHkgdXNlIHRvb2xzIGxpa2UgYGdyZXBwZXJgIG9yIGBubWAgdG8gYmUgc3VyZS4gSSB3aWxsIHVzZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF80XFwoYnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzItXG5uZXQvY29yZS9maWx0ZXIuYzo3MDMzOkJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNC1cdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRl9DQUxMXzQgTWFjcm8qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgQlBGX0NBTExfNGAgbWFjcm8gZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIGV4cGVjdGF0aW9uIGlzIHRoYXQgaXQgd2lsbCBleHBhbmQgdG8gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgbGlrZWx5IGB1NjQgbmFtZSh1NjQgX19hMSwgdTY0IF9fYTIsIC4uLilgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYSB0eXBpY2FsIHBhdHRlcm4uIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljaywgbW9yZSBlbmNvbXBhc3NpbmcgY2hlY2suIEl0JiMzOTtzIG9mdGVuIHF1aWNrZXIgdG8ganVzdCBncmVwIGZvciB0aGUgYnJvYWRlciBjb250ZXh0LiBJJiMzOTtsbCBzZWFyY2ggZm9yIGVpdGhlciBgX19fYnBmX3Byb2dfcnVuYCBvciBhbnkgaW5zdGFuY2Ugb2YgYEJQRl9DQUxMX2Agd2l0aGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGRlY2xhcmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGZpbHRlcmluZyBmcmFtZXdvcmsuIEEgYnJvYWRlciBzZWFyY2ggd2lsbCBnaXZlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBCUEZfQ0FMTF9bMC05XSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NzgtI2RlZmluZSBfX05PQVRUUlxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Nzk6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODA6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODE6I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODI6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODM6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODQ6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjQ1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSW50ZWdyYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCYjMzk7cyBTRUc2IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgaW50ZWdyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU0VHNikgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIHNlZSBgQlBGX0NBTExfeGAgd2hpY2ggc2VlbXMgdG8gZGVmaW5lIGEgYHU2NCBuYW1lKC4uLilgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEJQRiBjYWxscyBhcmUgY29uc3RydWN0ZWQgYW5kIHVzZWQuIE15IG5leHQgdGhvdWdodCBpcyB0byBsb29rIGF0IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBhbG9uZyB3aXRoIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlbiB0aGVyZSYjMzk7cyBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLCB3aGljaCBJIHNob3VsZCBsb29rIGF0IGFzIHdlbGwuIEkmIzM5O20gd29uZGVyaW5nIGlmIGNvcmUgaW5wdXQgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWNhbGx5IG9yIG5vdC4gTGV0IG1lIGp1c3QgY2hlY2sgb24gdGhhdC4gSXMgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgb3IgYHNlZzZfbG9jYWxfaW5wdXRgIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZT8gTGV0IG1lIGNoZWNrIGBzZWc2X2xvY2FsX2lucHV0YCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTE9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjA4LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MDk6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYxMC1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMwLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MzE6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzMi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDAtXHRcdFx0ICAgICAgIGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVx1MDAzZWRldiwgTlVMTCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjQxOlx0XHRcdCAgICAgICBzZWc2X2xvY2FsX2lucHV0X2NvcmUpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0MzpcdHJldHVybiBzZWc2X2xvY2FsX2lucHV0X2NvcmUoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjQ0LX1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY3My1cdC5kZXN0cm95X3N0YXRlXHQ9IHNlZzZfbG9jYWxfZGVzdHJveV9zdGF0ZSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjc0Olx0LmlucHV0XHRcdD0gc2VnNl9sb2NhbF9pbnB1dCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjc1LVx0LmZpbGxfZW5jYXBcdD0gc2VnNl9sb2NhbF9maWxsX2VuY2FwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU1MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIGl0JiMzOTtzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTRUc2IExvY2FsIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHBvc2VkIGludGVyZmFjZSBmb3IgU0VHNiBsb2NhbC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgc2VnNl9sb2NhbC5oYCBvciwganVzdCB0byBiZSBzdXJlLCBgaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXJzLiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgcHVibGljLWZhY2luZyBBUEkgSSBoYXZlIHRvIHdvcmsgd2l0aCwgb3IgbmVlZCB0byBiZSBhd2FyZSBvZiB3aGVuIEkgd29yayB3aXRoIGl0IGZ1cnRoZXIuIEkmIzM5O20gYWZ0ZXIgdGhlIHByb3RvdHlwZXMsIGlubGluZSBmdW5jdGlvbnMsIGFuZCBhbnkgb3RoZXIgZGVjbGFyYXRpb25zIHRoYXQgZGVmaW5lIGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBtb2R1bGUuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSBpbi1kZXB0aCBhbmFseXNpcyBvciBtb2RpZmljYXRpb24gSSBwbGFuIHRvIGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zZWc2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGRpc3RpbGxlZCBmb3IgeW91OgoKKipEaXZpbmcgaW50byB0aGUgU0VHNiBIZWFkZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaW5jbHVkZS9uZXQvc2VnNiouaGAgZmlsZXMuIFRoaXMgYXJlYSBpcyB0aGUgY29yZSBvZiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGhlYWRlciBmaWxlcyBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIFRoZXkmIzM5O2xsIGRlZmluZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIHRoZSBiYWNrYm9uZSBvZiBob3cgU1J2NiBpcyBpbXBsZW1lbnRlZCBhdCB0aGUgbmV0d29yayBsZXZlbC4gTG9va2luZyBhdCB0aGVzZSBoZWFkZXJzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaW50ZXJwcmV0cyBhbmQgbWFuaXB1bGF0ZXMgU1J2NiBzZWdtZW50cywgaGFuZGxlcyB0aGUgZGlmZmVyZW50IFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgb3B0aW9ucywgYW5kIGxpa2VseSwgaG93IHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIHBsYW5lIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3Mgb2YgU1J2Ni4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDs2bG93cGFuLmgmIzM0OywKICAgICYjMzQ7YWN0X2FwaS5oJiMzNDssCiAgICAmIzM0O2FkZHJjb25mLmgmIzM0OywKICAgICYjMzQ7YWZfaWVlZTgwMjE1NC5oJiMzNDssCiAgICAmIzM0O2FmX3J4cnBjLmgmIzM0OywKICAgICYjMzQ7YWZfdW5peC5oJiMzNDssCiAgICAmIzM0O2FmX3Zzb2NrLmgmIzM0OywKICAgICYjMzQ7YWguaCYjMzQ7LAogICAgJiMzNDthbGlnbmVkX2RhdGEuaCYjMzQ7LAogICAgJiMzNDthbXQuaCYjMzQ7LAogICAgJiMzNDthcnAuaCYjMzQ7LAogICAgJiMzNDtheDI1LmgmIzM0OywKICAgICYjMzQ7YXg4ODc5Ni5oJiMzNDssCiAgICAmIzM0O2JhcmV1ZHAuaCYjMzQ7LAogICAgJiMzNDtib25kXzNhZC5oJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiLmgmIzM0OywKICAgICYjMzQ7Ym9uZF9vcHRpb25zLmgmIzM0OywKICAgICYjMzQ7Ym9uZGluZy5oJiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlLmgmIzM0OywKICAgICYjMzQ7YnVzeV9wb2xsLmgmIzM0OywKICAgICYjMzQ7Y2FsaXBzby5oJiMzNDssCiAgICAmIzM0O2Nhbi5oJiMzNDssCiAgICAmIzM0O2NmZzgwMjExLXdleHQuaCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMS5oJiMzNDssCiAgICAmIzM0O2NmZzgwMjE1NC5oJiMzNDssCiAgICAmIzM0O2NoZWNrc3VtLmgmIzM0OywKICAgICYjMzQ7Y2lwc29faXB2NC5oJiMzNDssCiAgICAmIzM0O2Nsc19jZ3JvdXAuaCYjMzQ7LAogICAgJiMzNDtjb2RlbC5oJiMzNDssCiAgICAmIzM0O2NvZGVsX2ltcGwuaCYjMzQ7LAogICAgJiMzNDtjb2RlbF9xZGlzYy5oJiMzNDssCiAgICAmIzM0O2NvbXBhdC5oJiMzNDssCiAgICAmIzM0O2RhdGFsaW5rLmgmIzM0OywKICAgICYjMzQ7ZGNiZXZlbnQuaCYjMzQ7LAogICAgJiMzNDtkY2JubC5oJiMzNDssCiAgICAmIzM0O2RldmxpbmsuaCYjMzQ7LAogICAgJiMzNDtkcm9wcmVhc29uLWNvcmUuaCYjMzQ7LAogICAgJiMzNDtkcm9wcmVhc29uLXFkaXNjLmgmIzM0OywKICAgICYjMzQ7ZHJvcHJlYXNvbi5oJiMzNDssCiAgICAmIzM0O2RzYS5oJiMzNDssCiAgICAmIzM0O2RzYV9zdHVicy5oJiMzNDssCiAgICAmIzM0O2RzY3AuaCYjMzQ7LAogICAgJiMzNDtkc2ZpZWxkLmgmIzM0OywKICAgICYjMzQ7ZHN0LmgmIzM0OywKICAgICYjMzQ7ZHN0X2NhY2hlLmgmIzM0OywKICAgICYjMzQ7ZHN0X21ldGFkYXRhLmgmIzM0OywKICAgICYjMzQ7ZHN0X29wcy5oJiMzNDssCiAgICAmIzM0O2VlZS5oJiMzNDssCiAgICAmIzM0O2Vyc3Bhbi5oJiMzNDssCiAgICAmIzM0O2VzcC5oJiMzNDssCiAgICAmIzM0O2VzcGludGNwLmgmIzM0OywKICAgICYjMzQ7ZXRob2MuaCYjMzQ7LAogICAgJiMzNDtmYWlsb3Zlci5oJiMzNDssCiAgICAmIzM0O2ZpYl9ub3RpZmllci5oJiMzNDssCiAgICAmIzM0O2ZpYl9ydWxlcy5oJiMzNDssCiAgICAmIzM0O2ZpcmV3aXJlLmgmIzM0OywKICAgICYjMzQ7Zmxvdy5oJiMzNDssCiAgICAmIzM0O2Zsb3dfZGlzc2VjdG9yLmgmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkLmgmIzM0OywKICAgICYjMzQ7Zm91LmgmIzM0OywKICAgICYjMzQ7ZnEuaCYjMzQ7LAogICAgJiMzNDtmcV9pbXBsLmgmIzM0OywKICAgICYjMzQ7Z2FycC5oJiMzNDssCiAgICAmIzM0O2dlbl9zdGF0cy5oJiMzNDssCiAgICAmIzM0O2dlbmV0bGluay5oJiMzNDssCiAgICAmIzM0O2dlbmV2ZS5oJiMzNDssCiAgICAmIzM0O2dyZS5oJiMzNDssCiAgICAmIzM0O2dyby5oJiMzNDssCiAgICAmIzM0O2dyb19jZWxscy5oJiMzNDssCiAgICAmIzM0O2dzby5oJiMzNDssCiAgICAmIzM0O2d0cC5oJiMzNDssCiAgICAmIzM0O2d1ZS5oJiMzNDssCiAgICAmIzM0O2hhbmRzaGFrZS5oJiMzNDssCiAgICAmIzM0O2hvdGRhdGEuaCYjMzQ7LAogICAgJiMzNDtod2JtLmgmIzM0OywKICAgICYjMzQ7aWNtcC5oJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yYWRpb3RhcC5oJiMzNDssCiAgICAmIzM0O2llZWU4MDIxNTRfbmV0ZGV2LmgmIzM0OywKICAgICYjMzQ7aWVlZTgwMjFxLmgmIzM0OywKICAgICYjMzQ7aWZfaW5ldDYuaCYjMzQ7LAogICAgJiMzNDtpZmUuaCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9jb25uZWN0aW9uX3NvY2suaCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9oYXNodGFibGVzLmgmIzM0OywKICAgICYjMzQ7aW5ldF9jb21tb24uaCYjMzQ7LAogICAgJiMzNDtpbmV0X2Nvbm5lY3Rpb25fc29jay5oJiMzNDssCiAgICAmIzM0O2luZXRfZHNjcC5oJiMzNDssCiAgICAmIzM0O2luZXRfZWNuLmgmIzM0OywKICAgICYjMzQ7aW5ldF9mcmFnLmgmIzM0OywKICAgICYjMzQ7aW5ldF9oYXNodGFibGVzLmgmIzM0OywKICAgICYjMzQ7aW5ldF9zb2NrLmgmIzM0OywKICAgICYjMzQ7aW5ldF90aW1ld2FpdF9zb2NrLmgmIzM0OywKICAgICYjMzQ7aW5ldHBlZXIuaCYjMzQ7LAogICAgJiMzNDtpb2FtNi5oJiMzNDssCiAgICAmIzM0O2lwLmgmIzM0OywKICAgICYjMzQ7aXA2X2NoZWNrc3VtLmgmIzM0OywKICAgICYjMzQ7aXA2X2ZpYi5oJiMzNDssCiAgICAmIzM0O2lwNl9yb3V0ZS5oJiMzNDssCiAgICAmIzM0O2lwNl90dW5uZWwuaCYjMzQ7LAogICAgJiMzNDtpcF9maWIuaCYjMzQ7LAogICAgJiMzNDtpcF90dW5uZWxzLmgmIzM0OywKICAgICYjMzQ7aXBfdnMuaCYjMzQ7LAogICAgJiMzNDtpcGNvbXAuaCYjMzQ7LAogICAgJiMzNDtpcGNvbmZpZy5oJiMzNDssCiAgICAmIzM0O2lwdjYuaCYjMzQ7LAogICAgJiMzNDtpcHY2X2ZyYWcuaCYjMzQ7LAogICAgJiMzNDtpd19oYW5kbGVyLmgmIzM0OywKICAgICYjMzQ7a2NtLmgmIzM0OywKICAgICYjMzQ7bDNtZGV2LmgmIzM0OywKICAgICYjMzQ7bGFnLmgmIzM0OywKICAgICYjMzQ7bGFwYi5oJiMzNDssCiAgICAmIzM0O2xsYy5oJiMzNDssCiAgICAmIzM0O2xsY19jX2FjLmgmIzM0OywKICAgICYjMzQ7bGxjX2NfZXYuaCYjMzQ7LAogICAgJiMzNDtsbGNfY19zdC5oJiMzNDssCiAgICAmIzM0O2xsY19jb25uLmgmIzM0OywKICAgICYjMzQ7bGxjX2lmLmgmIzM0OywKICAgICYjMzQ7bGxjX3BkdS5oJiMzNDssCiAgICAmIzM0O2xsY19zX2FjLmgmIzM0OywKICAgICYjMzQ7bGxjX3NfZXYuaCYjMzQ7LAogICAgJiMzNDtsbGNfc19zdC5oJiMzNDssCiAgICAmIzM0O2xsY19zYXAuaCYjMzQ7LAogICAgJiMzNDtsd3R1bm5lbC5oJiMzNDssCiAgICAmIzM0O21hYzgwMjExLmgmIzM0OywKICAgICYjMzQ7bWFjODAyMTU0LmgmIzM0OywKICAgICYjMzQ7bWFjc2VjLmgmIzM0OywKICAgICYjMzQ7bWN0cC5oJiMzNDssCiAgICAmIzM0O21jdHBkZXZpY2UuaCYjMzQ7LAogICAgJiMzNDttaXA2LmgmIzM0OywKICAgICYjMzQ7bWxkLmgmIzM0OywKICAgICYjMzQ7bXBscy5oJiMzNDssCiAgICAmIzM0O21wbHNfaXB0dW5uZWwuaCYjMzQ7LAogICAgJiMzNDttcHRjcC5oJiMzNDssCiAgICAmIzM0O21ycC5oJiMzNDssCiAgICAmIzM0O25jc2kuaCYjMzQ7LAogICAgJiMzNDtuZGlzYy5oJiMzNDssCiAgICAmIzM0O25laWdoYm91ci5oJiMzNDssCiAgICAmIzM0O25laWdoYm91cl90YWJsZXMuaCYjMzQ7LAogICAgJiMzNDtuZXRfZGVidWcuaCYjMzQ7LAogICAgJiMzNDtuZXRfZmFpbG92ZXIuaCYjMzQ7LAogICAgJiMzNDtuZXRfbmFtZXNwYWNlLmgmIzM0OywKICAgICYjMzQ7bmV0X3JhdGVsaW1pdC5oJiMzNDssCiAgICAmIzM0O25ldF9zaGFwZXIuaCYjMzQ7LAogICAgJiMzNDtuZXRfdHJhY2tlcnMuaCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbG9jay5oJiMzNDssCiAgICAmIzM0O25ldGRldl9uZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3F1ZXVlcy5oJiMzNDssCiAgICAmIzM0O25ldGRldl9yeF9xdWV1ZS5oJiMzNDssCiAgICAmIzM0O25ldGV2ZW50LmgmIzM0OywKICAgICYjMzQ7bmV0a2l0LmgmIzM0OywKICAgICYjMzQ7bmV0bGFiZWwuaCYjMzQ7LAogICAgJiMzNDtuZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7bmV0bWVtLmgmIzM0OywKICAgICYjMzQ7bmV0cHJpb19jZ3JvdXAuaCYjMzQ7LAogICAgJiMzNDtuZXh0aG9wLmgmIzM0OywKICAgICYjMzQ7bmw4MDIxNTQuaCYjMzQ7LAogICAgJiMzNDtuc2guaCYjMzQ7LAogICAgJiMzNDtwZmNwLmgmIzM0OywKICAgICYjMzQ7cGllLmgmIzM0OywKICAgICYjMzQ7cGluZy5oJiMzNDssCiAgICAmIzM0O3BrdF9jbHMuaCYjMzQ7LAogICAgJiMzNDtwa3Rfc2NoZWQuaCYjMzQ7LAogICAgJiMzNDtwcHRwLmgmIzM0OywKICAgICYjMzQ7cHJvdG9fbWVtb3J5LmgmIzM0OywKICAgICYjMzQ7cHJvdG9jb2wuaCYjMzQ7LAogICAgJiMzNDtwc2FtcGxlLmgmIzM0OywKICAgICYjMzQ7cHNuYXAuaCYjMzQ7LAogICAgJiMzNDtwc3AuaCYjMzQ7LAogICAgJiMzNDtyYXcuaCYjMzQ7LAogICAgJiMzNDtyYXd2Ni5oJiMzNDssCiAgICAmIzM0O3JlZC5oJiMzNDssCiAgICAmIzM0O3JlZ3VsYXRvcnkuaCYjMzQ7LAogICAgJiMzNDtyZXF1ZXN0X3NvY2suaCYjMzQ7LAogICAgJiMzNDtyb3NlLmgmIzM0OywKICAgICYjMzQ7cm91dGUuaCYjMzQ7LAogICAgJiMzNDtycGwuaCYjMzQ7LAogICAgJiMzNDtycHMtdHlwZXMuaCYjMzQ7LAogICAgJiMzNDtycHMuaCYjMzQ7LAogICAgJiMzNDtyc2lfOTF4LmgmIzM0OywKICAgICYjMzQ7cnN0cmVhc29uLmgmIzM0OywKICAgICYjMzQ7cnRuZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7cnRuaC5oJiMzNDssCiAgICAmIzM0O3NjaF9nZW5lcmljLmgmIzM0OywKICAgICYjMzQ7c2NoX3ByaXYuaCYjMzQ7LAogICAgJiMzNDtzY20uaCYjMzQ7LAogICAgJiMzNDtzZWN1cmVfc2VxLmgmIzM0OywKICAgICYjMzQ7c2VnNi5oJiMzNDssCiAgICAmIzM0O3NlZzZfaG1hYy5oJiMzNDssCiAgICAmIzM0O3NlZzZfbG9jYWwuaCYjMzQ7LAogICAgJiMzNDtzZWxmdGVzdHMuaCYjMzQ7LAogICAgJiMzNDtzbGhjX3ZqLmgmIzM0OywKICAgICYjMzQ7c21jLmgmIzM0OywKICAgICYjMzQ7c25tcC5oJiMzNDssCiAgICAmIzM0O3NvY2suaCYjMzQ7LAogICAgJiMzNDtzb2NrX3JldXNlcG9ydC5oJiMzNDssCiAgICAmIzM0O3N0cC5oJiMzNDssCiAgICAmIzM0O3N0cnBhcnNlci5oJiMzNDssCiAgICAmIzM0O3N3aXRjaGRldi5oJiMzNDssCiAgICAmIzM0O3RjX3dyYXBwZXIuaCYjMzQ7LAogICAgJiMzNDt0Y3AuaCYjMzQ7LAogICAgJiMzNDt0Y3BfYW8uaCYjMzQ7LAogICAgJiMzNDt0Y3BfZWNuLmgmIzM0OywKICAgICYjMzQ7dGNwX3N0YXRlcy5oJiMzNDssCiAgICAmIzM0O3RjeC5oJiMzNDssCiAgICAmIzM0O3RpbWV3YWl0X3NvY2suaCYjMzQ7LAogICAgJiMzNDt0aXBjLmgmIzM0OywKICAgICYjMzQ7dGxzLmgmIzM0OywKICAgICYjMzQ7dGxzX3Byb3QuaCYjMzQ7LAogICAgJiMzNDt0cmFuc3BfdjYuaCYjMzQ7LAogICAgJiMzNDt0c28uaCYjMzQ7LAogICAgJiMzNDt0dW5fcHJvdG8uaCYjMzQ7LAogICAgJiMzNDt1ZHAuaCYjMzQ7LAogICAgJiMzNDt1ZHBfdHVubmVsLmgmIzM0OywKICAgICYjMzQ7dnNvY2tfYWRkci5oJiMzNDssCiAgICAmIzM0O3Z4bGFuLmgmIzM0OywKICAgICYjMzQ7d2V4dC5oJiMzNDssCiAgICAmIzM0O3gyNS5oJiMzNDssCiAgICAmIzM0O3gyNWRldmljZS5oJiMzNDssCiAgICAmIzM0O3hkcC5oJiMzNDssCiAgICAmIzM0O3hkcF9wcml2LmgmIzM0OywKICAgICYjMzQ7eGRwX3NvY2suaCYjMzQ7LAogICAgJiMzNDt4ZHBfc29ja19kcnYuaCYjMzQ7LAogICAgJiMzNDt4ZnJtLmgmIzM0OywKICAgICYjMzQ7eHNrX2J1ZmZfcG9vbC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0OzlwJiMzNDssCiAgICAmIzM0O2JsdWV0b290aCYjMzQ7LAogICAgJiMzNDtpdWN2JiMzNDssCiAgICAmIzM0O2xpYmV0aCYjMzQ7LAogICAgJiMzNDttYW5hJiMzNDssCiAgICAmIzM0O25ldGZpbHRlciYjMzQ7LAogICAgJiMzNDtuZXRucyYjMzQ7LAogICAgJiMzNDtuZmMmIzM0OywKICAgICYjMzQ7cGFnZV9wb29sJiMzNDssCiAgICAmIzM0O3Bob25ldCYjMzQ7LAogICAgJiMzNDtwaHkmIzM0OywKICAgICYjMzQ7cHNwJiMzNDssCiAgICAmIzM0O3NjdHAmIzM0OywKICAgICYjMzQ7dGNfYWN0JiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgU0VHNiBDb2RlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9jYWwgc2VnbWVudCByb3V0aW5nIHNwZWNpZmljcyBhbmQgdGhlIGJyb2FkZXIgU0VHNiBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGhlYWRlciBmaWxlcy4gSSBmaWd1cmUgYGluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaGAgd2lsbCBjb250YWluIHRoZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGxvY2FsIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byB0aGUgaGFuZGxpbmcgb2YgU0VHNiByb3V0ZXMgb24gdGhpcyBzeXN0ZW0uIEl0IHNob3VsZCBkZXRhaWwgdGhpbmdzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpYyBmbGFncywgYW5kIHBlcmhhcHMgc29tZSBvZiB0aGUgZnVuZGFtZW50YWwgZGF0YSB0eXBlcyB1c2VkIGluIHRoZSBsb2NhbCByb3V0aW5nIHRhYmxlLiBUaGVuLCBJJiMzOTtsbCBuZWVkIGEgYnJvYWRlciB2aWV3LCBzbyBgaW5jbHVkZS9uZXQvc2VnNi5oYCBpcyB0aGUgbmV4dCBzdG9wLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG9uZSB0byBwcm92aWRlIHRoZSBjb3JlIGRlZmluaXRpb25zLCBjb21tb24gc3RydWN0dXJlcywgYW5kIG1heWJlIHRoZSBpbnRlcmZhY2VzIHRoYXQgdGllIHRoZSB2YXJpb3VzIFNFRzYgbW9kdWxlcyB0b2dldGhlci4gSXQmIzM5O2xsIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlIGNvbnRleHQsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGxvY2FsIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgbW9yZSBnZW5lcmFsIFNFRzYgcHJvdG9jb2wuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogIEF1dGhvcnM6XG4gICA2Olx0ICogIERhdmlkIExlYnJ1biBcdTAwM2NkYXZpZC5sZWJydW5AdWNsb3V2YWluLmJlXHUwMDNlXG4gICA3Olx0ICogIGVCUEYgc3VwcG9ydDogTWF0aGlldSBYaG9ubmV1eCBcdTAwM2NtLnhob25uZXV4QGdtYWlsLmNvbVx1MDAzZVxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcbiAgMTE6XHQjZGVmaW5lIF9ORVRfU0VHNl9MT0NBTF9IXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICAxNjpcdFxuICAxNzpcdGV4dGVybiBpbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcbiAgMTg6XHRcdFx0XHQgICAgICAgdTMyIHRibF9pZCk7XG4gIDE5Olx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAgMjA6XHRcbiAgMjE6XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlIHtcbiAgMjI6XHRcdGxvY2FsX2xvY2tfdCBiaF9sb2NrO1xuICAyMzpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gIDI0Olx0XHR1MTYgaGRybGVuO1xuICAyNTpcdFx0Ym9vbCB2YWxpZDtcbiAgMjY6XHR9O1xuICAyNzpcdFxuICAyODpcdERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbiAgMjk6XHRcbiAgMzA6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFNFRzYgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFNlZ21lbnQgUm91dGluZyBvdmVyIElQdjYgKFNFRzYpIGltcGxlbWVudGF0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2UgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYXJ0IG9mIGl0IGFsbDogYGluY2x1ZGUvbmV0L3NlZzYuaGAuIFRoaXMgaGVhZGVyIGZpbGUgaXMgd2hlcmUgdGhlIGZ1bmRhbWVudGFsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGFyZSwgc28gaXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBTRUc2LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBTSUQgbGlzdHMsIHRoZSBjb250cm9sIGZsYWdzLCBwZXJoYXBzIHNvbWUgbWFjcm9zIGZvciBtYW5pcHVsYXRpbmcgdGhlIHNlZ21lbnRzLCBhbmQgb2YgY291cnNlLCB0aGUga2V5IHN0cnVjdHVyZXMgdXNlZCBmb3IgZW5jYXBzdWxhdGluZyB0aGUgSVB2NiBoZWFkZXJzIHdpdGhpbiBJUHY2LiBLbm93aW5nIHRoZXNlIGJ1aWxkaW5nIGJsb2NrcyBpcyBjcnVjaWFsIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUgb3RoZXIgYC5jYCBmaWxlcy4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHRoZSBzZWdtZW50IGxpc3QgZW50cnksIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCBhbmQgbWF5YmUgZXZlbiBzb21lIGlubGluZSBmdW5jdGlvbnMgZm9yIHF1aWNrbHkgYWNjZXNzaW5nIGZpZWxkcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NlZzYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogIEF1dGhvcjpcbiAgIDY6XHQgKiAgRGF2aWQgTGVicnVuIFx1MDAzY2RhdmlkLmxlYnJ1bkB1Y2xvdXZhaW4uYmVcdTAwM2VcbiAgIDc6XHQgKi9cbiAgIDg6XHRcbiAgIDk6XHQjaWZuZGVmIF9ORVRfU0VHNl9IXG4gIDEwOlx0I2RlZmluZSBfTkVUX1NFRzZfSFxuICAxMTpcdFxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2VnNi5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXHUwMDNlXG4gIDE2Olx0XG4gIDE3Olx0c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jc3VtX2RpZmY0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBmcm9tLFxuICAxODpcdFx0XHRcdFx0ICAgICBfX2JlMzIgdG8pXG4gIDE5Olx0e1xuICAyMDpcdFx0X19iZTMyIGRpZmZbXSA9IHsgfmZyb20sIHRvIH07XG4gIDIxOlx0XG4gIDIyOlx0XHRza2ItXHUwMDNlY3N1bSA9IH5jc3VtX3BhcnRpYWwoKGNoYXIgKilkaWZmLCBzaXplb2YoZGlmZiksIH5za2ItXHUwMDNlY3N1bSk7XG4gIDIzOlx0fVxuICAyNDpcdFxuICAyNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3N1bV9kaWZmMTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyICpmcm9tLFxuICAyNjpcdFx0XHRcdFx0ICAgICAgX19iZTMyICp0bylcbiAgMjc6XHR7XG4gIDI4Olx0XHRfX2JlMzIgZGlmZltdID0ge1xuICAyOTpcdFx0XHR+ZnJvbVswXSwgfmZyb21bMV0sIH5mcm9tWzJdLCB+ZnJvbVszXSxcbiAgMzA6XHRcdFx0dG9bMF0sIHRvWzFdLCB0b1syXSwgdG9bM10sXG4gIDMxOlx0XHR9O1xuICAzMjpcdFxuICAzMzpcdFx0c2tiLVx1MDAzZWNzdW0gPSB+Y3N1bV9wYXJ0aWFsKChjaGFyICopZGlmZiwgc2l6ZW9mKGRpZmYpLCB+c2tiLVx1MDAzZWNzdW0pO1xuICAzNDpcdH1cbiAgMzU6XHRcbiAgMzY6XHRzdHJ1Y3Qgc2VnNl9wZXJuZXRfZGF0YSB7XG4gIDM3Olx0XHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiAgMzg6XHRcdHN0cnVjdCBpbjZfYWRkciBfX3JjdSAqdHVuX3NyYztcbiAgMzk6XHQjaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4gIDQwOlx0XHRzdHJ1Y3Qgcmhhc2h0YWJsZSBobWFjX2luZm9zO1xuICA0MTpcdCNlbmRpZlxuICA0MjpcdH07XG4gIDQzOlx0XG4gIDQ0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VnNl9wZXJuZXRfZGF0YSAqc2VnNl9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxuICA0NTpcdHtcbiAgNDY6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiAgNDc6XHRcdHJldHVybiBuZXQtXHUwMDNlaXB2Ni5zZWc2X2RhdGE7XG4gIDQ4Olx0I2Vsc2VcbiAgNDk6XHRcdHJldHVybiBOVUxMO1xuICA1MDpcdCNlbmRpZlxuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHRleHRlcm4gaW50IHNlZzZfaW5pdCh2b2lkKTtcbiAgNTQ6XHRleHRlcm4gdm9pZCBzZWc2X2V4aXQodm9pZCk7XG4gIDU1Olx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxcbiAgNTY6XHRleHRlcm4gaW50IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKTtcbiAgNTc6XHRleHRlcm4gdm9pZCBzZWc2X2lwdHVubmVsX2V4aXQodm9pZCk7XG4gIDU4Olx0ZXh0ZXJuIGludCBzZWc2X2xvY2FsX2luaXQodm9pZCk7XG4gIDU5Olx0ZXh0ZXJuIHZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpO1xuICA2MDpcdCNlbHNlXG4gIDYxOlx0c3RhdGljIGlubGluZSBpbnQgc2VnNl9pcHR1bm5lbF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAgNjI6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpIHt9XG4gIDYzOlx0c3RhdGljIGlubGluZSBpbnQgc2VnNl9sb2NhbF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAgNjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpIHt9XG4gIDY1Olx0I2VuZGlmXG4gIDY2Olx0XG4gIDY3Olx0ZXh0ZXJuIGJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZCk7XG4gIDY4Olx0ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XG4gIDY5Olx0ZXh0ZXJuIHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCk7XG4gIDcwOlx0ZXh0ZXJuIGludCBzZWc2X2RvX3NyaF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgsXG4gIDcxOlx0XHRcdFx0ICAgICBpbnQgcHJvdG8pO1xuICA3MjpcdGV4dGVybiBpbnQgc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCk7XG4gIDczOlx0ZXh0ZXJuIGludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxuICA3NDpcdFx0XHRcdCAgICAgICB1MzIgdGJsX2lkKTtcbiAgNzU6XHRcbiAgNzY6XHQvKiBJZiB0aGUgcGFja2V0IHdoaWNoIGludm9rZWQgYW4gSUNNUCBlcnJvciBjb250YWlucyBhbiBTUkggcmV0dXJuXG4gIDc3Olx0ICogdGhlIHRydWUgZGVzdGluYXRpb24gYWRkcmVzcyBmcm9tIHdpdGhpbiB0aGUgU1JILCBvdGhlcndpc2UgdXNlIHRoZVxuICA3ODpcdCAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIElQIGhlYWRlci5cbiAgNzk6XHQgKi9cbiAgODA6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VnNl9nZXRfZGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyMDIKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRi1iYXNlZCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG1haW4gZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIHRoZSBCUEYgaW50ZWdyYXRpb24gd2l0aCBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgZm9yIGZ1enppbmcgcHVycG9zZXMuIEkmIzM5O20gc3RhcnRpbmcgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBjb21wb25lbnRzLiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgdGhlIHByaW1hcnkgQlBGIGhlbHBlciBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIHN5bWJvbCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcyB0byBoYW5kbGUgdGhlIFNSSCBvcGVyYXRpb25zLCBzbyBpdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGBGb2N1c1N5bWJvbGAuIEl0IGxvb2tzIGxpa2UgaXQgZGlyZWN0bHkgY2FsbHMgc3RhdGljIGhlbHBlcnMgbGlrZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAsIGBzZWc2X2dldF9zcmhgLCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBzeW1ib2xzLiBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGxvb2tzIGludGVyZXN0aW5nIHNpbmNlIHRoYXQgc2V0cyB1cCBgc3JoX3N0YXRlYCBhbmQgaW52b2tlcyB0aGUgQlBGIHByb2dyYW0gY2FsbGluZyBgYnBmX2x3dF9zZWc2X2FjdGlvbmAuIFRoZXJlZm9yZSBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIHdpbGwgYWxzbyBiZSBpbmNsdWRlZCBpbiBgRm9jdXNTeW1ib2xzYC4gRmluYWxseSwgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIHdpbGwgYWxzbyBiZSBpbmNsdWRlZCBpbiBgRm9jdXNTeW1ib2xzYC4KCk5leHQsIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9TRUc2X0JQRmAgaXMgdGhlIGtleSwgYW5kIGl0JiMzOTtzIGBkZWZfYm9vbCB5YCBpZiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQgYElQVjZgIGFyZSBlbmFibGVkLCBhbmQgYElQVjZfU0VHNl9MV1RVTk5FTGAgZGVwZW5kcyBvbiBgSVBWNmAuIFRoaXMgbWVhbnMgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgIG11c3QgYmUgZW5hYmxlZC4gQWxzbywgdGhlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCByZWxhdGVkIGhlbHBlcnMgYXJlIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKWAuIFRoZXNlIGFyZSBteSBgRW5hYmxlQ29uZmlnc2AuIEkgd2lsbCBhbHNvIG5lZWQgYEJQRl9TWVNDQUxMYCB0byBiZSBlbmFibGVkLCBiZWNhdXNlIHRoZSBCUEYgcHJvZ3JhbSBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlLgoKU28sIHRvIHN1bW1hcml6ZSBmb3IgZnV6emluZyBwdXJwb3NlczoKCiogICAqKmBGb2N1c1N5bWJvbHNgKio6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgCiogICAqKmBFbmFibGVDb25maWdzYCoqOiBgSVBWNmAsIGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBgSVBWNl9TRUc2X0JQRmAsIGBCUEZfU1lTQ0FMTGAKCkdpdmVuIHRoZXNlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBhc3BlY3RzIHRvIGVuYWJsZSBhbmQgdGFyZ2V0IGZvciBlZmZlY3RpdmUgZnV6emluZyBvZiB0aGUgQlBGLWJhc2VkIFNSSCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBhbmFseXNpcyBpcyBjb25jaXNlIGFuZCBwcm92aWRlcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFNSSCBzdGF0ZSBoYW5kbGluZyBhbmQgc2tiIGxpbmVhciBidWZmZXIgdmFsaWRhdGlvbiAocHNrYl9tYXlfcHVsbCBpbnN0ZWFkIG9mIHBza2JfcHVsbCkgaW4gdGhlIFNSdjYgQlBGIGhlbHBlciBicGZfbHd0X3NlZzZfYWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGFuZCBCUEYgcGFja2V0IGhhbmRsaW5nIHBhdGhzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7LAogICAgJiMzNDtzZWc2X2JwZl9oYXNfdmFsaWRfc3JoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFNSSCBzdGF0ZSBoYW5kbGluZyBhbmQgc2tiIGxpbmVhciBidWZmZXIgdmFsaWRhdGlvbiAocHNrYl9tYXlfcHVsbCBpbnN0ZWFkIG9mIHBza2JfcHVsbCkgaW4gdGhlIFNSdjYgQlBGIGhlbHBlciBicGZfbHd0X3NlZzZfYWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGFuZCBCUEYgcGFja2V0IGhhbmRsaW5nIHBhdGhzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgbWFudWFsIFNSSCBsb29rdXBzIHdpdGggYHNlZzZfZ2V0X3NyaCgpYCAod2hpY2ggcGVyZm9ybXMgcHJvcGVyIGBwc2tiX21heV9wdWxsYCBhbmQgdmFsaWRhdGVzIHRoZSBTUkgpLCBlbnN1cmVzIEJQRiBwYWNrZXQgZGF0YSBwb2ludGVycyAoYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgKSBhcmUgcmVjYWxjdWxhdGVkIHdoZW4gc2tiIGxpbmVhciBidWZmZXJzIG1heSBiZSByZWFsbG9jYXRlZCBkdXJpbmcgaGVhZGVyIHB1bGxzLCBhbmQgYWRkcyBtaXNzaW5nIGJvdW5kcyB2YWxpZGF0aW9uIChgcHNrYl9tYXlfcHVsbGApIGJlZm9yZSBwdWxsaW5nIElQdjYgaGVhZGVycy5cblxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXG5cblRoZSBwYXRjaCBkb2VzIG5vdDpcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cbjIuIEV4cG9zZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLlxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M4ODYwZTMzMjM0YmM2OGQ5MWU1ZTJhMjNmZmNjNTEwODc0YzdlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDc6NDc6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjFkZDNhNjg1ZDFiODkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDE4LDE1ICYjNDM7NzAxOCwxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwotCWludCBzcmhvZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgJmx0OyAwKSB7Ci0JCXNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTDsKLQl9IGVsc2UgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNyaG9mZik7Ci0JCXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoX3N0YXRlLSZndDtzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwotCQlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKLQl9CiYjNDM7CXNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApOwomIzQzOwlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7c3JoID0gc3JoOwomIzQzOwlpZiAoIXNyaCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3JoX3N0YXRlLSZndDtoZHJsZW4gPSBzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwomIzQzOwlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKIH0KIAogQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC03MDU5LDE1ICYjNDM7NzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYiwKIAogCQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpICZsdDsgMCkKIAkJCXJldHVybiAtRUJBRE1TRzsKLQkJaWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKQomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7CiYjNDM7CQkJc3JoX3N0YXRlLSZndDtzcmggPSBOVUxMOwomIzQzOwkJCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCX0KJiM0MzsJCV9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpOwogCiAJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAotCQlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiAJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAJCXJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6CkBAIC03MDc1LDggJiM0Mzs3MDc5LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKLQkJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiYjNDM7CQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6CkBAIC03MDg0LDggJiM0Mzs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiAJCQlyZXR1cm4gLUVCQURNU0c7CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQotCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKJiM0MzsJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAKIAkJcmV0dXJuIGVycjsKIAlkZWZhdWx0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBGdXp6aW5nIFJlcXVlc3QqKgoKT2theSwgc28gc29tZW9uZSYjMzk7cyBhc2tpbmcgbWUgd2hldGhlciB0aGlzIGtlcm5lbCBwYXRjaCBzZXJpZXMgbmVlZHMgS01TQU4gZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3M/IExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIGtlZXBpbmcgaW4gbWluZCB0aGUgc2FmZXR5IGd1aWRlbGluZXMgd2UmIzM5O3ZlIGVzdGFibGlzaGVkLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBtYWxpY2lvdXMgYWN0aXZpdHkgb3IgZXhwbG9pdCBkZXZlbG9wbWVudDsgaXQmIzM5O3MgYSByb3V0aW5lIHBhdGNoIGFuYWx5c2lzIGZvY3VzaW5nIG9uIHNhbml0aXplciBzZWxlY3Rpb24g4oCTIEtBU0FOIHZlcnN1cyBLTVNBTi4gR29vZCwgdGhhdCBtYWtlcyBpdCBhIG11Y2ggbW9yZSBtYW5hZ2VhYmxlIHRhc2suCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gVGhleSYjMzk7cmUgd29ya2luZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0JiMzOTtzIHRoZSBrZXkgYXJlYSBvZiBjb25jZXJuLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDcwMTguIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFzc2VzcyB3aGV0aGVyIEtNU0FOIGlzIHdhcnJhbnRlZCBiYXNlZCBvbiB0aGUgY2hhbmdlcy4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMTA6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjcwMTE6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG43MDEyOlx0XHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbjcwMTM6XHRcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuNzAxNDpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbjcwMTU6XHR9O1xuNzAxNjpcdFxuNzAxNzpcdHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG43MDE4Olx0e1xuNzAxOTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMjA6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAyMTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG43MDIyOlx0XG43MDIzOlx0XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbjcwMjQ6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwMjU6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG43MDI2Olx0XHRpZiAoIXNyaClcbjcwMjc6XHRcdFx0cmV0dXJuO1xuNzAyODpcdFxuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG43MDMwOlx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuNzAzMTpcdH1cbjcwMzI6XHRcbjcwMzM6XHRCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbjcwMzQ6XHRcdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcbjcwMzU6XHR7XG43MDM2Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuNzAzNzpcdFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG43MDgxOlx0XHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG43MDgyOlx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDgzOlx0XG43MDg0Olx0XHRcdHJldHVybiBlcnI7XG43MDg1Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODY6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA4ODpcdFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuNzA4OTpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA5MDpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5MTpcdFxuNzA5MjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5MzpcdFx0ZGVmYXVsdDpcbjcwOTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDk1Olx0XHR9XG43MDk2Olx0fVxuNzA5NzpcdFxuNzA5ODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcbjcwOTk6XHRcdC5mdW5jXHRcdD0gYnBmX2x3dF9zZWc2X2FjdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGludG8sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBTRUc2IEJQRiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUgU0VHNiBCUEYgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBvZiBgc2VnNl9icGZfc3JoX3N0YXRlc2AgYW5kIGBzZWc2X2dldF9zcmhgIOKAkyBjcml0aWNhbCBjb21wb25lbnRzIGluIHRoZSBCUEYtZHJpdmVuIFNFRzYgZGF0YSBwbGFuZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gb24gaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBgc3JoX3N0YXRlYCBhcmUgYmVpbmcgaGFuZGxlZC4gVG8gZ2FpbiB0aGlzIHVuZGVyc3RhbmRpbmcgSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiB0aGVzZSBrZXkgaWRlbnRpZmllcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9pcHY2L3NlZzYuY2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgQlBGIGhlbHBlcnMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUgaW4gb3JkZXIgdG8gdGhvcm91Z2hseSBhc3Nlc3MgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zZWc2X2xvY2FsLmg9MjE9c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oLTI3LVxuaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oOjI4OkRFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbmluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaC0yOS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTc0PUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzctXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3ODpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjk3OS1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDE3PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAxOS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDIwOlx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDIxLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAzMz1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDM2LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzc6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzgtXHRpbnQgaGRyb2ZmID0gMDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTA4PUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MTEyOlx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MTEzLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzg1LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzODY6REVGSU5FX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcykgPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4Ny1cdC5iaF9sb2NrXHQ9IElOSVRfTE9DQUxfTE9DSyhiaF9sb2NrKSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM5MD1ib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM5Mi1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM5MzpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTQtXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MTQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDMzLVx0ICovXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNDpcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNTpcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDM2LVx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Ny1cdFx0Z290byBkcm9wO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTg6XHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1OS1cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2NS1kcm9wOlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NjY6XHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2Ny1cdGtmcmVlX3NrYihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgU0VHNiBMb2NhbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBTRUc2IGxvY2FsIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIHRoZSBwcmltYXJ5IGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIHdvdWxkIHRoZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlc2lkZT8mIzM0OyBUaGF0IGxlYWRzIG1lIGRpcmVjdGx5IHRvIGBpbmNsdWRlL25ldC9zZWc2X2xvY2FsLmhgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSB0aGUgZXhwb3NlZCBBUElzLCBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgU0lEcyBhbmQgbG9jYWwgcG9saWN5LCBhbmQgbWF5YmUgc29tZSBvZiB0aGUgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMuIFRoZW4sIG5hdHVyYWxseSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRob3NlIGVsZW1lbnRzIGFyZSAqdXNlZCogYW5kICppbXBsZW1lbnRlZCouIFNvLCBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgdG8gZXhhbWluZSB0aGUgYWN0dWFsIGNvZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIFNJRCBwcm9jZXNzaW5nLCB0aGUgbG9jYWwgcG9saWN5IGFwcGxpY2F0aW9uIGxvZ2ljLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGZvcndhcmRpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgaXQgYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LypcbiAgIDM6XHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogIEF1dGhvcnM6XG4gICA2Olx0ICogIERhdmlkIExlYnJ1biBcdTAwM2NkYXZpZC5sZWJydW5AdWNsb3V2YWluLmJlXHUwMDNlXG4gICA3Olx0ICogIGVCUEYgc3VwcG9ydDogTWF0aGlldSBYaG9ubmV1eCBcdTAwM2NtLnhob25uZXV4QGdtYWlsLmNvbVx1MDAzZVxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcbiAgMTE6XHQjZGVmaW5lIF9ORVRfU0VHNl9MT0NBTF9IXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICAxNjpcdFxuICAxNzpcdGV4dGVybiBpbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcbiAgMTg6XHRcdFx0XHQgICAgICAgdTMyIHRibF9pZCk7XG4gIDE5Olx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAgMjA6XHRcbiAgMjE6XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlIHtcbiAgMjI6XHRcdGxvY2FsX2xvY2tfdCBiaF9sb2NrO1xuICAyMzpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gIDI0Olx0XHR1MTYgaGRybGVuO1xuICAyNTpcdFx0Ym9vbCB2YWxpZDtcbiAgMjY6XHR9O1xuICAyNzpcdFxuICAyODpcdERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbiAgMjk6XHRcbiAgMzA6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2gsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBzZWc2X2xvY2FsLmMgLSBBIERlZXAgRGl2ZSAoTGluZXMgMTM4MC0xNDcwKSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAxMzgwIHRvIDE0NzAgd2l0aGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgcHJvY2Vzc2luZyBhbmQgaGFuZGxpbmcgb2YgU2VnbWVudCBSb3V0aW5nIElQdjYgKFNSdjYpIGxvY2FsIHBvbGljaWVzLiBHaXZlbiB0aGUgZmlsZSBhbmQgdGhlIGdlbmVyYWwgYXJlYSBvZiBuZXR3b3JraW5nIEkgd29yayBpbiwgaXQmIzM5O3MgYSBzYWZlIGJldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjaHVuaywgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBmdW5jdGlvbiBjYWxscyBhbmQgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb25zIHRvIHVuZm9sZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmlzbXMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIG1haW4gZnVuY3Rpb25zIGluIHBsYXkuIElzIHRoZXJlIGFuIGlmIHN0YXRlbWVudCBvciBzb21lIHNvcnQgb2Ygc3dpdGNoIHN0YXRlbWVudCB3aXRoaW4gdGhhdCByYW5nZSB0aGF0IGRldGVybWluZXMgdGhlIGJlaGF2aW9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlLiBQZXJoYXBzIGl0IGNvbmNlcm5zIHRoZSBwYXJzaW5nIG9mIHRoZSBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIGV4dGVuc2lvbiBoZWFkZXI/IEFyZSB0aGV5IGNoZWNraW5nIGZvciBzcGVjaWZpYyBiZWhhdmlvcnMsIGxpa2UgZW5jYXBzdWxhdGlvbiBvciBkZWNhcHN1bGF0aW9uIG9mIHRoZSB0cmFmZmljPyBPciBtYXliZSB0aGlzIGludm9sdmVzIG1hbmlwdWxhdGlvbiBvZiB0aGUgcm91dGluZyB0YWJsZXMgb3IgZm9yd2FyZGluZyBkYXRhIHN0cnVjdHVyZXM/CgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBDLXNwZWNpZmljIGVsZW1lbnRzOyBwb2ludGVycywgc3RydWN0cywgYW5kIGhvcGVmdWxseSBzb21lIGtlcm5lbC1sZXZlbCBhYnN0cmFjdGlvbnMgdG8ga2VlcCBpdCByZWFkYWJsZS4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyBrZXJuZWwgY29kZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGlmIHRoaXMgaW52b2x2ZXMgYWNjZXNzaW5nIHNoYXJlZCByZXNvdXJjZXMuIExvY2tpbmcgcHJpbWl0aXZlcyDigJMgc3BpbmxvY2tzLCBtdXRleGVzLCByZWFkLXdyaXRlIGxvY2tzIOKAkyB3aWxsIGJlIGNydWNpYWwuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyB0aHJlYWQtc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBkdWUgdG8gZXhjZXNzaXZlIGxvY2tpbmcuCgpUaGVuIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgYXJlIHRoZXkgZGVhbGluZyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBpbnZhbGlkIHNlZ21lbnQgbGlzdHMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnM/IEdvb2QgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LCBlc3BlY2lhbGx5IGluIG5ldHdvcmtpbmcgY29kZSwgdG8gcHJldmVudCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYW5kIGVuc3VyZSB0aGUgc3lzdGVtJiMzOTtzIHJvYnVzdG5lc3MuIEFueSB1c2Ugb2YgYHNrYmAgKHNvY2tldCBidWZmZXIpIG9wZXJhdGlvbnMgaXMgbGlrZWx5IGhlcmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBJdCBjb3VsZCBpbnZvbHZlIHRoZSBzZXR1cCBvZiBzb21lIGtpbmQgb2YgbG9jYWwgcG9saWN5IHRvIGZvcndhcmQgcGFja2V0cy4KCkVzc2VudGlhbGx5LCBJIGFtIGdvaW5nIHRvIGlkZW50aWZ5IHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHVzZWQgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgbWluZHNldCBvZiBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzODA6XHRcbjEzODE6XHRkcm9wOlxuMTM4MjpcdFx0a2ZyZWVfc2tiKHNrYik7XG4xMzgzOlx0XHRyZXR1cm4gZXJyO1xuMTM4NDpcdH1cbjEzODU6XHRcbjEzODY6XHRERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcbjEzODc6XHRcdC5iaF9sb2NrXHQ9IElOSVRfTE9DQUxfTE9DSyhiaF9sb2NrKSxcbjEzODg6XHR9O1xuMTM4OTpcdFxuMTM5MDpcdGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTM5MTpcdHtcbjEzOTI6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4xMzkzOlx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjEzOTQ6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbjEzOTU6XHRcbjEzOTY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3JoX3N0YXRlLVx1MDAzZWJoX2xvY2spO1xuMTM5NzpcdFx0aWYgKHVubGlrZWx5KHNyaCA9PSBOVUxMKSlcbjEzOTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTM5OTpcdFxuMTQwMDpcdFx0aWYgKHVubGlrZWx5KCFzcmhfc3RhdGUtXHUwMDNldmFsaWQpKSB7XG4xNDAxOlx0XHRcdGlmICgoc3JoX3N0YXRlLVx1MDAzZWhkcmxlbiBcdTAwMjYgNykgIT0gMClcbjE0MDI6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNDAzOlx0XG4xNDA0Olx0XHRcdHNyaC1cdTAwM2VoZHJsZW4gPSAodTgpKHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gXHUwMDNlXHUwMDNlIDMpO1xuMTQwNTpcdFx0XHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgKHNyaC1cdTAwM2VoZHJsZW4gJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDMsIHRydWUpKVxuMTQwNjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjE0MDc6XHRcbjE0MDg6XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjE0MDk6XHRcdH1cbjE0MTA6XHRcbjE0MTE6XHRcdHJldHVybiB0cnVlO1xuMTQxMjpcdH1cbjE0MTM6XHRcbjE0MTQ6XHRzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXG4xNDE1Olx0XHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4xNDE2Olx0e1xuMTQxNzpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xuMTQxODpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4xNDE5Olx0XHRpbnQgcmV0O1xuMTQyMDpcdFxuMTQyMTpcdFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcbjE0MjI6XHRcdGlmICghc3JoKSB7XG4xNDIzOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTQyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcdGFkdmFuY2VfbmV4dHNlZyhzcmgsIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpO1xuMTQyNzpcdFxuMTQyODpcdFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXG4xNDI5Olx0XHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcbjE0MzA6XHRcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXG4xNDMxOlx0XHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXG4xNDMyOlx0XHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxuMTQzMzpcdFx0ICovXG4xNDM0Olx0XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQzNTpcdFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuMTQzNjpcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbjE0Mzc6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuMTQzODpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjE0Mzk6XHRcbjE0NDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE0NDE6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjE0NDI6XHRcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXHUwMDNlYnBmLnByb2csIHNrYik7XG4xNDQzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0NDQ6XHRcbjE0NDU6XHRcdHN3aXRjaCAocmV0KSB7XG4xNDQ2Olx0XHRjYXNlIEJQRl9PSzpcbjE0NDc6XHRcdGNhc2UgQlBGX1JFRElSRUNUOlxuMTQ0ODpcdFx0XHRicmVhaztcbjE0NDk6XHRcdGNhc2UgQlBGX0RST1A6XG4xNDUwOlx0XHRcdGdvdG8gZHJvcDtcbjE0NTE6XHRcdGRlZmF1bHQ6XG4xNDUyOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDticGYtc2VnNmxvY2FsOiBJbGxlZ2FsIHJldHVybiB2YWx1ZSAldVxcblwmIzM0OywgcmV0KTtcbjE0NTM6XHRcdFx0Z290byBkcm9wO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4xNDU3Olx0XHRcdGdvdG8gZHJvcDtcbjE0NTg6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0NTk6XHRcbjE0NjA6XHRcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxuMTQ2MTpcdFx0XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XG4xNDYyOlx0XG4xNDYzOlx0XHRyZXR1cm4gZHN0X2lucHV0KHNrYik7XG4xNDY0Olx0XG4xNDY1Olx0ZHJvcDpcbjE0NjY6XHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0Njc6XHRcdGtmcmVlX3NrYihza2IpO1xuMTQ2ODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzcyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgYHNlZzZfZ2V0X3NyaGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBzZWUgKmV4YWN0bHkqIHdoYXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0YXJnZXRlZCBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgc2VnNl9nZXRfc3JoYC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYnVpbGRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGVsZW1lbnRzIGlzIGtleSBmb3IgbWUgdG8gdGhlbiBkZXRlcm1pbmUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdG8gc2VlIHdoZXJlIHRoZSBwb3RlbnRpYWwgZGVzaWduIGNob2ljZXMgaGF2ZSBiZWVuIG1hZGUsIGFzIHdlbGwgYXMgd2hlcmUgbXkgZm9jdXMgc2hvdWxkIGJlIGluIGV2YWx1YXRpbmcgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2dldF9zcmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2VnNi5oPTY3PWV4dGVybiBib29sIHNlZzZfdmFsaWRhdGVfc3JoKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBpbnQgbGVuLCBib29sIHJlZHVjZWQpO1xuaW5jbHVkZS9uZXQvc2VnNi5oOjY4OmV4dGVybiBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTc9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDIyLVxubmV0L2NvcmUvZmlsdGVyLmM6NzAyMzpcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xubmV0L2NvcmUvZmlsdGVyLmMtNzAyNC1cdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbi0tXG5uZXQvaXB2Ni9zZWc2LmM9MjY9Ym9vbCBzZWc2X3ZhbGlkYXRlX3NyaChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgaW50IGxlbiwgYm9vbCByZWR1Y2VkKVxuLS1cbm5ldC9pcHY2L3NlZzYuYy03OC1cbm5ldC9pcHY2L3NlZzYuYzo3OTpzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXG5uZXQvaXB2Ni9zZWc2LmMtODAte1xuLS1cbm5ldC9pcHY2L3NlZzYuYz0xMTI9dm9pZCBzZWc2X2ljbXBfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0KVxuLS1cbm5ldC9pcHY2L3NlZzYuYy0xMTctXHQvKiBVcGRhdGUgbmV0d29yayBoZWFkZXIgdG8gcG9pbnQgdG8gdGhlIGludm9raW5nIHBhY2tldFxubmV0L2lwdjYvc2VnNi5jOjExODpcdCAqIGluc2lkZSB0aGUgSUNNUCBwYWNrZXQsIHNvIHdlIGNhbiB1c2UgdGhlIHNlZzZfZ2V0X3NyaCgpXG5uZXQvaXB2Ni9zZWc2LmMtMTE5LVx0ICogaGVscGVyLlxuLS1cbm5ldC9pcHY2L3NlZzYuYy0xMjItXG5uZXQvaXB2Ni9zZWc2LmM6MTIzOlx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG5uZXQvaXB2Ni9zZWc2LmMtMTI0LVx0aWYgKCFzcmgpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjIwOlx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgSVA2X0ZIX0ZfU0tJUF9SSCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIxLVx0aWYgKCFzcmgpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzYtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM3Olx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM4LVx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIDApXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQ5ND1lbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MDU6c3RhdGljIGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNi17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTAtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzUxOlx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzUyLVx0c3Job2ZmID0gc3JoID8gKCh1bnNpZ25lZCBjaGFyICopc3JoIC0gc2tiLVx1MDAzZWRhdGEpIDogMDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NTM6XHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzU0LSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgc2VnNl9nZXRfc3JoYCBpbXBsZW1lbnRhdGlvbiwgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2VnNl9nZXRfc3JoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHB1bGxpbmcgdXAgdGhlIGBzZWc2X2dldF9zcmhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY2L3NlZzYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgYW5kIGhhbmRsZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgU1J2NiwgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWNrZXQgcHJvY2Vzc2luZywgc28gSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCBvcGVyYXRlcyBhdCBhIGxvdyBsZXZlbC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIHRoaW5ncyBsaWtlOiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgU1JIIHR5cGVzIChpZiBhbnkpLCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyByZXRyaWV2YWwsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHV0aWxpemVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBTUnY2IHN0YWNrLiBJJiMzOTttIGFsc28gaW50ZXJlc3RlZCBpbiBpdHMgZWZmaWNpZW5jeTsgaG93IGl0IGFjY2Vzc2VzIHRoZSBoZWFkZXIgZGV0YWlscyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIFNSdjYgcm91dGluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc1Olx0XG4gIDc2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNzc6XHR9XG4gIDc4Olx0XG4gIDc5Olx0c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxuICA4MDpcdHtcbiAgODE6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuICA4MjpcdFx0aW50IGxlbiwgc3Job2ZmID0gMDtcbiAgODM6XHRcbiAgODQ6XHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIFx1MDAyNmZsYWdzKSBcdTAwM2MgMClcbiAgODU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDg2Olx0XG4gIDg3Olx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzcmhvZmYgJiM0Mzsgc2l6ZW9mKCpzcmgpKSlcbiAgODg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDg5Olx0XG4gIDkwOlx0XHRzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG4gIDkxOlx0XG4gIDkyOlx0XHRsZW4gPSAoc3JoLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiAgOTM6XHRcbiAgOTQ6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyaG9mZiAmIzQzOyBsZW4pKVxuICA5NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgOTY6XHRcbiAgOTc6XHRcdC8qIG5vdGUgdGhhdCBwc2tiX21heV9wdWxsIG1heSBjaGFuZ2UgcG9pbnRlcnMgaW4gaGVhZGVyO1xuICA5ODpcdFx0ICogZm9yIHRoaXMgcmVhc29uIGl0IGlzIG5lY2Vzc2FyeSB0byByZWxvYWQgdGhlbSB3aGVuIG5lZWRlZC5cbiAgOTk6XHRcdCAqL1xuIDEwMDpcdFx0c3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzcmhvZmYpO1xuIDEwMTpcdFxuIDEwMjpcdFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgdHJ1ZSkpXG4gMTAzOlx0XHRcdHJldHVybiBOVUxMO1xuIDEwNDpcdFxuIDEwNTpcdFx0cmV0dXJuIHNyaDtcbiAxMDY6XHR9XG4gMTA3Olx0XG4gMTA4Olx0LyogRGV0ZXJtaW5lIGlmIGFuIElDTVAgaW52b2tpbmcgcGFja2V0IGNvbnRhaW5zIGEgc2VnbWVudCByb3V0aW5nXG4gMTA5Olx0ICogaGVhZGVyLiAgSWYgaXQgZG9lcywgZXh0cmFjdCB0aGUgb2Zmc2V0IHRvIHRoZSB0cnVlIGRlc3RpbmF0aW9uXG4gMTEwOlx0ICogYWRkcmVzcywgd2hpY2ggaXMgaW4gdGhlIGZpcnN0IHNlZ21lbnQgYWRkcmVzcy5cbiAxMTE6XHQgKi9cbiAxMTI6XHR2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpXG4gMTEzOlx0e1xuIDExNDpcdFx0X191MTYgbmV0d29ya19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlZzYgQlBGIFVwZGF0ZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcHJvYmxlbSB0aGlzIGFpbXMgdG8gc29sdmUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgc3RhdGUgd2l0aGluIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiBgc2VnNmAuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGlwdjZfZmluZF9oZHJgIHRvIGxvY2F0ZSB0aGUgU1JIIHdpdGhpbiBhIHBhY2tldCwgY2FsY3VsYXRpbmcgYW4gb2Zmc2V0LiBOb3cgdGhlIHBhdGNoIGludHJvZHVjZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBhbmQgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoZSBmaXJzdCBjaGFuZ2Ugc2ltcGxpZmllcyBTUkggcmV0cmlldmFsLCBhbmQgdGhlIHNlY29uZCBtdXN0IGJlIHNvbWUgc29ydCBvZiBwb2ludGVyIHJlLWNhbGN1bGF0aW9uOyBtb3N0IGxpa2VseSBmb3Igd2hlbiBhbiBza2IgaXMgYWRqdXN0ZWQuIFRoZSBjb25kaXRpb25hbCBoYXMgYmVlbiBzaW1wbGlmaWVkOiB3aGVyZSBiZWZvcmUgdGhlcmUgd2FzIGEgbmVnYXRpdmUgcmV0dXJuIGZyb20gYGlwdjZfZmluZF9oZHJgIHRoaXMgaXMgbm93IGhhbmRsZWQgYnkgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2VnNl9nZXRfc3JoKClgLgoKVGhlIG5leHQgcGFydCBvZiB0aGUgcGF0Y2ggdGFja2xlcyB0aGUgc2l0dWF0aW9uIGluIHdoaWNoIHdlIGFkanVzdCB0aGUgSVB2NiBoZWFkZXIsIGxpa2Ugd2hlbiBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCBvciBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYCBhY3Rpb25zIGFyZSB0YWtlbi4gUHJldmlvdXNseSBpdCBwdWxsZWQgdGhlIGhlYWRlci4gTm93LCB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHdpdGggYHBza2JfbWF5X3B1bGxgIHRvIHNlZSBpZiBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIHB1bGwsIGFuZCBpZiBub3Qgc2V0cyBgc3JoYCB0byBudWxsIGFuZCBjYWxscyBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYC4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQgZm9yIGF2b2lkaW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIEFmdGVyIGBwc2tiX21heV9wdWxsYCBzdWNjZWVkcywgdGhlcmUmIzM5O3MgYSBwdWxsIHdpdGggYF9fc2tiX3B1bGxgIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG5ldHdvcmsgaGVhZGVyLiBOb3RhYmx5LCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agc2VlbXMgdG8gYmUgY2FsbGVkICphZnRlciogaGVhZGVyIGFkanVzdG1lbnRzIGluIGJvdGggc2NlbmFyaW9zLgoKVGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gc2V2ZXJhbCBjYXNlcyBhZnRlciBTUkggcHJvY2Vzc2luZywgYW5kIGFmdGVyIHRoZSBhY3Rpb25zIHdoaWNoIGFkanVzdCB0aGUgcGFja2V0IGhlYWRlcnMuIFRoaXMgc3VnZ2VzdHMgdGhlIGludGVudCBpcyB0byB1cGRhdGUgdGhlIFNSSCBzdGF0ZSAqYWZ0ZXIqIHBvdGVudGlhbGx5IG1vZGlmeWluZyB0aGUgcGFja2V0IHN0cnVjdHVyZS4gQ3JpdGljYWxseSwgdGhlcmUmIzM5O3Mgbm93IGFuIHVwZGF0ZSB0byB0aGUgY2FsbGluZyBjb252ZW50aW9uIG9mIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAsIHdoaWNoIGRvZXMgKm5vdCogaGFwcGVuIGluIHRoZSBlcnJvciBoYW5kbGluZyBjb2RlLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgcGF0Y2guIFRoaXMgaXMgY2xlYXJseSBhIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgU1JIIGluZm9ybWF0aW9uLiBJJiMzOTtkIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNgIGFuZCBgYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhgIHRvIHVuZGVyc3RhbmQgaG93IGBzcmhfc3RhdGVgIGlzIGJlaW5nICp1c2VkKiBiZXlvbmQganVzdCB0aGUgdXBkYXRlLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSB0cnVlIGtleSB0byBob3cgdGhlIHN0YXRlIGlzIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBieSB0aGUgQlBGIHByb2dyYW0uCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIGEgY2xlYW4tdXAsIG9wdGltaXphdGlvbiwgYW5kIGJ1Z2ZpeCByZWxhdGVkIHRvIFNSSCBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBjb250ZXh0IG9mIEJQRi1iYXNlZCBTZWdtZW50IFJvdXRpbmcsIGZvY3VzaW5nIG9uIGVuc3VyaW5nIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGF2b2lkaW5nIHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMuIFRoZSBhZGRpdGlvbiBvZiBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agc2VlbXMgdG8gYmUgdGhlIGxpbmNocGluIHRvIG1haW50YWluaW5nIGNvcnJlY3QgcG9pbnRlciB2YWx1ZXMgYWZ0ZXIgdGhlIGBza2JgIGlzIGFkanVzdGVkLCBhcyB3ZWxsIGFzIGEgbW9yZSByb2J1c3QgY2hlY2sgdG8gZGV0ZWN0IHRoZSBhYnNlbmNlIG9mIGFuIFNSSC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk3MDpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbjY5NzE6XHR9O1xuNjk3MjpcdFxuNjk3MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxuNjk3NDpcdEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuNjk3NTpcdFx0ICAgY29uc3Qgdm9pZCAqLCBmcm9tLCB1MzIsIGxlbilcbjY5NzY6XHR7XG42OTc3Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuNjk3ODpcdFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG42OTc5Olx0XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG42OTgwOlx0XHR2b2lkICpzcmhfdGx2cywgKnNyaF9lbmQsICpwdHI7XG42OTgxOlx0XHRpbnQgc3Job2ZmID0gMDtcbjY5ODI6XHRcbjY5ODM6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3JoX3N0YXRlLVx1MDAzZWJoX2xvY2spO1xuNjk4NDpcdFx0aWYgKHNyaCA9PSBOVUxMKVxuNjk4NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5ODY6XHRcbjY5ODc6XHRcdHNyaF90bHZzID0gKHZvaWQgKikoKGNoYXIgKilzcmggJiM0MzsgKChzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudCAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgNCkpO1xuNjk4ODpcdFx0c3JoX2VuZCA9ICh2b2lkICopKChjaGFyICopc3JoICYjNDM7IHNpemVvZigqc3JoKSAmIzQzOyBzcmhfc3RhdGUtXHUwMDNlaGRybGVuKTtcbjY5ODk6XHRcbjY5OTA6XHRcdHB0ciA9IHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldDtcbjY5OTE6XHRcdGlmIChwdHIgXHUwMDNlPSBzcmhfdGx2cyBcdTAwMjZcdTAwMjYgcHRyICYjNDM7IGxlbiBcdTAwM2M9IHNyaF9lbmQpXG42OTkyOlx0XHRcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuNjk5MzpcdFx0ZWxzZSBpZiAocHRyIFx1MDAzYyAodm9pZCAqKVx1MDAyNnNyaC1cdTAwM2VmbGFncyB8fFxuNjk5NDpcdFx0XHQgcHRyICYjNDM7IGxlbiBcdTAwM2UgKHZvaWQgKilcdTAwMjZzcmgtXHUwMDNlc2VnbWVudHMpXG42OTk1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuNjk5NjpcdFxuNjk5NzpcdFx0aWYgKHVubGlrZWx5KGJwZl90cnlfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCAmIzQzOyBsZW4pKSlcbjY5OTg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG42OTk5Olx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwMDA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDAxOlx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzcmhvZmYpO1xuNzAwMjpcdFxuNzAwMzpcdFx0bWVtY3B5KHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCwgZnJvbSwgbGVuKTtcbjcwMDQ6XHRcdHJldHVybiAwO1xuNzAwNTpcdH1cbjcwMDY6XHRcbjcwMDc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcbjcwMDg6XHRcdC5mdW5jXHRcdD0gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLFxuNzAwOTpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuNzAxMDpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuNzAxMTpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbjcwMTI6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuNzAxMzpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG43MDE0Olx0XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRVxuNzAxNTpcdH07XG43MDE2Olx0XG43MDE3Olx0c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjcwMTg6XHR7XG43MDE5Olx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBjaXJjbGluZyBiYWNrIHRvIGBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaGAuIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBvbmUgc3BlY2lmaWNhbGx5LiBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgTFdUIGluZnJhc3RydWN0dXJlLCBidXQgdGhpcyBmdW5jdGlvbiYjMzk7cyBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgdHVubmVsIGZyYW1ld29yay4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBtYW5pcHVsYXRpbmcgdGhlIFNSSCB3aXRoaW4gYSBCUEYgcHJvZ3JhbSBvZmZlcnMgc2lnbmlmaWNhbnQgcG93ZXIgYnV0IGFsc28gaW50cm9kdWNlcyBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGluIHRlcm1zIG9mIHBhY2tldCBtb2RpZmljYXRpb24gYW5kIGhlYWRlciB2YWxpZGl0eS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgdXNlIGNhc2VzIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgZm9yPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgaXQgaW4gaGFuZGxpbmcgdmFyaW91cyBTUkggY29uZmlndXJhdGlvbnMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhcGF0aCBhbmQgZW5zdXJlIGl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbnRlbmRlZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byBwb3RlbnRpYWwgbGltaXRhdGlvbnMgYW5kIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIHNlY3VyaXR5IGhhcmRlbmluZyBtaWdodCBiZSBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcxMDg6XHRCUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuNzEwOTpcdFx0ICAgczMyLCBsZW4pXG43MTEwOlx0e1xuNzExMTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcxMTI6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzExMzpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuNzExNDpcdFx0dm9pZCAqc3JoX2VuZCwgKnNyaF90bHZzLCAqcHRyO1xuNzExNTpcdFx0c3RydWN0IGlwdjZoZHIgKmhkcjtcbjcxMTY6XHRcdGludCBzcmhvZmYgPSAwO1xuNzExNzpcdFx0aW50IHJldDtcbjcxMTg6XHRcbjcxMTk6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3JoX3N0YXRlLVx1MDAzZWJoX2xvY2spO1xuNzEyMDpcdFx0aWYgKHVubGlrZWx5KHNyaCA9PSBOVUxMKSlcbjcxMjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MTIyOlx0XG43MTIzOlx0XHRzcmhfdGx2cyA9ICh2b2lkICopKCh1bnNpZ25lZCBjaGFyICopc3JoICYjNDM7IHNpemVvZigqc3JoKSAmIzQzO1xuNzEyNDpcdFx0XHRcdCgoc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDQpKTtcbjcxMjU6XHRcdHNyaF9lbmQgPSAodm9pZCAqKSgodW5zaWduZWQgY2hhciAqKXNyaCAmIzQzOyBzaXplb2YoKnNyaCkgJiM0MztcbjcxMjY6XHRcdFx0XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuKTtcbjcxMjc6XHRcdHB0ciA9IHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldDtcbjcxMjg6XHRcbjcxMjk6XHRcdGlmICh1bmxpa2VseShwdHIgXHUwMDNjIHNyaF90bHZzIHx8IHB0ciBcdTAwM2Ugc3JoX2VuZCkpXG43MTMwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNzEzMTpcdFx0aWYgKHVubGlrZWx5KGxlbiBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgKHZvaWQgKikoKGNoYXIgKilwdHIgLSBsZW4pIFx1MDAzZSBzcmhfZW5kKSlcbjcxMzI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG43MTMzOlx0XG43MTM0Olx0XHRpZiAobGVuIFx1MDAzZSAwKSB7XG43MTM1Olx0XHRcdHJldCA9IHNrYl9jb3dfaGVhZChza2IsIGxlbik7XG43MTM2Olx0XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuNzEzNzpcdFx0XHRcdHJldHVybiByZXQ7XG43MTM4Olx0XG43MTM5Olx0XHRcdHJldCA9IGJwZl9za2JfbmV0X2hkcl9wdXNoKHNrYiwgb2Zmc2V0LCBsZW4pO1xuNzE0MDpcdFx0fSBlbHNlIHtcbjcxNDE6XHRcdFx0cmV0ID0gYnBmX3NrYl9uZXRfaGRyX3BvcChza2IsIG9mZnNldCwgLTEgKiBsZW4pO1xuNzE0MjpcdFx0fVxuNzE0MzpcdFxuNzE0NDpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuNzE0NTpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG43MTQ2Olx0XHRcdHJldHVybiByZXQ7XG43MTQ3Olx0XG43MTQ4Olx0XHRoZHIgPSAoc3RydWN0IGlwdjZoZHIgKilza2ItXHUwMDNlZGF0YTtcbjcxNDk6XHRcdGhkci1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbjcxNTA6XHRcbjcxNTE6XHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuNzE1MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcxNTM6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MTU0Olx0XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuICYjNDM7PSBsZW47XG43MTU1Olx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSBmYWxzZTtcbjcxNTY6XHRcdHJldHVybiAwO1xuNzE1NzpcdH1cbjcxNTg6XHRcbjcxNTk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuNzE2MDpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCxcbjcxNjE6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjcxNjI6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjcxNjM6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG43MTY0Olx0XHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbjcxNjU6XHRcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuNzE2NjpcdH07XG43MTY3Olx0I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBGaXggaW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIFRoZSBwcmltYXJ5IGZvY3VzIHNlZW1zIHRvIGJlIHNhZmVndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzdGFsZSBkYXRhIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgd2FzIGdvaW5nIHdyb25nLCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgY2hhbmdlcy4KCkluaXRpYWxseSwgd2l0aCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAsIHRoZSBjb2RlIHdhcyBwdWxsaW5nIGFuIGlubmVyIElQdjYgaGVhZGVyIHdpdGggYHBza2JfcHVsbGAuIEhvd2V2ZXIsIGEgY3J1Y2lhbCBvdmVyc2lnaHQgd2FzIHRoYXQgaXQgKndhc24mIzM5O3QqIHZlcmlmeWluZyBpZiB0aGUgaGVhZGVyIHdhcyAqYWN0dWFsbHkqIHByZXNlbnQgd2l0aGluIHRoZSBsaW5lYXIgYnVmZmVyIGFmdGVyIHRoZSBgaGRyb2ZmYCBvZmZzZXQgd2l0aCBgcHNrYl9tYXlfcHVsbGAsIHNvIHRoZXJlIGNvdWxkIGJlIGEgZGF0YSBjb3B5IGFuZCBhbGxvY2F0aW9uIHRvIHB1bGwgaXQgaW4uIEZ1cnRoZXJtb3JlLCB0aGVyZSB3YXMgYW4gaXNzdWUgd2hlcmUsIGlmIGBwc2tiX21heV9wdWxsYCBmYWlsZWQgb3IgcmVhbGxvY2F0ZWQgdGhlIGBza2JgIGhlYWQsIHRoZSBgc3JoX3N0YXRlYCBvciB0aGUgcmVzdWx0cyBvZiBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agd291bGQgaGF2ZSBwb2ludGVkIHRvIHN0YWxlIG1lbW9yeS4KClNpbWlsYXJseSwgaW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgdGhlIGNvZGUgdXNlZCBgaXB2Nl9maW5kX2hkcmAgdG8gbG9jYXRlIHRoZSBTUkggYnV0IGRpZCBub3QgYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBgaXB2Nl9maW5kX2hkcmAgZG9lc24mIzM5O3QgdmFsaWRhdGUgdGhlIFNSSCYjMzk7cyBwcmVzZW5jZSBpbiB0aGUgbGluZWFyIHNrYiBkYXRhLCBub3IgaWYgdGhlIFNSSCBpcyB2YWxpZCEgSXQgd2FzIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgU1JIIHRocm91Z2ggYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzcmhvZmZgIHdoaWNoIGNvdWxkIGVhc2lseSBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpZiB0aGUgU1JIIHdhc24mIzM5O3QgcHJvcGVybHkgcHVsbGVkIG9yIHZhbGlkYXRlZC4gVGhlIGBzZWc2X2dldF9zcmhgIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgdGhpcyB2aWEgYHBza2JfbWF5X3B1bGxgIGFuZCBmdWxsIFNSSCB2YWxpZGF0aW9uLgoKSSBhbHNvIHNlZSB0aGF0IGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCBpcyBub3cgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBpbiBzb21lIGNvbnRleHRzIChsaWtlIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZgIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYCksIGFuZCBpcyBhbHNvIGNhbGxlZCBhZnRlciBjYWxscyB0aGF0IHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgc2tiLCBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgdG8gZW5zdXJlIGBzcmhfc3RhdGVgIGlzIHVwZGF0ZWQuCgpTbywgdGhlIGZpeCBpbnRyb2R1Y2VzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgdG8gdmFsaWRhdGUgaGVhZGVyIHByZXNlbmNlIGFuZCAqdGhlbiogdGhlIHVzZSBvZiBgc2VnNl9nZXRfc3JoYCB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgU1JILCB0aGVyZWJ5IHJlZHVjaW5nIHRoZSBjaGFuY2VzIG9mIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBhbHNvIGluY29ycG9yYXRlcyBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYCBhZnRlciBhbnkgcG90ZW50aWFsIGBza2JgIHJlYWxsb2NhdGlvbnMgdHJpZ2dlcmVkIGJ5IGBwc2tiX21heV9wdWxsYC4gVGhlc2UgcG9pbnRzIGFyZSBrZXkuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBtZW1vcnkgc2FmZXR5LiBUaGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBydW4gaXQgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipObyB1c2VyLXNwYWNlIGRhdGEgbGVha3MuKiogVGhpcyBwYXRjaCBhdm9pZHMgYW55IGNvcHktdG8tdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMgb3IgaW5mby1sZWFrcywgc28gd2UgY2FuIGNyb3NzIHRoYXQgb25lIG9mZi4KMi4gICoqTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4qKiBUaGUgYHNyaGAgYW5kIGBzcmhfc3RhdGVgIHN0cnVjdCBmaWVsZHMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIGBoZHJvZmZgIGlzIGFzc2lnbmVkIGFuZCBkZWZpbmVkLiBTbyB0aGF0JiMzOTtzIHNhZmUuCjMuICAqKk5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24uKiogTm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkLCB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4uCjQuICAqKk5vIGJvdW5kcyBjaGVjayBpc3N1ZXMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuKiogVGhlIGZpeCBhY3R1YWxseSBhZGRzICpzdHJpY3RlciogY2hlY2tzLCBsaWtlIGBwc2tiX21heV9wdWxsYCBhbmQgYHNlZzZfZ2V0X3NyaGAsIGVuc3VyaW5nIHRoYXQgc2tiIGRhdGEgcG9pbnRlcnMgYXJlIHVwZGF0ZWQgYWZ0ZXIgcmVhbGxvY2F0aW9ucy4gVGhpcyBpcyBhY3R1YWxseSAqaW1wcm92aW5nKiBib3VuZHMgY2hlY2tpbmcuCgpTbywgYmFzZWQgb24gdGhpcywgS01TQU4gaXNuJiMzOTt0IHdhcnJhbnRlZC4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzdGFsZSBwb2ludGVyIGlzc3VlcyBkdWUgdG8gYHBza2JfcHVsbGAgYW5kIGBwc2tiX21heV9wdWxsYCDigJMgY29tbW9uIEtBU0FOIHRlcnJpdG9yeS4gS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVzdWx0aW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHJldmlzaXQgd2hhdCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYCBkb2VzIGV4YWN0bHkuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnksIGFuZCBjb25maXJtIGl0IGhhbmRsZXMgcmVjb21wdXRlZCBgc2tiYCBoZWFkZXIgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYz01Mz1uZXRraXRfcnVuKGNvbnN0IHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTU5LVx0YnBmX21wcm9nX2ZvcmVhY2hfcHJvZyhlbnRyeSwgZnAsIHByb2cpIHtcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjYwOlx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5kcml2ZXJzL25ldC9uZXRraXQuYy02MS1cdFx0cmV0ID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD05NDE9c3RhdGljIGlubGluZSB2b2lkIGJwZl9uZXRfY3R4X2dldF9hbGxfdXNlZF9mbHVzaF9saXN0cyhzdHJ1Y3QgbGlzdF9oZWFkICoqbGhfbWFwLFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTczLSAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo5NzQ6c3RhdGljIGlubGluZSB2b2lkIGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTc1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTk4Mz1zdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ19ydW5fZGF0YV9wb2ludGVycyhcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTk5My1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTk0Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05OTUtXHRyZXMgPSBicGZfcHJvZ19ydW4ocHJvZywgc2tiKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEwMDItXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEwMDM6LyogU2ltaWxhciB0byBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKCksIGV4Y2VwdCB0aGF0IHNhdmUgb3JnaW5hbFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMDA0LSAqIGRhdGEgaW4gY2ItXHUwMDNlZGF0YSBhbmQgY2ItXHUwMDNlbWV0YV9kYXRhIGZvciByZXN0b3JlLlxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTExOTgtXHRpZiAoaXNfZGlyZWN0X3BrdF9hY2Nlc3MpXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTE5OTpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEyMDAtXG4tLVxubmV0L2NvcmUvZGV2LmM9NDQ5Mj10Y3hfcnVuKGNvbnN0IHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTQ1MDEtXHRicGZfbXByb2dfZm9yZWFjaF9wcm9nKGVudHJ5LCBmcCwgcHJvZykge1xubmV0L2NvcmUvZGV2LmM6NDUwMjpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZGV2LmMtNDUwMy1cdFx0cmV0ID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTY5Mj1zdGF0aWMgaW5saW5lIGludCBicGZfdHJ5X21ha2Vfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xNjk2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTY5NzpcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTE2OTgtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTMyOTg9QlBGX0NBTExfMyhicGZfc2tiX3ZsYW5fcHVzaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHZsYW5fcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzMxMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjMzMTI6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0zMzEzLVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zMzI1PUJQRl9DQUxMXzEoYnBmX3NrYl92bGFuX3BvcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTMzMzItXG5uZXQvY29yZS9maWx0ZXIuYzozMzMzOlx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtMzMzNC1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzQ5ND1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzUxOS1cdHJldCA9IGJwZl9za2JfcHJvdG9feGxhdChza2IsIHByb3RvKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjM1MjA6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0zNTIxLVx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzctXG5uZXQvY29yZS9maWx0ZXIuYzozOTM4Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtMzkzOS1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDAyOT1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzMtXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM0Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDAzNS1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDA5Nj1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX2hlYWQsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBoZWFkX3Jvb20sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDEwMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQxMDE6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy00MTAyLVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02ODgwPXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MDMtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTA0Olx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjkwNS1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjMtXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMjQ6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy03MDI1LVx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDMzPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNjQtXHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG5uZXQvY29yZS9maWx0ZXIuYzo3MDY1Olx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNjYtXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDg9QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTQzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNDUtXHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmM9Mzk9c3RhdGljIGludCBydW5fbHd0X2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2x3dF9wcm9nICpsd3QsXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTQ5LVx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXHUwMDI2X19icGZfbmV0X2N0eCk7XG5uZXQvY29yZS9sd3RfYnBmLmM6NTA6XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG5uZXQvY29yZS9sd3RfYnBmLmMtNTEtXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihsd3QtXHUwMDNlcHJvZywgc2tiKTtcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmM9NjA1PWludCBicGZfbHd0X3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTY1Ny1cdG1lbWNweShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaGRyLCBsZW4pO1xubmV0L2NvcmUvbHd0X2JwZi5jOjY1ODpcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9jb3JlL2x3dF9icGYuYy02NTktXHRza2JfY2xlYXJfaGFzaChza2IpO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ0MC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDQxOlx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDItXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVx1MDAzZWJwZi5wcm9nLCBza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM0MAoJCQkJCQkJb3V0cHV0OiAzMjMKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgZUJQRiBEYXRhIFBvaW50ZXIgSGFuZGxpbmcqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gSXQgc2VlbXMgbGlrZSB0aGUgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGtlZXBpbmcgZUJQRiBwcm9ncmFtcyBzYWZlIHdoZW4gdGhleSYjMzk7cmUgYWNjZXNzaW5nIHBhY2tldCBkYXRhIGRpcmVjdGx5IHZpYSBgY2ItJmd0O2RhdGFgIGFuZCBgY2ItJmd0O2RhdGFfZW5kYC4gVGhlc2UgcG9pbnRlcnMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIHBhY2tldCBkaXJlY3QgYWNjZXNzIHdpdGhpbiBlQlBGIHByb2dyYW1zLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gdGhlIHBhY2tldCBidWZmZXIgKGBza2JgKSBnZXRzIG1hbmlwdWxhdGVkLCBzYXkgd2l0aCBzb21ldGhpbmcgbGlrZSBhIGBwc2tiX21heV9wdWxsYCBvcGVyYXRpb24gKGFzIHNlZW4gaW4gYHNlZzZfZ2V0X3NyaGApLCB0aGUgdW5kZXJseWluZyBtZW1vcnkgY2FuIHNoaWZ0IGFyb3VuZC4gSWYgd2UgKmRvbiYjMzk7dCogdXBkYXRlIHRob3NlIGRhdGEgcG9pbnRlcnMgd2l0aCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2AgaW4gdGhlc2Ugc2l0dWF0aW9ucywgZUJQRiBwcm9ncmFtcyBvciB0aGVpciBoZWxwZXIgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSByZWFkaW5nIG9yIHdyaXRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgbG9jYXRpb25zLiBUaGlzIGxlYWRzIGRpcmVjdGx5IHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIOKAkyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJJiMzOTt2ZSByZWFkLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBsaWtlIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHNvbGVseSBhYm91dCAqcHJldmVudGluZyogbWVtb3J5IGVycm9ycyBpbiB0aGUgZmlyc3QgcGxhY2UsIGVuc3VyaW5nIHRoYXQgZUJQRiBwcm9ncmFtcyBhcmUgb3BlcmF0aW5nIHdpdGggdmFsaWQgZGF0YSBwb2ludGVycy4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTt2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHRvb2wuIEkgbmVlZCB0bzoKCjEuICBDYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wganVzdCBvbmNlLgoyLiAgUHJvdmlkZSB0aGUgY29udHJhc3QgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uCjMuICBLZWVwIHRoZSBvdXRwdXQgY2xlYXIgYW5kIGRldGFpbGVkLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTttIHJlYWR5IHRvIG1ha2UgdGhlIHRvb2wgY2FsbCBhbmQgZG9jdW1lbnQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgbWFudWFsIFNSSCBsb29rdXBzIHdpdGggYHNlZzZfZ2V0X3NyaCgpYCAod2hpY2ggcGVyZm9ybXMgcHJvcGVyIGBwc2tiX21heV9wdWxsYCBhbmQgdmFsaWRhdGVzIHRoZSBTUkgpLCBlbnN1cmVzIEJQRiBwYWNrZXQgZGF0YSBwb2ludGVycyAoYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgKSBhcmUgcmVjYWxjdWxhdGVkIHdoZW4gc2tiIGxpbmVhciBidWZmZXJzIG1heSBiZSByZWFsbG9jYXRlZCBkdXJpbmcgaGVhZGVyIHB1bGxzLCBhbmQgYWRkcyBtaXNzaW5nIGJvdW5kcyB2YWxpZGF0aW9uIChgcHNrYl9tYXlfcHVsbGApIGJlZm9yZSBwdWxsaW5nIElQdjYgaGVhZGVycy5cblxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXG5cblRoZSBwYXRjaCBkb2VzIG5vdDpcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cbjIuIEV4cG9zZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLlxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXG5cblRoZSBidWdzIGFuZCByaXNrcyBhZGRyZXNzZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgYW5kIHVzZS1hZnRlci1mcmVlL3N0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGNhdXNlZCBieSBza2IgYnVmZmVyIHJlYWxsb2NhdGlvbiBvciBtaXNzaW5nIGxpbmVhciBidWZmZXIgY2hlY2tzLiBUaGVzZSBmYWlsdXJlIG1vZGVzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoYW5kIFVCIHNhbml0aXplcnMpLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3Q6XG4xLiBBbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMuXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cbjMuIEludHJvZHVjZSBicmFuY2hpbmcgb3IgY29udHJvbCBmbG93IHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG40LiBNb2RpZnkgbGVuZ3RocyBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjQ3OjQ4LjQ0MTgzOTA3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjgzODA1OTUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJzZWc2X2JwZl9oYXNfdmFsaWRfc3JoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGZ1bmN0aW9ucyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCByZXBsYWNlcyBtYW51YWwgU1JIIGxvb2t1cHMgd2l0aCBgc2VnNl9nZXRfc3JoKClgICh3aGljaCBwZXJmb3JtcyBwcm9wZXIgYHBza2JfbWF5X3B1bGxgIGFuZCB2YWxpZGF0ZXMgdGhlIFNSSCksIGVuc3VyZXMgQlBGIHBhY2tldCBkYXRhIHBvaW50ZXJzIChgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2ApIGFyZSByZWNhbGN1bGF0ZWQgd2hlbiBza2IgbGluZWFyIGJ1ZmZlcnMgbWF5IGJlIHJlYWxsb2NhdGVkIGR1cmluZyBoZWFkZXIgcHVsbHMsIGFuZCBhZGRzIG1pc3NpbmcgYm91bmRzIHZhbGlkYXRpb24gKGBwc2tiX21heV9wdWxsYCkgYmVmb3JlIHB1bGxpbmcgSVB2NiBoZWFkZXJzLlxcblxcblRoZSBidWdzIGFuZCByaXNrcyBhZGRyZXNzZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgYW5kIHVzZS1hZnRlci1mcmVlL3N0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGNhdXNlZCBieSBza2IgYnVmZmVyIHJlYWxsb2NhdGlvbiBvciBtaXNzaW5nIGxpbmVhciBidWZmZXIgY2hlY2tzLiBUaGVzZSBmYWlsdXJlIG1vZGVzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoYW5kIFVCIHNhbml0aXplcnMpLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdDpcXG4xLiBBbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMuXFxuMi4gRXhwb3NlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMuXFxuMy4gSW50cm9kdWNlIGJyYW5jaGluZyBvciBjb250cm9sIGZsb3cgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG40LiBNb2RpZnkgbGVuZ3RocyBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBTUkggc3RhdGUgaGFuZGxpbmcgYW5kIHNrYiBsaW5lYXIgYnVmZmVyIHZhbGlkYXRpb24gKHBza2JfbWF5X3B1bGwgaW5zdGVhZCBvZiBwc2tiX3B1bGwpIGluIHRoZSBTUnY2IEJQRiBoZWxwZXIgYnBmX2x3dF9zZWc2X2FjdGlvbi4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBhbmQgQlBGIHBhY2tldCBoYW5kbGluZyBwYXRocyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDc6NDguNDQxODQ0OTIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI2MDY3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3Yzg4NjBlMzMyMzRiYzY4ZDkxZTVlMmEyM2ZmY2M1MTA4NzRjN2VkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDc6NDc6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFkZDNhNjg1ZDFiODkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC03MDE4LDE1ICs3MDE4LDE2IEBAIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG4gXFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4tXFx0aW50IHNyaG9mZiA9IDA7XFxuK1xcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiBcXG4tXFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXFx1MDAzZWRhdGEgKyBzcmhvZmYpO1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4tXFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuLVxcdH1cXG4rXFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuK1xcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4rXFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuK1xcdGlmICghc3JoKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuK1xcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiB9XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG5AQCAtNzA1OSwxNSArNzA2MCwxOCBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFxuIFxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4tXFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxcbitcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xcbitcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuK1xcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXHRcXHR9XFxuK1xcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbiBcXG4gXFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XFxuIFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiBcXG4tXFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbiBcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbiBcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG5AQCAtNzA3NSw4ICs3MDc5LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4gXFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuLVxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbitcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XFxuQEAgLTcwODQsOCArNzA4Nyw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuIFxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuLVxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbitcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDc6NDguOTc1NDE3NzIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MzM1MzY5Mjg4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCIsXG4gICAgXCJzZWc2X2JwZl9oYXNfdmFsaWRfc3JoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgU1JIIHN0YXRlIGhhbmRsaW5nIGFuZCBza2IgbGluZWFyIGJ1ZmZlciB2YWxpZGF0aW9uIChwc2tiX21heV9wdWxsIGluc3RlYWQgb2YgcHNrYl9wdWxsKSBpbiB0aGUgU1J2NiBCUEYgaGVscGVyIGJwZl9sd3Rfc2VnNl9hY3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgYW5kIEJQRiBwYWNrZXQgaGFuZGxpbmcgcGF0aHMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjODg2MGUzMzIzNGJjNjhkOTFlNWUyYTIzZmZjYzUxMDg3NGM3ZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjQ3OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uMWRkM2E2ODVkMWI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTgsMTUgKzcwMTgsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbitcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFxuLVx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXHUwMDNjIDApIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSArIHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbitcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuK1x0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbitcdGlmICghc3JoKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbitcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4gfVxuIFxuIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTcwNTksMTUgKzcwNjAsMTggQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXG4gXHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbi1cdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuK1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG4gXG4gXHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuIFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIFxuLVx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4gXHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbkBAIC03MDc1LDggKzcwNzksNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XG5AQCAtNzA4NCw4ICs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVmYXVsdDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjQ3OjQ4Ljk3NTQyMDAyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3MDM1Nzg2NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBpZGVudGlmaWVkOiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCBgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCAuLi4pYCDigJMgdGhhdCBgbHd0X3NlZzZfYWN0aW9uYCBjYWxsIHJhaXNlcyBteSBleWVicm93cyBhIGJpdDsgaXQgbGlrZWx5IHRvdWNoZXMgbG93LWxldmVsIElQdjYgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2Nikgb3IgSVB2NiBMaWdodHdlaWdodCBUdW5uZWxpbmcuXG5cbk15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJJ2xsIHJlYWNoIGZvciBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYCBvciwgcHJvYmFibHkgcXVpY2tlciBhbmQgbW9yZSBlZmZpY2llbnQgZm9yIHRoaXMsIEkgd2lsbCB1c2UgYGdyZXBwZXJgLiBJIG5lZWQgdG8gZW5zdXJlIEkgY2hlY2sgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zIHRvbyDigJMgZXNwZWNpYWxseSB0aG9zZSB0b3VjaGluZyBJUHY2LCBTRUc2L1NSdjYsIGFuZCwgaW1wb3J0YW50bHksIEJQRiBoZWxwZXJzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuXG5UaGVuIEknbGwgZm9jdXMgdGhlIGBncmVwcGVyYCBxdWVyaWVzLiBJJ2xsIGRyaWxsIGRvd24gb24gZWl0aGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBvciBgc2VnNl9icGZfc3JoX3N0YXRlc2AgYmVjYXVzZSB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGlzIHdpbGwgcXVpY2tseSByZXZlYWwgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHN0YXRlcyBhcmUgaW52b2x2ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGhhbmRsZSBvbiB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo0OToyNi4wMTEyMDk1OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjUyMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDMzOkJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzQtXFx0ICAgdTMyLCBhY3Rpb24sIHZvaWQgKiwgcGFyYW0sIHUzMiwgcGFyYW1fbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDk5OlxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfYWN0aW9uLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMDAtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDc9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA1My1cXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X2FjdGlvbjpcXG5uZXQvY29yZS9maWx0ZXIuYzo5MDU0OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy05MDU1LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWRqdXN0X3NyaDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDk6MjYuNTE5NDcwOTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc4MzU2NDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQlBGIGFuZCBTUnY2IEludGVncmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSdjYpIGFyZSBoYW5kbGVkIHdpdGhpbiBCUEYuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIG9yIEtjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHRoZWlyIGluY2x1c2lvbiBvciBhY3RpdmF0aW9uLiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEkgc3VzcGVjdCB0aGF0IHNpbmNlIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgd2l0aGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AtLUknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA3MDAwLiBUaGF0J3MgdXN1YWxseSB0aGUgaGVhcnQgb2YgdGhlIEJQRiBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGFzcGVjdHMgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo0OTozMS4zMDMwMzcwNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjk5MDpcXHRcXHRwdHIgPSBza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQ7XFxuNjk5MTpcXHRcXHRpZiAocHRyIFxcdTAwM2U9IHNyaF90bHZzIFxcdTAwMjZcXHUwMDI2IHB0ciArIGxlbiBcXHUwMDNjPSBzcmhfZW5kKVxcbjY5OTI6XFx0XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbjY5OTM6XFx0XFx0ZWxzZSBpZiAocHRyIFxcdTAwM2MgKHZvaWQgKilcXHUwMDI2c3JoLVxcdTAwM2VmbGFncyB8fFxcbjY5OTQ6XFx0XFx0XFx0IHB0ciArIGxlbiBcXHUwMDNlICh2b2lkICopXFx1MDAyNnNyaC1cXHUwMDNlc2VnbWVudHMpXFxuNjk5NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0aWYgKHVubGlrZWx5KGJwZl90cnlfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbikpKVxcbjY5OTg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNjk5OTpcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwMDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzAwMTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MDAyOlxcdFxcbjcwMDM6XFx0XFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgZnJvbSwgbGVuKTtcXG43MDA0OlxcdFxcdHJldHVybiAwO1xcbjcwMDU6XFx0fVxcbjcwMDY6XFx0XFxuNzAwNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG43MDA4OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXFxuNzAwOTpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjcwMTA6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG43MDExOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbjcwMTI6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbjcwMTM6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjcwMTQ6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuNzAxNTpcXHR9O1xcbjcwMTY6XFx0XFxuNzAxNzpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTg6XFx0e1xcbjcwMTk6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDIwOlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAyMTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG43MDIyOlxcdFxcbjcwMjM6XFx0XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuNzAyNDpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzAyNTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG43MDI2OlxcdFxcdGlmICghc3JoKVxcbjcwMjc6XFx0XFx0XFx0cmV0dXJuO1xcbjcwMjg6XFx0XFxuNzAyOTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuNzAzMDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG43MDMxOlxcdH1cXG43MDMyOlxcdFxcbjcwMzM6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuNzAzNDpcXHRcXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuNzAzNTpcXHR7XFxuNzAzNjpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMzc6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDM4OlxcdFxcdGludCBoZHJvZmYgPSAwO1xcbjcwMzk6XFx0XFx0aW50IGVycjtcXG43MDQwOlxcdFxcbjcwNDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG43MDQyOlxcdFxcdHN3aXRjaCAoYWN0aW9uKSB7XFxuNzA0MzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxcbjcwNDQ6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA0NjpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxcbjcwNDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA0ODpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIChzdHJ1Y3QgaW42X2FkZHIgKilwYXJhbSwgMCk7XFxuNzA0OTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo0OTozMS4zMDM4OTQ0MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTM5NjQ3ODE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGNvbnN0cnVjdC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgdHJhY2sgZG93biBpdHMgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgaXRzIHNjb3BlLCBhbmQgaG93IGl0J3MgYWN0dWFsbHkgdXNlZC4gSXMgaXQgYSBnbG9iYWwgdmFyaWFibGU/IEEgc3RydWN0PyBBIG1hY3JvPyBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoaXMgdGhpbmcuXG5cbkJleW9uZCBqdXN0IHRoZSBkZWZpbml0aW9uLCBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyBhbnkgYCNpZmRlZmAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IGluY2x1ZGUgb3IgZXhjbHVkZSB0aGlzIHZhcmlhYmxlIGJhc2VkIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IGFjdGl2ZS4gRGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucywgbW9kdWxlcywgb3IgZmVhdHVyZXMgZW5hYmxlZCBjYW4gaGF2ZSBhIGh1Z2UgaW1wYWN0IG9uIHRoaXMgc29ydCBvZiBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gaXMgY3JpdGljYWwgdG8gYWN0dWFsbHkgdW5kZXJzdGFuZGluZyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDk6NDIuNzAwMzc1MjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjY4NzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2JwZl9zcmhfc3RhdGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Njk3ND1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzctXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo2OTc4OlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3OS1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAxOS1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMjA6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDIxLVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzAzMz1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzYtXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDM3OlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzOC1cXHRpbnQgaGRyb2ZmID0gMDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDg9QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTEtXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTEyOlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMy1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzNTY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4NS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM4NjpERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM4Ny1cXHQuYmhfbG9ja1xcdD0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM5Mi1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzkzOlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTQtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDMzLVxcdCAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDM0OlxcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDM1OlxcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MzYtXFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Ny1cXHRcXHRnb3RvIGRyb3A7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTg6XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1OS1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY1LWRyb3A6XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NjY6XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2Ny1cXHRrZnJlZV9za2Ioc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NDk6NDIuODIzMDY3MTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2NDIyMjgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2VnNl9sb2NhbC5jYCBtb2R1bGUgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb24gYElQVjZfU0VHNl9MV1RVTk5FTGAgb3IgYElQVjZfU0VHNl9CUEZgLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3B0aW9ucyBjb250cm9sIGl0cyBpbmNsdXNpb24uIFRoZW4sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZS4gTGV0J3Mgc2VlLi4uSSdsbCBzZWFyY2ggZm9yIGBzZWc2X2xvY2FsLm9gIHdpdGhpbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIHNob3cgbWUgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJ20gc3VyZSBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJ2QgbGlrZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUwOjI2LjQ2NTI5OTEzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NzEyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9NTA4PWludCBfX2luaXQgc2VnNl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmMtNTIzLVxcbm5ldC9pcHY2L3NlZzYuYzo1MjQ6XFx0ZXJyID0gc2VnNl9sb2NhbF9pbml0KCk7XFxubmV0L2lwdjYvc2VnNi5jLTUyNS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jPTU0MT12b2lkIHNlZzZfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzYuYy01NDIte1xcbm5ldC9pcHY2L3NlZzYuYzo1NDM6XFx0c2VnNl9sb2NhbF9leGl0KCk7XFxubmV0L2lwdjYvc2VnNi5jLTU0NC1cXHRzZWc2X2lwdHVubmVsX2V4aXQoKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNi5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMzojaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNl9sb2NhbC5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2FkZHJjb25mLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzAtI2VuZGlmXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjMxOiNpbmNsdWRlIFxcdTAwM2NuZXQvc2VnNl9sb2NhbC5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Mzg6c3RydWN0IHNlZzZfbG9jYWxfbHd0O1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDAtLyogY2FsbGJhY2tzIHVzZWQgZm9yIGN1c3RvbWl6aW5nIHRoZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YgYSBiZWhhdmlvciAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MTpzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3R1bm5lbF9vcHMge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MjpcXHRpbnQgKCpidWlsZF9zdGF0ZSkoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTQzLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjQ0OlxcdHZvaWQgKCpkZXN0cm95X3N0YXRlKShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00NS19O1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQ3PXN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02NC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NjU6XFx0aW50ICgqaW5wdXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY2LVxcdGludCBzdGF0aWNfaGVhZHJvb207XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo2ODpcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3R1bm5lbF9vcHMgc2x3dF9vcHM7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTY5LX07XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQyPXN0cnVjdCBzZWc2X2VuZF9kdF9pbmZvIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTctXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODpzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzIHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5LVxcdHU2NF9zdGF0c190IHBhY2tldHM7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY5LSAqIHZhbHVlcyBhZnRlciB0aGUgcGVyLUNQVSBjb3VudGVyIGV2YWx1YXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzA6ICogRmluYWxseSwgZWFjaCBjb3VudGVyIHZhbHVlIChpbiBzZWc2X2xvY2FsX2NvdW50ZXJzKSBpcyBzdG9yZWQgaW4gdGhlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MS0gKiBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIGFuZCBzZW50IHRvIHVzZXIgc3BhY2UuXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc0LSAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzU6c3RydWN0IHNlZzZfbG9jYWxfY291bnRlcnMge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzYtXFx0X191NjQgcGFja2V0cztcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODAtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTojZGVmaW5lIHNlZzZfbG9jYWxfYWxsb2NfcGNwdV9jb3VudGVycyhfX2dmcClcXHRcXHRcXHRcXHRcXFxcXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MjpcXHRfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMsXFx0XFxcXFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODMtXFx0XFx0XFx0XFx0ICAoKF9fZ2ZwKSB8IF9fR0ZQX1pFUk8pKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Ni1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg3OnN0cnVjdCBzZWc2X2xvY2FsX2x3dCB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4OC1cXHRpbnQgYWN0aW9uO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAxOlxcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgX19wZXJjcHUgKnBjcHVfY291bnRlcnM7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMi1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTAtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIxMTpzdGF0aWMgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzZWc2X2xvY2FsX2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTIte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTM6XFx0cmV0dXJuIChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKilsd3QtXFx1MDAzZWRhdGE7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxNC19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MzgxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzgyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzgzLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0zODk9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzkwOlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTM5MS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDA2LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0MDc6c3RhdGljIGludCBlbmRfbmV4dF9jc2lkX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MDgte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQyMT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfeF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDIyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00MjMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQyOT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfeF9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjQzMDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTQzMS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NDQ3PXN0YXRpYyBpbnQgZW5kX3hfbmV4dF9jc2lkX2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NDQ4OlxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDQ5LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz00NzM9c3RhdGljIGludCBzZWc2X2Zsdl9zdXBwX29wc19ieV9hY3Rpb24oaW50IGFjdGlvbiwgX191MzIgKmZvcHMpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNDkzLSAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo0OTQ6ZW51bSBzZWc2X2xvY2FsX3BrdGluZm8ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy00OTUtXFx0LyogdGhlIG9yZGVyIHJlYWxseSBtYXR0ZXJzISAqL1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUwNC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NTA1OnN0YXRpYyBlbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyBzZWc2X2dldF9zcmhfcGt0aW5mbyhzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNTA2LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy01MTgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjUxOTplbnVtIHNlZzZfbG9jYWxfZmx2X2FjdGlvbiB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTUyMC1cXHRTRUc2X0xPQ0FMX0ZMVl9BQ1RfVU5TUEVDXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTU5MT1zdGF0aWMgY29uc3QgdTggZmx2ODk4Nl9hY3RfdGJsW0ZMVjg5ODZfQUNUX1RCTF9TSVpFXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTAtICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjYxMTpzdGF0aWMgZW51bSBzZWc2X2xvY2FsX2Zsdl9hY3Rpb25cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NjEyOnNlZzZfbG9jYWxfZmx2ODk4Nl9hY3RfbG9va3VwKGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHBpbmZvLCBfX3UzMiBmbHZtYXNrKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy02MTMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTYyOD1zdGF0aWMgYm9vbCBzZWc2X3BvcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNyaG9mZilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDEtICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc0MjpzdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDMte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDQtXFx0Y29uc3Qgc3RydWN0IHNlZzZfZmxhdm9yc19pbmZvICpmaW5mbyA9IFxcdTAwMjZzbHd0LVxcdTAwM2VmbHZfaW5mbztcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzQ1OlxcdGVudW0gc2VnNl9sb2NhbF9mbHZfYWN0aW9uIGFjdGlvbjtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzQ2OlxcdGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHBpbmZvO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NDctXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzY2LVxcdCAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3Njc6XFx0YWN0aW9uID0gc2VnNl9sb2NhbF9mbHY4OTg2X2FjdF9sb29rdXAocGluZm8sIGZsdm1hc2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjgtXFx0c3dpdGNoIChhY3Rpb24pIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03OTUtLyogcmVndWxhciBlbmRwb2ludCBmdW5jdGlvbiAqL1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3OTY6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNzk3LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MTYtLyogcmVndWxhciBlbmRwb2ludCwgYW5kIGZvcndhcmQgdG8gc3BlY2lmaWVkIG5leHRob3AgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODE3OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF94KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODE4LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy04MjgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjgyOTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTgzMC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9ODQ5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODUwOlxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODUxLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MDU9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4Nl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTA5LVxcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyID0gTlVMTDtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTEwOlxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dDtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTExLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5MTI6XFx0c2x3dCA9IHNlZzZfbG9jYWxfbHd0dW5uZWwob3JpZ19kc3QtXFx1MDAzZWx3dHN0YXRlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTEzLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkyOT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjkzMDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkzMS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2MC1cXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2MTpcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2Mi1cXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjQtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk2NTpcXHRzbHd0ID0gc2VnNl9sb2NhbF9sd3R1bm5lbChvcmlnX2RzdC1cXHUwMDNlbHd0c3RhdGUpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjYtXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTgyPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTgzOlxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTg0LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbmV0ICpmaWI2X2NvbmZpZ19nZXRfbmV0KGNvbnN0IHN0cnVjdCBmaWI2X2NvbmZpZyAqZmliNl9jZmcpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAxMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAxNDpzdGF0aWMgaW50IF9fc2VnNl9lbmRfZHRfdnJmX2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDE1LVxcdFxcdFxcdFxcdCAgIHUxNiBmYW1pbHksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTMxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZW5kX2R0X3ZyZl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExMzI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgdTE2IGZhbWlseSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTEzMy17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTE3Nz1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExNzg6XFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTc5LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjA5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjEwOnN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ0X2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjExLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMjE2PXN0YXRpYyBlbnVtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMTc6c2VnNl9lbmRfZHRfbW9kZSBzZWc2X2VuZF9kdDZfcGFyc2VfbW9kZShzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMTgte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMzEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyMzI6c3RhdGljIGVudW0gc2VnNl9lbmRfZHRfbW9kZSBzZWc2X2VuZF9kdDZfZ2V0X21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjMzLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjM4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjM5OnN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ2X2J1aWxkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCwgY29uc3Qgdm9pZCAqY2ZnLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjQwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMjU4PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTI1OTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMDAtI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzAxOnN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ0Nl9idWlsZChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTMwMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzMDc9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMwODpcXHRcXHRcXHRcXHQgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzA5LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzMwLS8qIHB1c2ggYW4gU1JIIG9uIHRvcCBvZiB0aGUgY3VycmVudCBvbmUgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMzMTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzMyLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzU3OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzU4LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDE0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQxNTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTYte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1NzE9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODY6c3RhdGljIGJvb2wgc2VnNl9sd3R1bm5lbF9jb3VudGVyc19lbmFibGVkKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ny17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU5MTpzdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTItXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBsZW4sIGludCBlcnIpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1OTMte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTk0OlxcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgKnBjb3VudGVycztcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU5NS1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjA4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjA5OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjEwLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTMtXFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2M7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTQ6XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0O1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE1LVxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjE4OlxcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVxcdTAwM2Vsd3RzdGF0ZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTktXFx0ZGVzYyA9IHNsd3QtXFx1MDAzZWRlc2M7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYyNS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYyNjpcXHRzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzbHd0LCBsZW4sIHJjKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYyNy1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMwLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjMxOnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjMyLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjQwLVxcdFxcdFxcdCAgICAgICBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldiwgTlVMTCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0MTpcXHRcXHRcXHQgICAgICAgc2VnNl9sb2NhbF9pbnB1dF9jb3JlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Mi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0MzpcXHRyZXR1cm4gc2VnNl9sb2NhbF9pbnB1dF9jb3JlKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjQ0LX1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0NS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY0NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9sb2NhbF9wb2xpY3lbU0VHNl9MT0NBTF9NQVggKyAxXSA9IHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cXHRbU0VHNl9MT0NBTF9BQ1RJT05dXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NTktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NjA6c3RhdGljIGludCBwYXJzZV9ubGFfc3JoKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjYxLVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY4NC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTY4NTpzdGF0aWMgaW50IHB1dF9ubGFfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY4Ni17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTcwMi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTcwMzpzdGF0aWMgaW50IGNtcF9ubGFfc3JoKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzA0LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzEyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzEzOnN0YXRpYyB2b2lkIGRlc3Ryb3lfYXR0cl9zcmgoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE0LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzE4OnN0YXRpYyBpbnQgcGFyc2VfbmxhX3RhYmxlKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzE5LVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzI1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzI2OnN0YXRpYyBpbnQgcHV0X25sYV90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3Mjcte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3MzMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3MzQ6c3RhdGljIGludCBjbXBfbmxhX3RhYmxlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzM1LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNzQyPXN0YXRpYyBzdHJ1Y3RcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTc0MzpzZWc2X2VuZF9kdF9pbmZvICpzZWc2X3Bvc3NpYmxlX2VuZF9kdF9pbmZvKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc0NC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTc1Mj1zdGF0aWMgaW50IHBhcnNlX25sYV92cmZ0YWJsZShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3NTM6XFx0XFx0XFx0ICAgICAgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzU0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzY1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzY2OnN0YXRpYyBpbnQgcHV0X25sYV92cmZ0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3Njcte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3NzgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3Nzk6c3RhdGljIGludCBjbXBfbmxhX3ZyZnRhYmxlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzgwLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNzg5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNzkwOnN0YXRpYyBpbnQgcGFyc2VfbmxhX25oNChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTc5MS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE3OTgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE3OTk6c3RhdGljIGludCBwdXRfbmxhX25oNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MDAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MTEtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4MTI6c3RhdGljIGludCBjbXBfbmxhX25oNChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgxMy17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTgxNi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTgxNzpzdGF0aWMgaW50IHBhcnNlX25sYV9uaDYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4MTgtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODI1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODI2OnN0YXRpYyBpbnQgcHV0X25sYV9uaDYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODI3LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODM4LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODM5OnN0YXRpYyBpbnQgY21wX25sYV9uaDYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NDAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NDMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4NDQ6c3RhdGljIGludCBwYXJzZV9ubGFfaWlmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODQ1LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1MS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg1MjpzdGF0aWMgaW50IHB1dF9ubGFfaWlmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1My17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg1OS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg2MDpzdGF0aWMgaW50IGNtcF9ubGFfaWlmKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODYxLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xODY3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxODY4OnN0YXRpYyBpbnQgcGFyc2VfbmxhX29pZihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg2OS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4NzUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4NzY6c3RhdGljIGludCBwdXRfbmxhX29pZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4Nzcte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE4ODMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE4ODQ6c3RhdGljIGludCBjbXBfbmxhX29pZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg4NS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnBmX3Byb2dfcG9saWN5W1NFRzZfTE9DQUxfQlBGX1BST0dfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTg5OC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTg5OTpzdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MDAtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMwLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTMxOnN0YXRpYyBpbnQgcHV0X25sYV9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTMyLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTUxLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTUyOnN0YXRpYyBpbnQgY21wX25sYV9icGYoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NTMte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5NjM6c3RhdGljIHZvaWQgZGVzdHJveV9hdHRyX2JwZihzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NjQte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5NzA9c3RhdGljIGNvbnN0IHN0cnVjdFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTcxOm5sYV9wb2xpY3kgc2VnNl9sb2NhbF9jb3VudGVyc19wb2xpY3lbU0VHNl9MT0NBTF9DTlRfTUFYICsgMV0gPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5NzItXFx0W1NFRzZfTE9DQUxfQ05UX1BBQ0tFVFNdXFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5Nzc9c3RhdGljIGludCBwYXJzZV9ubGFfY291bnRlcnMoc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTc4OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk3OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5ODAte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTgxOlxcdHN0cnVjdCBwY3B1X3NlZzZfbG9jYWxfY291bnRlcnMgX19wZXJjcHUgKnBjb3VudGVycztcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk4Mi1cXHRzdHJ1Y3QgbmxhdHRyICp0YltTRUc2X0xPQ0FMX0NOVF9NQVggKyAxXTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTg2LVxcdFxcdFxcdFxcdFxcdCAgYXR0cnNbU0VHNl9MT0NBTF9DT1VOVEVSU10sXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE5ODc6XFx0XFx0XFx0XFx0XFx0ICBzZWc2X2xvY2FsX2NvdW50ZXJzX3BvbGljeSwgTlVMTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5ODgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTk5OC1cXHQvKiBjb3VudGVycyBhcmUgYWx3YXlzIHplcm8gaW5pdGlhbGl6ZWQgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTk5OTpcXHRwY291bnRlcnMgPSBzZWc2X2xvY2FsX2FsbG9jX3BjcHVfY291bnRlcnMoR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMDAtXFx0aWYgKCFwY291bnRlcnMpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAwNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAwODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfZmlsbF9ubGFfY291bnRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAwOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9jb3VudGVycyAqY291bnRlcnMpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMTAte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMjUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwMjY6c3RhdGljIGludCBwdXRfbmxhX2NvdW50ZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAyNy17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIwMjg6XFx0c3RydWN0IHNlZzZfbG9jYWxfY291bnRlcnMgY291bnRlcnMgPSB7IDAsIDAsIDAgfTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjAyOS1cXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMzYtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjAzNzpcXHRcXHRzdHJ1Y3QgcGNwdV9zZWc2X2xvY2FsX2NvdW50ZXJzICpwY291bnRlcnM7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwMzgtXFx0XFx0dTY0IHBhY2tldHMsIGJ5dGVzLCBlcnJvcnM7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA1NS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA1NjpcXHRyYyA9IHNlZzZfbG9jYWxfZmlsbF9ubGFfY291bnRlcnMoc2tiLCBcXHUwMDI2Y291bnRlcnMpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDU3LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDY0LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDY1OnN0YXRpYyBpbnQgY21wX25sYV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmEsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA2Ni17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjA3MS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjA3MjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMDczLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMDc3PXN0YXRpYyBjb25zdFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMDc4OnN0cnVjdCBubGFfcG9saWN5IHNlZzZfbG9jYWxfZmxhdm9yc19wb2xpY3lbU0VHNl9MT0NBTF9GTFZfTUFYICsgMV0gPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIwNzktXFx0W1NFRzZfTE9DQUxfRkxWX09QRVJBVElPTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjExMD1zdGF0aWMgaW50IHNlZzZfcGFyc2VfbmxhX25leHRfY3NpZF9jZmcoc3RydWN0IG5sYXR0ciAqKnRiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIxMzYtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIxMzc6c3RhdGljIGludCBwYXJzZV9ubGFfZmxhdm9ycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjEzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTQ3LVxcdFxcdFxcdFxcdFxcdCBhdHRyc1tTRUc2X0xPQ0FMX0ZMQVZPUlNdLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTQ4OlxcdFxcdFxcdFxcdFxcdCBzZWc2X2xvY2FsX2ZsYXZvcnNfcG9saWN5LCBOVUxMKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE0OS1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxODA9c3RhdGljIGludCBzZWc2X2ZpbGxfbmxhX25leHRfY3NpZF9jZmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTkyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMTkzOnN0YXRpYyBpbnQgcHV0X25sYV9mbGF2b3JzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjE5NC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjIyMj1zdGF0aWMgaW50IHNlZzZfY21wX25sYV9uZXh0X2NzaWRfY2ZnKHN0cnVjdCBzZWc2X2ZsYXZvcnNfaW5mbyAqZmluZm9fYSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjMzLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjM0OnN0YXRpYyBpbnQgY21wX25sYV9mbGF2b3JzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqYSwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjM1LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjQ5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjUwOnN0YXRpYyBpbnQgZW5jYXBfc2l6ZV9mbGF2b3JzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI1MS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjI2NT1zdHJ1Y3Qgc2VnNl9hY3Rpb25fcGFyYW0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjY2OlxcdGludCAoKnBhcnNlKShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI2Ny1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNjg6XFx0aW50ICgqcHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjY5OlxcdGludCAoKmNtcCkoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICphLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKmIpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjcwLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNzQtXFx0ICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyNzU6XFx0dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNzYtfTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMzI3PXN0YXRpYyB2b2lkIF9fZGVzdHJveV9hdHRycyh1bnNpZ25lZCBsb25nIHBhcnNlZF9hdHRycywgaW50IG1heF9wYXJzZWQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzMjg6XFx0XFx0XFx0ICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMyOS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM1NS0gKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM1NjpzdGF0aWMgdm9pZCBkZXN0cm95X2F0dHJzKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM1Ny17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjM2Mz1zdGF0aWMgaW50IHBhcnNlX25sYV9vcHRpb25hbF9hdHRycyhzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIzNjQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjM2NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0MDU9c3RhdGljIGludFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDA2OnNlZzZfbG9jYWxfbHd0dW5uZWxfYnVpbGRfc3RhdGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MDctXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MDktXFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2MgPSBzbHd0LVxcdTAwM2VkZXNjO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDEwOlxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyAqb3BzO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDExLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjEtICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MjI6c3RhdGljIHZvaWQgc2VnNl9sb2NhbF9sd3R1bm5lbF9kZXN0cm95X3N0YXRlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyMy17XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MjQtXFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2MgPSBzbHd0LVxcdTAwM2VkZXNjO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDI1OlxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dHVubmVsX29wcyAqb3BzO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDI2LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MzMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MzQ6c3RhdGljIGludCBwYXJzZV9ubGFfYWN0aW9uKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDM1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTA6MjYuOTI0MDE1NjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTY1MDgyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2LCBzcGVjaWZpY2FsbHkgdGhlIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoYElQVjZfU0VHNl9MV1RVTk5FTGApIGFuZCB0aGUgQlBGIGludGVncmF0aW9uIChgSVBWNl9TRUc2X0JQRmApLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGVyZSwgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIHBvdGVudGlhbGx5IGRlZmF1bHQgdmFsdWVzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3Agd2hhdCdzIGNvbnRyb2xsYWJsZSBhdCBjb21waWxlIHRpbWUgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzIHdpbGwgbGV0IG1lIHBsYW4gYW5kIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUwOjQ5Ljg4OTEwMTUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg3NTEyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfU0VHNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTA6NTAuMDA3ODU4Mzg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODAwNDExMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZTpcblxuKipJUHY2IENvbmZpZ3VyYXRpb24gLSBEaXZpbmcgSW4qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgemVybyBpbiBvbiBsaW5lcyAyODAgdG8gMzIwIGluIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZmVhdHVyZXMgcmVsYXRlZCB0byBJUHY2IG5ldHdvcmsgY29uZmlndXJhdGlvbiwgcGVyaGFwcyB0aGUgZW5hYmxpbmcgZmxhZ3MgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdGllcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlIG9mIGhvdyBkaWZmZXJlbnQgb3B0aW9ucyBhcmUgbmVzdGVkIG9yIGRlcGVuZGVudCwgcHJvYmFibHkgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgZmVhdHVyZXMgZm9yIGluY2x1c2lvbiBpbiBhIGtlcm5lbCBidWlsZC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MToxOC44MDgyNzE5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NTpcXHRcXG4gMjg2OlxcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMjg3OlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbiAyODg6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDI4OTpcXHRcXHRzZWxlY3QgTFdUVU5ORUxcXG4gMjkwOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMjkxOlxcdFxcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyOTI6XFx0XFx0aGVscFxcbiAyOTM6XFx0XFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcXG4gMjk0OlxcdFxcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxuIDI5NTpcXHRcXHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxcbiAyOTY6XFx0XFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyOTk6XFx0XFxuIDMwMDpcXHRjb25maWcgSVBWNl9TRUc2X0hNQUNcXG4gMzAxOlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuIDMwMjpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMzAzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gMzA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAzMDU6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gMzA2OlxcdFxcdGhlbHBcXG4gMzA3OlxcdFxcdCAgU3VwcG9ydCBmb3IgSE1BQyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uXFxuIDMwODpcXHRcXHQgIG9mIFNSLWVuYWJsZWQgcGFja2V0cy5cXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzMTE6XFx0XFxuIDMxMjpcXHRjb25maWcgSVBWNl9TRUc2X0JQRlxcbiAzMTM6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAzMTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMzE1OlxcdFxcdGRlcGVuZHMgb24gSVBWNiA9IHlcXG4gMzE2OlxcdFxcbiAzMTc6XFx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxuIDMxODpcXHRcXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuIDMxOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTE6MTguODA4MzUxNzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgwOTY2Njg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBCUEYqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYENPTkZJR19JUFY2X1NFRzZfQlBGYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBhIHNpbWlsYXIgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGluc3RhbmNlcyB3aGVyZSB0aGlzIHN5bWJvbCBpcyB1c2VkIGRpcmVjdGx5LCBvciBpbmRpcmVjdGx5IHZpYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdCBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIFNFRzYgQlBGLXJlbGF0ZWQgY29kZSwgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2suIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbmNsdWRlIGZpbGVzIGFzIHdlbGwuIE9uY2UgSSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBjb2RlIGJsb2NrcywgSSdsbCBleGFtaW5lIHRoZSBjb250ZXh0LiBXaGF0J3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzIGNvbmZpZz8gSG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIFNFRzYgZnJhbWV3b3JrPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBCUEYgcHJvZ3JhbXMsIG9yIGhvb2tpbmcgaW50byBzcGVjaWZpYyBpbmZyYXN0cnVjdHVyZT8gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIHJlc3VsdGluZyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTE6MjcuNjE4MDIxNDk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE0ODIxNzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2X1NFRzZfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTY4Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODgwLXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMS19XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMjojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEzLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMj1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNS1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjctXFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTcyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3NC1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjYtfTtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY3OiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjgtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDQ3PWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDktXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6OTA1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy05MDUxLVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zODgtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jOjM4OTpcXHRcXHR7IFxcXCJDT05GSUdfSVBWNl9TRUc2X0JQRlxcXCIsIH0sXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIgYW5kIHJlbGF0ZWQgaGVscGVycyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz00OD1DT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo0OTpDT05GSUdfSVBWNl9TRUc2X0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTE6MzAuMzMyODU3NzIyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NDA5MjY4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgRmlsdGVyaW5nIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgcGFja2V0IGZpbHRlcmluZyBiZWhhdmlvci4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3Mgc29tZXRoaW5nIGFtaXNzIGluIHRoZSBjb3JlIGZpbHRlcmluZyBpbXBsZW1lbnRhdGlvbiwgc28gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGxpa2VseSBuZXN0bGVkIHNvbWV3aGVyZSBiZXR3ZWVuIGxpbmVzIDcwMTUgYW5kIDcwOTAuIFRoYXQgcmFuZ2UgdXN1YWxseSBlbmNvbXBhc3NlcyBzb21lIGNyaXRpY2FsIGZ1bmN0aW9uIGNhbGxzIG9yIGNvbmRpdGlvbmFsIHN0cnVjdHVyZXMsIGdpdmVuIG15IHBhc3QgZXhwZXJpZW5jZS4gVGltZSB0byBnZXQgbXkgZXllcyBvbiB0aGF0IHNlY3Rpb24gYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUxOjM2LjI3Mzc4ODAxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAxNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAxNTpcXHR9O1xcbjcwMTY6XFx0XFxuNzAxNzpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTg6XFx0e1xcbjcwMTk6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDIwOlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAyMTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG43MDIyOlxcdFxcbjcwMjM6XFx0XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuNzAyNDpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzAyNTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG43MDI2OlxcdFxcdGlmICghc3JoKVxcbjcwMjc6XFx0XFx0XFx0cmV0dXJuO1xcbjcwMjg6XFx0XFxuNzAyOTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuNzAzMDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG43MDMxOlxcdH1cXG43MDMyOlxcdFxcbjcwMzM6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuNzAzNDpcXHRcXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuNzAzNTpcXHR7XFxuNzAzNjpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMzc6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDM4OlxcdFxcdGludCBoZHJvZmYgPSAwO1xcbjcwMzk6XFx0XFx0aW50IGVycjtcXG43MDQwOlxcdFxcbjcwNDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG43MDQyOlxcdFxcdHN3aXRjaCAoYWN0aW9uKSB7XFxuNzA0MzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxcbjcwNDQ6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA0NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA0NjpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxcbjcwNDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA0ODpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIChzdHJ1Y3QgaW42X2FkZHIgKilwYXJhbSwgMCk7XFxuNzA0OTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxcbjcwNTA6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA1MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA1MjpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxcbjcwNTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA1NDpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbjcwNTU6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2OlxcbjcwNTY6XFx0XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA1ODpcXHRcXHRcXHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxcbjcwNTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA2MDpcXHRcXG43MDYxOlxcdFxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuNzA2MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA2MzpcXHRcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xcbjcwNjQ6XFx0XFx0XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBOVUxMO1xcbjcwNjU6XFx0XFx0XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbjcwNjY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNjc6XFx0XFx0XFx0fVxcbjcwNjg6XFx0XFx0XFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XFxuNzA2OTpcXHRcXG43MDcwOlxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xcbjcwNzE6XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuNzA3MjpcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbjcwNzM6XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcXG43MDc0OlxcdFxcbjcwNzU6XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDc2OlxcdFxcdFxcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XFxuNzA3NzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG43MDc4OlxcdFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwODA6XFx0XFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXFxuNzA4MTpcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xcbjcwODI6XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDgzOlxcdFxcbjcwODQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43MDg1OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxcbjcwODY6XFx0XFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA4NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA4ODpcXHRcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxcbjcwODk6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDkwOlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA5MTpcXHRcXG43MDkyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA5MzpcXHRcXHRkZWZhdWx0OlxcbjcwOTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUxOjM2LjI3NDI2OTkyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ2NzAyMjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbiwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIGlzIGVzc2VudGlhbGx5IGEgQlBGIGhlbHBlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGEgYEJQRl9DQUxMXzRgIGhlbHBlciB0aWVkIHRvIHRoZSBgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uYCBCUEYgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgaG93IHRoaXMgdGhpbmcgKmdldHMqIGludm9rZWQuIEZyb20gd2hhdCBJIHJlY2FsbCwgaXQncyBlaXRoZXIgdHJpZ2dlcmVkIHdoZW4gYW4gbHd0dW5uZWwgU0VHNiBsb2NhbCBCUEYgcHJvZ3JhbSBpcyBydW5uaW5nIOKAkyBzbyB0aGF0J3MgYSBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBwcm9ncmFtIGluIGFjdGlvbiDigJMgb3IsIHBvdGVudGlhbGx5LCBkdXJpbmcgQlBGIHRlc3QgcnVucyBvciB0aGUgcmVndWxhciBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS4gUmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgYHNlZzZfbG9jYWwuY2AgZmlsZTsgdGhlIGNvZGUgYXJvdW5kIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgd2lsbCBwcm9iYWJseSBwcm92aWRlIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvciBhbmQgY2xhcmlmeSB0aGUgaW52b2NhdGlvbiBwYXRoLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRlYnVnZ2luZyB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTM1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTI6MDIuNzQxMjk1ODczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgwNjAyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnB1dF9hY3Rpb25fZW5kX2JwZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzOTA9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQxMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQxNDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MTUtXFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0NzE9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2NS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU2NjpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfYnBmLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUyOjAyLjgwOTEwNTg5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1OTc1MzExOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDpcblxuKipEaXZpbmcgaW50byBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIHVucGFjayB0aGUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgaG9vaywgcHJlc3VtYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgYW5kIGxvY2FsIFNJRCBwcm9jZXNzaW5nLCBnaXZlbiB0aGUgZmlsZSBwYXRoLiBNeSBpbml0aWFsIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgd2l0aGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93IOKAkyBpcyBpdCBhdCB0aGUgaW5ncmVzcywgZWdyZXNzLCBvciBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZT8gV2hhdCBhcmUgaXRzIGlucHV0cyDigJMgbGlrZWx5IHRoZSBza2IsIGFuZCBzb21lIGNvbnRleHQgc3RydWN0dXJlcyBsaWtlIHRoZSBmbG93LCBkZXZpY2UsIGFuZCBwb3NzaWJseSB0aGUgU1JIPyBXaGF0J3MgdGhlICphY3Rpb24qIGl0J3MgdGFraW5nIGF0IHRoZSBcImVuZFwiPyBJcyBpdCByZWxhdGVkIHRvIHBvbGljeSBlbmZvcmNlbWVudCwgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgb3IgbWF5YmUgc29tZSBmb3JtIG9mIHJlc291cmNlIGFjY291bnRpbmc/IEkgYmV0IGl0J3MgaW52b2x2ZWQgaW4gdGhlIGZpbmFsIGFjdGlvbnMgb2YgdGhlIFNSdjYgcHJvY2Vzc2luZy4gS25vd2luZyBCUEYsIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0OiBpdCBjb3VsZCBiZSByZWRpcmVjdGluZywgZHJvcHBpbmcsIG9yIG1hbmlwdWxhdGluZyBwYWNrZXQgaGVhZGVycy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBjYWxscyB0byBoZWxwZXJzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBkYXRhcGF0aC4gVGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlISBMZXQncyBzZWUgaWYgdGhpcyBob29rIGlzIGludm9sdmVkIGluIHRoZSBlZ3Jlc3Mgb3IgaW5ncmVzcyBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MjoxMS40MDY2MzkyODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcbjE0MTE6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTQxMjpcXHR9XFxuMTQxMzpcXHRcXG4xNDE0OlxcdHN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNDE1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4xNDE2OlxcdHtcXG4xNDE3OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZTtcXG4xNDE4OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbjE0MTk6XFx0XFx0aW50IHJldDtcXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcXG4xNDIyOlxcdFxcdGlmICghc3JoKSB7XFxuMTQyMzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MjU6XFx0XFx0fVxcbjE0MjY6XFx0XFx0YWR2YW5jZV9uZXh0c2VnKHNyaCwgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyKTtcXG4xNDI3OlxcdFxcbjE0Mjg6XFx0XFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXFxuMTQyOTpcXHRcXHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcXG4xNDMwOlxcdFxcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXFxuMTQzMTpcXHRcXHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXFxuMTQzMjpcXHRcXHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxcbjE0MzM6XFx0XFx0ICovXFxuMTQzNDpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDM1OlxcdFxcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuMTQzNjpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4xNDM3OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuID0gc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4xNDM4OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0Mzk6XFx0XFxuMTQ0MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQ0MTpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMTQ0MjpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVxcdTAwM2VicGYucHJvZywgc2tiKTtcXG4xNDQzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE0NDQ6XFx0XFxuMTQ0NTpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbjE0NDY6XFx0XFx0Y2FzZSBCUEZfT0s6XFxuMTQ0NzpcXHRcXHRjYXNlIEJQRl9SRURJUkVDVDpcXG4xNDQ4OlxcdFxcdFxcdGJyZWFrO1xcbjE0NDk6XFx0XFx0Y2FzZSBCUEZfRFJPUDpcXG4xNDUwOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNDUxOlxcdFxcdGRlZmF1bHQ6XFxuMTQ1MjpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImJwZi1zZWc2bG9jYWw6IElsbGVnYWwgcmV0dXJuIHZhbHVlICV1XFxcXG5cXFwiLCByZXQpO1xcbjE0NTM6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NTQ6XFx0XFx0fVxcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG4xNDU3OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNDU4OlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxuMTQ1OTpcXHRcXG4xNDYwOlxcdFxcdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxcbjE0NjE6XFx0XFx0XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRyZXR1cm4gZHN0X2lucHV0KHNrYik7XFxuMTQ2NDpcXHRcXG4xNDY1OlxcdGRyb3A6XFxuMTQ2NjpcXHRcXHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbjE0Njc6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTQ2ODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDY5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTI6MTEuNDA2ODAyMjc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDA3NTA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBQcm9ncmFtIFRlc3RpbmcgQ2FwYWJpbGl0aWVzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHdlIGNhbiB0ZXN0IHRoZXNlIEJQRiBwcm9ncmFtcy4gSSBrbm93IHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpcyBhIHZhbHVhYmxlIHRvb2wsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZnVsbCBzY29wZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBicGZfcHJvZ190ZXN0X3J1bmAgY2FuIGhhbmRsZSBCUEYgcHJvZ3JhbXMgb2YgdGhlIGBMV1RfU0VHNkxPQ0FMYCB0eXBlLiBJZiBpdCBjYW4sIHRoYXQncyBmYW50YXN0aWMsIGFuZCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gSWYgbm90LCBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW4gYWx0ZXJuYXRpdmUuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQncyBwb3NzaWJsZSBJIG1heSBuZWVkIHRvIGxvb2sgYXQgZnVuY3Rpb25zIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrYmAgdG8gZXhwbG9yZSB3aGF0IGtpbmQgb2YgYWx0ZXJuYXRpdmUgZXhpc3RzLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXN0aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA5OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTI6MTQuOTA3NTU2MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTE1MTA0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzUtKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxMzY6fCBgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGBgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsd3Rfc2VnNmxvY2FsYGAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdC0xMzctKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tK1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0yNT1CUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjYtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoyNzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgbHd0X3NlZzZsb2NhbCxcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI4LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVxcdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcXHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXFx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05MDU2PXN0YXRpYyBpbnQgYnBmX3Byb2dfdHlwZV90b19rZnVuY19ob29rKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkwOTEtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxcbmtlcm5lbC9icGYvYnRmLmM6OTA5MjpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL2J0Zi5jLTkwOTMtXFx0XFx0cmV0dXJuIEJURl9LRlVOQ19IT09LX0xXVDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI4NDM9c3RhdGljIGJvb2wgaXNfbmV0X2FkbWluX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg1MjpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODUzLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDc4OT1zdGF0aWMgYm9vbCBtYXlfYWNjZXNzX2RpcmVjdF9wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ3OTgtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ3OTk6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MDAtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyODc3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg4OC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg5OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5MC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xODk5PXN0YXRpYyBpbnQgcGFyc2VfbmxhX2JwZihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTIwLVxcdGZkID0gbmxhX2dldF91MzIodGJbU0VHNl9MT0NBTF9CUEZfUFJPR10pO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxOTIxOlxcdHAgPSBicGZfcHJvZ19nZXRfdHlwZShmZCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkyMi1cXHRpZiAoSVNfRVJSKHApKSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXFx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlxcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4My1cXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTIwMj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2dfdHlwZV9uYW1lW10gPSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMS1cXHRbQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSXVxcdD0gXFxcImNncm91cF9zb2NrX2FkZHJcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjIyOlxcdFtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxdXFx0XFx0PSBcXFwibHd0X3NlZzZsb2NhbFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjMtXFx0W0JQRl9QUk9HX1RZUEVfTElSQ19NT0RFMl1cXHRcXHQ9IFxcXCJsaXJjX21vZGUyXFxcIixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NzE1Nz1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3MC1cXHR7IEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgICAgICAgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo3MTcxOlxcdHsgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzItXFx0eyBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAgICAgICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MTAzPXN0YXRpYyBpbnQgcHJvYmVfcHJvZ19sb2FkKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xNzgtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjE3OTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xODAtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jPTIyNT12b2lkIHRlc3RfdmVyaWZfc2NhbGVfc2VnNl9sb29wKClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjIyNzpcXHRzY2FsZV90ZXN0KFxcXCJ0ZXN0X3NlZzZfbG9vcC5icGYub1xcXCIsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgZmFsc2UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyOC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDItXFx0e1xcXCJsd3RfeG1pdFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAwfSwgey1FSU5WQUwsIDB9IH0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlxcdHtcXFwibHd0X3NlZzZsb2NhbFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDQtXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MjoxNy4zMTkwNzEyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODA5NTU3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU1J2NiBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHBhcnRpY3VsYXJseSBob3cgdGhleSBhZmZlY3QgU1J2NiBCUEYgaGVscGVycy4gSSBzZWUgdHdvIG1haW4gYXJlYXMgb2YgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLlxuXG5GaXJzdCwgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBmaW5kaW5nIHRoZSBTUkggaGVhZGVyIGJ5IHNlYXJjaGluZyB0aGUgc2tiIGRhdGEgYXQgYW4gb2Zmc2V0LCBhbmQgdGhlbiBkZXRlcm1pbmluZyB2YWxpZGl0eS4gVGhlIHVwZGF0ZWQgY29kZSwgaG93ZXZlciwgbm93IHVzZXMgdGhlIGBzZWc2X2dldF9zcmhgIGhlbHBlciBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIFNSSC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlOyB1c2luZyBhIGRlZGljYXRlZCBoZWxwZXIgc3VnZ2VzdHMgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgZm9yIHZhbGlkYXRpb24uIFRoZSBjb2RlIGFsc28gY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgYWZ0ZXIgYHNlZzZfZ2V0X3NyaGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXNlIGRhdGEgcG9pbnRlciB1cGRhdGVzIHdpbGwgZGVmaW5pdGVseSBhZmZlY3QgdGhlIEJQRiBwcm9ncmFtJ3MgYWJpbGl0eSB0byBvcGVyYXRlIG9uIHRoZSBwYWNrZXRzIGFmdGVyIHRoaXMgU1JIIHByb2Nlc3NpbmcuXG5cblNlY29uZCwgdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbiwgd2hpY2ggaGFuZGxlcyB0aGUgQlBGIGxvZ2ljIGZvciBTUnY2IGFjdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBjYXNlcyBsaWtlIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YCwgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNmAsIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYC4gVGhlIG1vZGlmaWNhdGlvbnMgaW4gYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBoZXJlOiB0aGUgb3JpZ2luYWwgY29kZSBqdXN0IHB1bGxlZCB0aGUgSVB2NiBoZWFkZXIsIHdoZXJlYXMgdGhlIHVwZGF0ZWQgY29kZSBpbmNsdWRlcyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsYCB0aGF0IHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgSVB2NiBoZWFkZXIgYmVmb3JlIHB1bGxpbmcgdGhlIGRhdGEuIFRoaXMgaGVscHMgcHJldmVudCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJydW5zIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXJlIGlzIGFsc28gYSBjaGFuZ2UgdG8gY2FsbCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgZmFpbHVyZSBvY2N1cnJlZCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS5cblxuRnJvbSBhIGZ1bmN0aW9uYWxpdHkgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGJ1ZyBmaXgsIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgU1J2NiBCUEYgaW1wbGVtZW50YXRpb24uIEl0IGFkZHJlc3NlcyBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgYW5kIGVuc3VyZXMgc3RhdGUgY29uc2lzdGVuY3kuIEknbSB0aGlua2luZyBvZiBidWZmZXIgb3ZlcnJ1biBjaGVja3MsIGFuZCBwcm9wZXIgZGF0YSBwb2ludGVyIGNvbXB1dGF0aW9uLiBPdmVyYWxsLCBpdCBhcHBlYXJzIHRvIGltcHJvdmUgcmVsaWFiaWxpdHkuXG5cbk5vdywgc2hvdWxkIHdlIGZ1enogdGhpcz8gTGV0J3MgY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGlzIGNsZWFybHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2ApIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuXG5cblJlZ2FyZGluZyB0aGUgYEZvY3VzU3ltYm9sc2AsIEknbGwgbmVlZCB0byBmb2N1cyBvbiByZWxldmFudCBCUEYgc3ltYm9scyBhbmQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGlmIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgcmVsYXRlZCBoZWxwZXJzIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8ga25vdyBpZiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBkZXRlcm1pbmUgaXRzIGFiaWxpdHkgdG8gYmUgdXNlZCBpbiBleHRlcm5hbCBCUEYgcHJvZ3JhbXMuIEknbGwgbG9vayBhcm91bmQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgYHNlZzZfbG9jYWwuY2AsIGFuZCBwb3RlbnRpYWxseSB1c2UgdG9vbHMgbGlrZSBgZ3JlcHBlcmAgb3IgYG5tYCB0byBiZSBzdXJlLiBJIHdpbGwgdXNlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1MzoxNS4xMjg2MzExNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NTYwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzRcXFxcKGJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz03MDE3PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDMyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzM6QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNC1cXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjE1LjY1NTIwMDMyOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTE5Nzc5Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGX0NBTExfNCBNYWNybyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgQlBGX0NBTExfNGAgbWFjcm8gZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIGV4cGVjdGF0aW9uIGlzIHRoYXQgaXQgd2lsbCBleHBhbmQgdG8gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgbGlrZWx5IGB1NjQgbmFtZSh1NjQgX19hMSwgdTY0IF9fYTIsIC4uLilgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYSB0eXBpY2FsIHBhdHRlcm4uIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgbGV0J3MganVzdCBkbyBhIHF1aWNrLCBtb3JlIGVuY29tcGFzc2luZyBjaGVjay4gSXQncyBvZnRlbiBxdWlja2VyIHRvIGp1c3QgZ3JlcCBmb3IgdGhlIGJyb2FkZXIgY29udGV4dC4gSSdsbCBzZWFyY2ggZm9yIGVpdGhlciBgX19fYnBmX3Byb2dfcnVuYCBvciBhbnkgaW5zdGFuY2Ugb2YgYEJQRl9DQUxMX2Agd2l0aGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGRlY2xhcmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgZmlsdGVyaW5nIGZyYW1ld29yay4gQSBicm9hZGVyIHNlYXJjaCB3aWxsIGdpdmUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTY2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTM6MjMuNzc0OTgyNzcyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY0Mzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMX1swLTldXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY3OC0jZGVmaW5lIF9fTk9BVFRSXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Nzk6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MDojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgxOiNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODI6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MzojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Njg0OiNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjIzLjgzMDYzMDYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Mzk3MzY3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSW50ZWdyYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCdzIFNFRzYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBCUEYgaW50ZWdyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU0VHNikgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIHNlZSBgQlBGX0NBTExfeGAgd2hpY2ggc2VlbXMgdG8gZGVmaW5lIGEgYHU2NCBuYW1lKC4uLilgIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQlBGIGNhbGxzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgdXNlZC4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ7IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIGFsb25nIHdpdGggYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGVuIHRoZXJlJ3MgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgd2hpY2ggSSBzaG91bGQgbG9vayBhdCBhcyB3ZWxsLiBJJ20gd29uZGVyaW5nIGlmIGNvcmUgaW5wdXQgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWNhbGx5IG9yIG5vdC4gTGV0IG1lIGp1c3QgY2hlY2sgb24gdGhhdC4gSXMgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgb3IgYHNlZzZfbG9jYWxfaW5wdXRgIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZT8gTGV0IG1lIGNoZWNrIGBzZWc2X2xvY2FsX2lucHV0YCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjQ1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjUzLjIyODAwMDY5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1NDIxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTE9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MDgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MDk6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTAtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzMC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzMTpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzMi17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0MC1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDE6XFx0XFx0XFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDM6XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0NC19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjczLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2NzQ6XFx0LmlucHV0XFx0XFx0PSBzZWc2X2xvY2FsX2lucHV0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjc1LVxcdC5maWxsX2VuY2FwXFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjUzOjUzLjMxNjU0NzVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NzA3MzYzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNFRzYgTG9jYWwgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhwb3NlZCBpbnRlcmZhY2UgZm9yIFNFRzYgbG9jYWwuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgc2VnNl9sb2NhbC5oYCBvciwganVzdCB0byBiZSBzdXJlLCBgaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXJzLiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgcHVibGljLWZhY2luZyBBUEkgSSBoYXZlIHRvIHdvcmsgd2l0aCwgb3IgbmVlZCB0byBiZSBhd2FyZSBvZiB3aGVuIEkgd29yayB3aXRoIGl0IGZ1cnRoZXIuIEknbSBhZnRlciB0aGUgcHJvdG90eXBlcywgaW5saW5lIGZ1bmN0aW9ucywgYW5kIGFueSBvdGhlciBkZWNsYXJhdGlvbnMgdGhhdCBkZWZpbmUgaG93IEkgY2FuIGludGVyYWN0IHdpdGggdGhlIG1vZHVsZS4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW55IGluLWRlcHRoIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIHBsYW4gdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTUwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6MTYuMjg3Mjg3ODM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTkzMDQwODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvc2VnNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6MTYuODA2NTk5Mjg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMzk1MTA0NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGluLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGRpc3RpbGxlZCBmb3IgeW91OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRUc2IEhlYWRlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGluY2x1ZGUvbmV0L3NlZzYqLmhgIGZpbGVzLiBUaGlzIGFyZWEgaXMgdGhlIGNvcmUgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2Nikgd2l0aGluIHRoZSBrZXJuZWwuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBoZWFkZXIgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsLiBUaGV5J2xsIGRlZmluZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIHRoZSBiYWNrYm9uZSBvZiBob3cgU1J2NiBpcyBpbXBsZW1lbnRlZCBhdCB0aGUgbmV0d29yayBsZXZlbC4gTG9va2luZyBhdCB0aGVzZSBoZWFkZXJzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaW50ZXJwcmV0cyBhbmQgbWFuaXB1bGF0ZXMgU1J2NiBzZWdtZW50cywgaGFuZGxlcyB0aGUgZGlmZmVyZW50IFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgb3B0aW9ucywgYW5kIGxpa2VseSwgaG93IHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIHBsYW5lIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbG93LWxldmVsIG1lY2hhbmljcyBvZiBTUnY2LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU0OjI3LjIwMTcwNzU5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImluY2x1ZGUvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcIjZsb3dwYW4uaFwiLFxuICAgIFwiYWN0X2FwaS5oXCIsXG4gICAgXCJhZGRyY29uZi5oXCIsXG4gICAgXCJhZl9pZWVlODAyMTU0LmhcIixcbiAgICBcImFmX3J4cnBjLmhcIixcbiAgICBcImFmX3VuaXguaFwiLFxuICAgIFwiYWZfdnNvY2suaFwiLFxuICAgIFwiYWguaFwiLFxuICAgIFwiYWxpZ25lZF9kYXRhLmhcIixcbiAgICBcImFtdC5oXCIsXG4gICAgXCJhcnAuaFwiLFxuICAgIFwiYXgyNS5oXCIsXG4gICAgXCJheDg4Nzk2LmhcIixcbiAgICBcImJhcmV1ZHAuaFwiLFxuICAgIFwiYm9uZF8zYWQuaFwiLFxuICAgIFwiYm9uZF9hbGIuaFwiLFxuICAgIFwiYm9uZF9vcHRpb25zLmhcIixcbiAgICBcImJvbmRpbmcuaFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2UuaFwiLFxuICAgIFwiYnVzeV9wb2xsLmhcIixcbiAgICBcImNhbGlwc28uaFwiLFxuICAgIFwiY2FuLmhcIixcbiAgICBcImNmZzgwMjExLXdleHQuaFwiLFxuICAgIFwiY2ZnODAyMTEuaFwiLFxuICAgIFwiY2ZnODAyMTU0LmhcIixcbiAgICBcImNoZWNrc3VtLmhcIixcbiAgICBcImNpcHNvX2lwdjQuaFwiLFxuICAgIFwiY2xzX2Nncm91cC5oXCIsXG4gICAgXCJjb2RlbC5oXCIsXG4gICAgXCJjb2RlbF9pbXBsLmhcIixcbiAgICBcImNvZGVsX3FkaXNjLmhcIixcbiAgICBcImNvbXBhdC5oXCIsXG4gICAgXCJkYXRhbGluay5oXCIsXG4gICAgXCJkY2JldmVudC5oXCIsXG4gICAgXCJkY2JubC5oXCIsXG4gICAgXCJkZXZsaW5rLmhcIixcbiAgICBcImRyb3ByZWFzb24tY29yZS5oXCIsXG4gICAgXCJkcm9wcmVhc29uLXFkaXNjLmhcIixcbiAgICBcImRyb3ByZWFzb24uaFwiLFxuICAgIFwiZHNhLmhcIixcbiAgICBcImRzYV9zdHVicy5oXCIsXG4gICAgXCJkc2NwLmhcIixcbiAgICBcImRzZmllbGQuaFwiLFxuICAgIFwiZHN0LmhcIixcbiAgICBcImRzdF9jYWNoZS5oXCIsXG4gICAgXCJkc3RfbWV0YWRhdGEuaFwiLFxuICAgIFwiZHN0X29wcy5oXCIsXG4gICAgXCJlZWUuaFwiLFxuICAgIFwiZXJzcGFuLmhcIixcbiAgICBcImVzcC5oXCIsXG4gICAgXCJlc3BpbnRjcC5oXCIsXG4gICAgXCJldGhvYy5oXCIsXG4gICAgXCJmYWlsb3Zlci5oXCIsXG4gICAgXCJmaWJfbm90aWZpZXIuaFwiLFxuICAgIFwiZmliX3J1bGVzLmhcIixcbiAgICBcImZpcmV3aXJlLmhcIixcbiAgICBcImZsb3cuaFwiLFxuICAgIFwiZmxvd19kaXNzZWN0b3IuaFwiLFxuICAgIFwiZmxvd19vZmZsb2FkLmhcIixcbiAgICBcImZvdS5oXCIsXG4gICAgXCJmcS5oXCIsXG4gICAgXCJmcV9pbXBsLmhcIixcbiAgICBcImdhcnAuaFwiLFxuICAgIFwiZ2VuX3N0YXRzLmhcIixcbiAgICBcImdlbmV0bGluay5oXCIsXG4gICAgXCJnZW5ldmUuaFwiLFxuICAgIFwiZ3JlLmhcIixcbiAgICBcImdyby5oXCIsXG4gICAgXCJncm9fY2VsbHMuaFwiLFxuICAgIFwiZ3NvLmhcIixcbiAgICBcImd0cC5oXCIsXG4gICAgXCJndWUuaFwiLFxuICAgIFwiaGFuZHNoYWtlLmhcIixcbiAgICBcImhvdGRhdGEuaFwiLFxuICAgIFwiaHdibS5oXCIsXG4gICAgXCJpY21wLmhcIixcbiAgICBcImllZWU4MDIxMV9yYWRpb3RhcC5oXCIsXG4gICAgXCJpZWVlODAyMTU0X25ldGRldi5oXCIsXG4gICAgXCJpZWVlODAyMXEuaFwiLFxuICAgIFwiaWZfaW5ldDYuaFwiLFxuICAgIFwiaWZlLmhcIixcbiAgICBcImluZXQ2X2Nvbm5lY3Rpb25fc29jay5oXCIsXG4gICAgXCJpbmV0Nl9oYXNodGFibGVzLmhcIixcbiAgICBcImluZXRfY29tbW9uLmhcIixcbiAgICBcImluZXRfY29ubmVjdGlvbl9zb2NrLmhcIixcbiAgICBcImluZXRfZHNjcC5oXCIsXG4gICAgXCJpbmV0X2Vjbi5oXCIsXG4gICAgXCJpbmV0X2ZyYWcuaFwiLFxuICAgIFwiaW5ldF9oYXNodGFibGVzLmhcIixcbiAgICBcImluZXRfc29jay5oXCIsXG4gICAgXCJpbmV0X3RpbWV3YWl0X3NvY2suaFwiLFxuICAgIFwiaW5ldHBlZXIuaFwiLFxuICAgIFwiaW9hbTYuaFwiLFxuICAgIFwiaXAuaFwiLFxuICAgIFwiaXA2X2NoZWNrc3VtLmhcIixcbiAgICBcImlwNl9maWIuaFwiLFxuICAgIFwiaXA2X3JvdXRlLmhcIixcbiAgICBcImlwNl90dW5uZWwuaFwiLFxuICAgIFwiaXBfZmliLmhcIixcbiAgICBcImlwX3R1bm5lbHMuaFwiLFxuICAgIFwiaXBfdnMuaFwiLFxuICAgIFwiaXBjb21wLmhcIixcbiAgICBcImlwY29uZmlnLmhcIixcbiAgICBcImlwdjYuaFwiLFxuICAgIFwiaXB2Nl9mcmFnLmhcIixcbiAgICBcIml3X2hhbmRsZXIuaFwiLFxuICAgIFwia2NtLmhcIixcbiAgICBcImwzbWRldi5oXCIsXG4gICAgXCJsYWcuaFwiLFxuICAgIFwibGFwYi5oXCIsXG4gICAgXCJsbGMuaFwiLFxuICAgIFwibGxjX2NfYWMuaFwiLFxuICAgIFwibGxjX2NfZXYuaFwiLFxuICAgIFwibGxjX2Nfc3QuaFwiLFxuICAgIFwibGxjX2Nvbm4uaFwiLFxuICAgIFwibGxjX2lmLmhcIixcbiAgICBcImxsY19wZHUuaFwiLFxuICAgIFwibGxjX3NfYWMuaFwiLFxuICAgIFwibGxjX3NfZXYuaFwiLFxuICAgIFwibGxjX3Nfc3QuaFwiLFxuICAgIFwibGxjX3NhcC5oXCIsXG4gICAgXCJsd3R1bm5lbC5oXCIsXG4gICAgXCJtYWM4MDIxMS5oXCIsXG4gICAgXCJtYWM4MDIxNTQuaFwiLFxuICAgIFwibWFjc2VjLmhcIixcbiAgICBcIm1jdHAuaFwiLFxuICAgIFwibWN0cGRldmljZS5oXCIsXG4gICAgXCJtaXA2LmhcIixcbiAgICBcIm1sZC5oXCIsXG4gICAgXCJtcGxzLmhcIixcbiAgICBcIm1wbHNfaXB0dW5uZWwuaFwiLFxuICAgIFwibXB0Y3AuaFwiLFxuICAgIFwibXJwLmhcIixcbiAgICBcIm5jc2kuaFwiLFxuICAgIFwibmRpc2MuaFwiLFxuICAgIFwibmVpZ2hib3VyLmhcIixcbiAgICBcIm5laWdoYm91cl90YWJsZXMuaFwiLFxuICAgIFwibmV0X2RlYnVnLmhcIixcbiAgICBcIm5ldF9mYWlsb3Zlci5oXCIsXG4gICAgXCJuZXRfbmFtZXNwYWNlLmhcIixcbiAgICBcIm5ldF9yYXRlbGltaXQuaFwiLFxuICAgIFwibmV0X3NoYXBlci5oXCIsXG4gICAgXCJuZXRfdHJhY2tlcnMuaFwiLFxuICAgIFwibmV0ZGV2X2xvY2suaFwiLFxuICAgIFwibmV0ZGV2X25ldGxpbmsuaFwiLFxuICAgIFwibmV0ZGV2X3F1ZXVlcy5oXCIsXG4gICAgXCJuZXRkZXZfcnhfcXVldWUuaFwiLFxuICAgIFwibmV0ZXZlbnQuaFwiLFxuICAgIFwibmV0a2l0LmhcIixcbiAgICBcIm5ldGxhYmVsLmhcIixcbiAgICBcIm5ldGxpbmsuaFwiLFxuICAgIFwibmV0bWVtLmhcIixcbiAgICBcIm5ldHByaW9fY2dyb3VwLmhcIixcbiAgICBcIm5leHRob3AuaFwiLFxuICAgIFwibmw4MDIxNTQuaFwiLFxuICAgIFwibnNoLmhcIixcbiAgICBcInBmY3AuaFwiLFxuICAgIFwicGllLmhcIixcbiAgICBcInBpbmcuaFwiLFxuICAgIFwicGt0X2Nscy5oXCIsXG4gICAgXCJwa3Rfc2NoZWQuaFwiLFxuICAgIFwicHB0cC5oXCIsXG4gICAgXCJwcm90b19tZW1vcnkuaFwiLFxuICAgIFwicHJvdG9jb2wuaFwiLFxuICAgIFwicHNhbXBsZS5oXCIsXG4gICAgXCJwc25hcC5oXCIsXG4gICAgXCJwc3AuaFwiLFxuICAgIFwicmF3LmhcIixcbiAgICBcInJhd3Y2LmhcIixcbiAgICBcInJlZC5oXCIsXG4gICAgXCJyZWd1bGF0b3J5LmhcIixcbiAgICBcInJlcXVlc3Rfc29jay5oXCIsXG4gICAgXCJyb3NlLmhcIixcbiAgICBcInJvdXRlLmhcIixcbiAgICBcInJwbC5oXCIsXG4gICAgXCJycHMtdHlwZXMuaFwiLFxuICAgIFwicnBzLmhcIixcbiAgICBcInJzaV85MXguaFwiLFxuICAgIFwicnN0cmVhc29uLmhcIixcbiAgICBcInJ0bmV0bGluay5oXCIsXG4gICAgXCJydG5oLmhcIixcbiAgICBcInNjaF9nZW5lcmljLmhcIixcbiAgICBcInNjaF9wcml2LmhcIixcbiAgICBcInNjbS5oXCIsXG4gICAgXCJzZWN1cmVfc2VxLmhcIixcbiAgICBcInNlZzYuaFwiLFxuICAgIFwic2VnNl9obWFjLmhcIixcbiAgICBcInNlZzZfbG9jYWwuaFwiLFxuICAgIFwic2VsZnRlc3RzLmhcIixcbiAgICBcInNsaGNfdmouaFwiLFxuICAgIFwic21jLmhcIixcbiAgICBcInNubXAuaFwiLFxuICAgIFwic29jay5oXCIsXG4gICAgXCJzb2NrX3JldXNlcG9ydC5oXCIsXG4gICAgXCJzdHAuaFwiLFxuICAgIFwic3RycGFyc2VyLmhcIixcbiAgICBcInN3aXRjaGRldi5oXCIsXG4gICAgXCJ0Y193cmFwcGVyLmhcIixcbiAgICBcInRjcC5oXCIsXG4gICAgXCJ0Y3BfYW8uaFwiLFxuICAgIFwidGNwX2Vjbi5oXCIsXG4gICAgXCJ0Y3Bfc3RhdGVzLmhcIixcbiAgICBcInRjeC5oXCIsXG4gICAgXCJ0aW1ld2FpdF9zb2NrLmhcIixcbiAgICBcInRpcGMuaFwiLFxuICAgIFwidGxzLmhcIixcbiAgICBcInRsc19wcm90LmhcIixcbiAgICBcInRyYW5zcF92Ni5oXCIsXG4gICAgXCJ0c28uaFwiLFxuICAgIFwidHVuX3Byb3RvLmhcIixcbiAgICBcInVkcC5oXCIsXG4gICAgXCJ1ZHBfdHVubmVsLmhcIixcbiAgICBcInZzb2NrX2FkZHIuaFwiLFxuICAgIFwidnhsYW4uaFwiLFxuICAgIFwid2V4dC5oXCIsXG4gICAgXCJ4MjUuaFwiLFxuICAgIFwieDI1ZGV2aWNlLmhcIixcbiAgICBcInhkcC5oXCIsXG4gICAgXCJ4ZHBfcHJpdi5oXCIsXG4gICAgXCJ4ZHBfc29jay5oXCIsXG4gICAgXCJ4ZHBfc29ja19kcnYuaFwiLFxuICAgIFwieGZybS5oXCIsXG4gICAgXCJ4c2tfYnVmZl9wb29sLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiOXBcIixcbiAgICBcImJsdWV0b290aFwiLFxuICAgIFwiaXVjdlwiLFxuICAgIFwibGliZXRoXCIsXG4gICAgXCJtYW5hXCIsXG4gICAgXCJuZXRmaWx0ZXJcIixcbiAgICBcIm5ldG5zXCIsXG4gICAgXCJuZmNcIixcbiAgICBcInBhZ2VfcG9vbFwiLFxuICAgIFwicGhvbmV0XCIsXG4gICAgXCJwaHlcIixcbiAgICBcInBzcFwiLFxuICAgIFwic2N0cFwiLFxuICAgIFwidGNfYWN0XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6MjcuMjAxOTU5MjI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0MjAyNTE4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRUc2IENvZGUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9jYWwgc2VnbWVudCByb3V0aW5nIHNwZWNpZmljcyBhbmQgdGhlIGJyb2FkZXIgU0VHNiBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGhlYWRlciBmaWxlcy4gSSBmaWd1cmUgYGluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaGAgd2lsbCBjb250YWluIHRoZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGxvY2FsIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byB0aGUgaGFuZGxpbmcgb2YgU0VHNiByb3V0ZXMgb24gdGhpcyBzeXN0ZW0uIEl0IHNob3VsZCBkZXRhaWwgdGhpbmdzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpYyBmbGFncywgYW5kIHBlcmhhcHMgc29tZSBvZiB0aGUgZnVuZGFtZW50YWwgZGF0YSB0eXBlcyB1c2VkIGluIHRoZSBsb2NhbCByb3V0aW5nIHRhYmxlLiBUaGVuLCBJJ2xsIG5lZWQgYSBicm9hZGVyIHZpZXcsIHNvIGBpbmNsdWRlL25ldC9zZWc2LmhgIGlzIHRoZSBuZXh0IHN0b3AuIEknbSBleHBlY3RpbmcgdGhpcyBvbmUgdG8gcHJvdmlkZSB0aGUgY29yZSBkZWZpbml0aW9ucywgY29tbW9uIHN0cnVjdHVyZXMsIGFuZCBtYXliZSB0aGUgaW50ZXJmYWNlcyB0aGF0IHRpZSB0aGUgdmFyaW91cyBTRUc2IG1vZHVsZXMgdG9nZXRoZXIuIEl0J2xsIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlIGNvbnRleHQsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGxvY2FsIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgbW9yZSBnZW5lcmFsIFNFRzYgcHJvdG9jb2wuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NDozNC42MjIyMTM4OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqICBBdXRob3JzOlxcbiAgIDY6XFx0ICogIERhdmlkIExlYnJ1biBcXHUwMDNjZGF2aWQubGVicnVuQHVjbG91dmFpbi5iZVxcdTAwM2VcXG4gICA3OlxcdCAqICBlQlBGIHN1cHBvcnQ6IE1hdGhpZXUgWGhvbm5ldXggXFx1MDAzY20ueGhvbm5ldXhAZ21haWwuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDExOlxcdCNkZWZpbmUgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0ZXh0ZXJuIGludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgICAgIHUzMiB0YmxfaWQpO1xcbiAgMTk6XFx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSB7XFxuICAyMjpcXHRcXHRsb2NhbF9sb2NrX3QgYmhfbG9jaztcXG4gIDIzOlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiAgMjQ6XFx0XFx0dTE2IGhkcmxlbjtcXG4gIDI1OlxcdFxcdGJvb2wgdmFsaWQ7XFxuICAyNjpcXHR9O1xcbiAgMjc6XFx0XFxuICAyODpcXHRERUNMQVJFX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuICAyOTpcXHRcXG4gIDMwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NDozNC42MjIyNzQzNTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU0NjkyMDQyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU0VHNiBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTRUc2KSBpbXBsZW1lbnRhdGlvbiwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgaGVhcnQgb2YgaXQgYWxsOiBgaW5jbHVkZS9uZXQvc2VnNi5oYC4gVGhpcyBoZWFkZXIgZmlsZSBpcyB3aGVyZSB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgYXJlLCBzbyBpdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgU0VHNi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBTSUQgbGlzdHMsIHRoZSBjb250cm9sIGZsYWdzLCBwZXJoYXBzIHNvbWUgbWFjcm9zIGZvciBtYW5pcHVsYXRpbmcgdGhlIHNlZ21lbnRzLCBhbmQgb2YgY291cnNlLCB0aGUga2V5IHN0cnVjdHVyZXMgdXNlZCBmb3IgZW5jYXBzdWxhdGluZyB0aGUgSVB2NiBoZWFkZXJzIHdpdGhpbiBJUHY2LiBLbm93aW5nIHRoZXNlIGJ1aWxkaW5nIGJsb2NrcyBpcyBjcnVjaWFsIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUgb3RoZXIgYC5jYCBmaWxlcy4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHRoZSBzZWdtZW50IGxpc3QgZW50cnksIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCBhbmQgbWF5YmUgZXZlbiBzb21lIGlubGluZSBmdW5jdGlvbnMgZm9yIHF1aWNrbHkgYWNjZXNzaW5nIGZpZWxkcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgd2FpdGluZyB0byBiZSB1bmNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NDo1MC4wOTE0ODE1MTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3NlZzYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogIFNSLUlQdjYgaW1wbGVtZW50YXRpb25cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQXV0aG9yOlxcbiAgIDY6XFx0ICogIERhdmlkIExlYnJ1biBcXHUwMDNjZGF2aWQubGVicnVuQHVjbG91dmFpbi5iZVxcdTAwM2VcXG4gICA3OlxcdCAqL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQjaWZuZGVmIF9ORVRfU0VHNl9IXFxuICAxMDpcXHQjZGVmaW5lIF9ORVRfU0VHNl9IXFxuICAxMTpcXHRcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VnNi5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jc3VtX2RpZmY0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBmcm9tLFxcbiAgMTg6XFx0XFx0XFx0XFx0XFx0ICAgICBfX2JlMzIgdG8pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRfX2JlMzIgZGlmZltdID0geyB+ZnJvbSwgdG8gfTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gfmNzdW1fcGFydGlhbCgoY2hhciAqKWRpZmYsIHNpemVvZihkaWZmKSwgfnNrYi1cXHUwMDNlY3N1bSk7XFxuICAyMzpcXHR9XFxuICAyNDpcXHRcXG4gIDI1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3N1bV9kaWZmMTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyICpmcm9tLFxcbiAgMjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTMyICp0bylcXG4gIDI3OlxcdHtcXG4gIDI4OlxcdFxcdF9fYmUzMiBkaWZmW10gPSB7XFxuICAyOTpcXHRcXHRcXHR+ZnJvbVswXSwgfmZyb21bMV0sIH5mcm9tWzJdLCB+ZnJvbVszXSxcXG4gIDMwOlxcdFxcdFxcdHRvWzBdLCB0b1sxXSwgdG9bMl0sIHRvWzNdLFxcbiAgMzE6XFx0XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gfmNzdW1fcGFydGlhbCgoY2hhciAqKWRpZmYsIHNpemVvZihkaWZmKSwgfnNrYi1cXHUwMDNlY3N1bSk7XFxuICAzNDpcXHR9XFxuICAzNTpcXHRcXG4gIDM2OlxcdHN0cnVjdCBzZWc2X3Blcm5ldF9kYXRhIHtcXG4gIDM3OlxcdFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiAgMzg6XFx0XFx0c3RydWN0IGluNl9hZGRyIF9fcmN1ICp0dW5fc3JjO1xcbiAgMzk6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAgNDA6XFx0XFx0c3RydWN0IHJoYXNodGFibGUgaG1hY19pbmZvcztcXG4gIDQxOlxcdCNlbmRpZlxcbiAgNDI6XFx0fTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VnNl9wZXJuZXRfZGF0YSAqc2VnNl9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxcbiAgNDU6XFx0e1xcbiAgNDY6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuICA0NzpcXHRcXHRyZXR1cm4gbmV0LVxcdTAwM2VpcHY2LnNlZzZfZGF0YTtcXG4gIDQ4OlxcdCNlbHNlXFxuICA0OTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDUwOlxcdCNlbmRpZlxcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHRleHRlcm4gaW50IHNlZzZfaW5pdCh2b2lkKTtcXG4gIDU0OlxcdGV4dGVybiB2b2lkIHNlZzZfZXhpdCh2b2lkKTtcXG4gIDU1OlxcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMXFxuICA1NjpcXHRleHRlcm4gaW50IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKTtcXG4gIDU3OlxcdGV4dGVybiB2b2lkIHNlZzZfaXB0dW5uZWxfZXhpdCh2b2lkKTtcXG4gIDU4OlxcdGV4dGVybiBpbnQgc2VnNl9sb2NhbF9pbml0KHZvaWQpO1xcbiAgNTk6XFx0ZXh0ZXJuIHZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpO1xcbiAgNjA6XFx0I2Vsc2VcXG4gIDYxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNlZzZfaXB0dW5uZWxfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuICA2MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2VnNl9pcHR1bm5lbF9leGl0KHZvaWQpIHt9XFxuICA2MzpcXHRzdGF0aWMgaW5saW5lIGludCBzZWc2X2xvY2FsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbiAgNjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNlZzZfbG9jYWxfZXhpdCh2b2lkKSB7fVxcbiAgNjU6XFx0I2VuZGlmXFxuICA2NjpcXHRcXG4gIDY3OlxcdGV4dGVybiBib29sIHNlZzZfdmFsaWRhdGVfc3JoKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBpbnQgbGVuLCBib29sIHJlZHVjZWQpO1xcbiAgNjg6XFx0ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XFxuICA2OTpcXHRleHRlcm4gdm9pZCBzZWc2X2ljbXBfc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0KTtcXG4gIDcwOlxcdGV4dGVybiBpbnQgc2VnNl9kb19zcmhfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxcbiAgNzE6XFx0XFx0XFx0XFx0ICAgICBpbnQgcHJvdG8pO1xcbiAgNzI6XFx0ZXh0ZXJuIGludCBzZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoKTtcXG4gIDczOlxcdGV4dGVybiBpbnQgc2VnNl9sb29rdXBfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW42X2FkZHIgKm5oYWRkcixcXG4gIDc0OlxcdFxcdFxcdFxcdCAgICAgICB1MzIgdGJsX2lkKTtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0LyogSWYgdGhlIHBhY2tldCB3aGljaCBpbnZva2VkIGFuIElDTVAgZXJyb3IgY29udGFpbnMgYW4gU1JIIHJldHVyblxcbiAgNzc6XFx0ICogdGhlIHRydWUgZGVzdGluYXRpb24gYWRkcmVzcyBmcm9tIHdpdGhpbiB0aGUgU1JILCBvdGhlcndpc2UgdXNlIHRoZVxcbiAgNzg6XFx0ICogZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgSVAgaGVhZGVyLlxcbiAgNzk6XFx0ICovXFxuICA4MDpcXHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VnNl9nZXRfZGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTQ6NTAuMDkxNTk1ODExWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjk0OTAwMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRi1iYXNlZCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyB0aGUgQlBGIGludGVncmF0aW9uIHdpdGggSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBJJ20gc3RhcnRpbmcgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBjb21wb25lbnRzLiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgaXMgdGhlIHByaW1hcnkgQlBGIGhlbHBlciBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIHN5bWJvbCB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0aGF0J3MgY2FsbGVkIGZyb20gQlBGIHByb2dyYW1zIHRvIGhhbmRsZSB0aGUgU1JIIG9wZXJhdGlvbnMsIHNvIGl0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgYEZvY3VzU3ltYm9sYC4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBzdGF0aWMgaGVscGVycyBsaWtlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCwgYHNlZzZfZ2V0X3NyaGAsIGFuZCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgc3ltYm9scy4gYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBsb29rcyBpbnRlcmVzdGluZyBzaW5jZSB0aGF0IHNldHMgdXAgYHNyaF9zdGF0ZWAgYW5kIGludm9rZXMgdGhlIEJQRiBwcm9ncmFtIGNhbGxpbmcgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGVyZWZvcmUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCB3aWxsIGFsc28gYmUgaW5jbHVkZWQgaW4gYEZvY3VzU3ltYm9sc2AuIEZpbmFsbHksIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYCB3aWxsIGFsc28gYmUgaW5jbHVkZWQgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbk5leHQsIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9TRUc2X0JQRmAgaXMgdGhlIGtleSwgYW5kIGl0J3MgYGRlZl9ib29sIHlgIGlmIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGFuZCBgSVBWNmAgYXJlIGVuYWJsZWQsIGFuZCBgSVBWNl9TRUc2X0xXVFVOTkVMYCBkZXBlbmRzIG9uIGBJUFY2YC4gVGhpcyBtZWFucyBgSVBWNmAsIGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBgSVBWNl9TRUc2X0JQRmAgbXVzdCBiZSBlbmFibGVkLiBBbHNvLCB0aGUgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIHJlbGF0ZWQgaGVscGVycyBhcmUgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpYC4gVGhlc2UgYXJlIG15IGBFbmFibGVDb25maWdzYC4gSSB3aWxsIGFsc28gbmVlZCBgQlBGX1NZU0NBTExgIHRvIGJlIGVuYWJsZWQsIGJlY2F1c2UgdGhlIEJQRiBwcm9ncmFtIG5lZWRzIHRvIGJlIGFjY2Vzc2libGUuXG5cblNvLCB0byBzdW1tYXJpemUgZm9yIGZ1enppbmcgcHVycG9zZXM6XG5cbiogICAqKmBGb2N1c1N5bWJvbHNgKio6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCwgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCwgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgXG4qICAgKipgRW5hYmxlQ29uZmlnc2AqKjogYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgQlBGX1NZU0NBTExgXG5cbkdpdmVuIHRoZXNlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgYXJlIHRoZSBjcnVjaWFsIGFzcGVjdHMgdG8gZW5hYmxlIGFuZCB0YXJnZXQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIG9mIHRoZSBCUEYtYmFzZWQgU1JIIGltcGxlbWVudGF0aW9uLiBUaGlzIGFuYWx5c2lzIGlzIGNvbmNpc2UgYW5kIHByb3ZpZGVzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMDIsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MDIuMzg2NDk4ODMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODQ0MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInNlZzZfYnBmX2hhc192YWxpZF9zcmhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBTUkggc3RhdGUgaGFuZGxpbmcgYW5kIHNrYiBsaW5lYXIgYnVmZmVyIHZhbGlkYXRpb24gKHBza2JfbWF5X3B1bGwgaW5zdGVhZCBvZiBwc2tiX3B1bGwpIGluIHRoZSBTUnY2IEJQRiBoZWxwZXIgYnBmX2x3dF9zZWc2X2FjdGlvbi4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBhbmQgQlBGIHBhY2tldCBoYW5kbGluZyBwYXRocyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIixcbiAgICBcInNlZzZfYnBmX2hhc192YWxpZF9zcmhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBTUkggc3RhdGUgaGFuZGxpbmcgYW5kIHNrYiBsaW5lYXIgYnVmZmVyIHZhbGlkYXRpb24gKHBza2JfbWF5X3B1bGwgaW5zdGVhZCBvZiBwc2tiX3B1bGwpIGluIHRoZSBTUnY2IEJQRiBoZWxwZXIgYnBmX2x3dF9zZWc2X2FjdGlvbi4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBhbmQgQlBGIHBhY2tldCBoYW5kbGluZyBwYXRocyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MDIuNTEyMzQ5OTg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQzMTAwNzEwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NTowMi41MTI4MDIzNTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1OTQzMDk2MTI4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXFxuXFxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90OlxcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cXG4zLiBJbnRyb2R1Y2UgYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjODg2MGUzMzIzNGJjNjhkOTFlNWUyYTIzZmZjYzUxMDg3NGM3ZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjQ3OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uMWRkM2E2ODVkMWI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTgsMTUgKzcwMTgsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbitcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFxuLVx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXHUwMDNjIDApIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSArIHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbitcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuK1x0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbitcdGlmICghc3JoKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbitcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4gfVxuIFxuIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTcwNTksMTUgKzcwNjAsMTggQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXG4gXHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbi1cdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuK1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG4gXG4gXHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuIFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIFxuLVx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4gXHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbkBAIC03MDc1LDggKzcwNzksNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4gXHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XG5AQCAtNzA4NCw4ICs3MDg3LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuK1x0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVmYXVsdDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU1OjAyLjUxMjgwMzI2N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQ3NDY2NTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBGdXp6aW5nIFJlcXVlc3QqKlxuXG5Pa2F5LCBzbyBzb21lb25lJ3MgYXNraW5nIG1lIHdoZXRoZXIgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzIG5lZWRzIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzPyBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIGtlZXBpbmcgaW4gbWluZCB0aGUgc2FmZXR5IGd1aWRlbGluZXMgd2UndmUgZXN0YWJsaXNoZWQuIFRoaXMgaXNuJ3QgYWJvdXQgbWFsaWNpb3VzIGFjdGl2aXR5IG9yIGV4cGxvaXQgZGV2ZWxvcG1lbnQ7IGl0J3MgYSByb3V0aW5lIHBhdGNoIGFuYWx5c2lzIGZvY3VzaW5nIG9uIHNhbml0aXplciBzZWxlY3Rpb24g4oCTIEtBU0FOIHZlcnN1cyBLTVNBTi4gR29vZCwgdGhhdCBtYWtlcyBpdCBhIG11Y2ggbW9yZSBtYW5hZ2VhYmxlIHRhc2suXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIFRoZXkncmUgd29ya2luZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0J3MgdGhlIGtleSBhcmVhIG9mIGNvbmNlcm4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSA3MDE4LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hldGhlciBLTVNBTiBpcyB3YXJyYW50ZWQgYmFzZWQgb24gdGhlIGNoYW5nZXMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MzAuOTg3NDcxMjlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4MTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDEwOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuNzAxMTpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG43MDEyOlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG43MDEzOlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG43MDE0OlxcdFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRVxcbjcwMTU6XFx0fTtcXG43MDE2OlxcdFxcbjcwMTc6XFx0c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG43MDE4OlxcdHtcXG43MDE5OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuNzAyMDpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjcwMjE6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuNzAyMjpcXHRcXG43MDIzOlxcdFxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbjcwMjQ6XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbjcwMjU6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuNzAyNjpcXHRcXHRpZiAoIXNyaClcXG43MDI3OlxcdFxcdFxcdHJldHVybjtcXG43MDI4OlxcdFxcbjcwMjk6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gPSBzcmgtXFx1MDAzZWhkcmxlbiBcXHUwMDNjXFx1MDAzYyAzO1xcbjcwMzA6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuNzAzMTpcXHR9XFxuNzAzMjpcXHRcXG43MDMzOlxcdEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbjcwMzQ6XFx0XFx0ICAgdTMyLCBhY3Rpb24sIHZvaWQgKiwgcGFyYW0sIHUzMiwgcGFyYW1fbGVuKVxcbjcwMzU6XFx0e1xcbjcwMzY6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDM3OlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAzODpcXHRcXHRpbnQgaGRyb2ZmID0gMDtcXG43MDM5OlxcdFxcdGludCBlcnI7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyaF9zdGF0ZS1cXHUwMDNlYmhfbG9jayk7XFxuNzA0MjpcXHRcXHRzd2l0Y2ggKGFjdGlvbikge1xcbjcwNDM6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcXG43MDQ0OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNDU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNDY6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSlcXG43MDQ3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNDg6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCAoc3RydWN0IGluNl9hZGRyICopcGFyYW0sIDApO1xcbjcwNDk6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfVDpcXG43MDUwOlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTI6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDUzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNTQ6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcXG43MDU1OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcXG43MDU2OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTg6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDU5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNjA6XFx0XFxuNzA2MTpcXHRcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNjM6XFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcXG43MDY0OlxcdFxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gTlVMTDtcXG43MDY1OlxcdFxcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MDY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDY3OlxcdFxcdFxcdH1cXG43MDY4OlxcdFxcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbjcwNjk6XFx0XFxuNzA3MDpcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaGRyb2ZmKTtcXG43MDcxOlxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjcwNzI6XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG43MDczOlxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuNzA3NDpcXHRcXG43MDc1OlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA3NjpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbjcwNzc6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XFxuNzA3ODpcXHRcXHRcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDc5OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDgwOlxcdFxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxcbjcwODE6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDgyOlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA4MzpcXHRcXG43MDg0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA4NTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcXG43MDg2OlxcdFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwODc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwODg6XFx0XFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcXG43MDg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuNzA5MDpcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbjcwOTE6XFx0XFxuNzA5MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjcwOTM6XFx0XFx0ZGVmYXVsdDpcXG43MDk0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwOTU6XFx0XFx0fVxcbjcwOTY6XFx0fVxcbjcwOTc6XFx0XFxuNzA5ODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG8gPSB7XFxuNzA5OTpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX2x3dF9zZWc2X2FjdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTU6MzAuOTkwMzU3MzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIxODI1MTQzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGludG8sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIFNFRzYgQlBGIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUgU0VHNiBCUEYgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBvZiBgc2VnNl9icGZfc3JoX3N0YXRlc2AgYW5kIGBzZWc2X2dldF9zcmhgIOKAkyBjcml0aWNhbCBjb21wb25lbnRzIGluIHRoZSBCUEYtZHJpdmVuIFNFRzYgZGF0YSBwbGFuZS4gSSdtIGVzcGVjaWFsbHkga2VlbiBvbiBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIGBzcmhfc3RhdGVgIGFyZSBiZWluZyBoYW5kbGVkLiBUbyBnYWluIHRoaXMgdW5kZXJzdGFuZGluZyBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgdGhlc2Uga2V5IGlkZW50aWZpZXJzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvaXB2Ni9zZWc2LmNgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiB0aGUgY29yZSBmdW5jdGlvbnMsIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgdHJhbnNpdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MuIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIEJQRiBoZWxwZXJzIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIGluZnJhc3RydWN0dXJlIGluIG9yZGVyIHRvIHRob3JvdWdobHkgYXNzZXNzIHRoZSBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU1OjQzLjE3Mjg3NTQ4N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NTAyMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2JwZl9zcmhfc3RhdGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaD0yMT1zdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaC0yNy1cXG5pbmNsdWRlL25ldC9zZWc2X2xvY2FsLmg6Mjg6REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbmluY2x1ZGUvbmV0L3NlZzZfbG9jYWwuaC0yOS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5NzQ9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTc3LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6Njk3ODpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzktXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTc9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTktXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDIwOlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyMS1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDM2LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAzNzpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzgtXFx0aW50IGhkcm9mZiA9IDA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTA4PUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTExLVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzExMjpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTMtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzODY6REVGSU5FX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcykgPSB7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODctXFx0LmJoX2xvY2tcXHQ9IElOSVRfTE9DQUxfTE9DSyhiaF9sb2NrKSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzkwPWJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzOTItXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM5MzpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk0LVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVxcdTAwM2Vzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQxND1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQzMy1cXHQgKi9cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNDpcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQzNTpcXHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDM2LVxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTctXFx0XFx0Z290byBkcm9wO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4OlxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTktXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2NS1kcm9wOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDY2OlxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjctXFx0a2ZyZWVfc2tiKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU1OjQ1Ljg1NzkwNzE5NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc5NDk5ODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0VHNiBMb2NhbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFNFRzYgbG9jYWwgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgdGhlIHByaW1hcnkgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZXNpZGU/XCIgVGhhdCBsZWFkcyBtZSBkaXJlY3RseSB0byBgaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oYC4gSSdsbCB3YW50IHRvIHNlZSB0aGUgZXhwb3NlZCBBUElzLCBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgU0lEcyBhbmQgbG9jYWwgcG9saWN5LCBhbmQgbWF5YmUgc29tZSBvZiB0aGUgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMuIFRoZW4sIG5hdHVyYWxseSwgSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhvc2UgZWxlbWVudHMgYXJlICp1c2VkKiBhbmQgKmltcGxlbWVudGVkKi4gU28sIEknbGwgaGVhZCBvdmVyIHRvIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBjb2RlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIFNJRCBwcm9jZXNzaW5nLCB0aGUgbG9jYWwgcG9saWN5IGFwcGxpY2F0aW9uIGxvZ2ljLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGZvcndhcmRpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCBpdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjoyMS42NTI5MDgyODZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc2VnNl9sb2NhbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgU1ItSVB2NiBpbXBsZW1lbnRhdGlvblxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqICBBdXRob3JzOlxcbiAgIDY6XFx0ICogIERhdmlkIExlYnJ1biBcXHUwMDNjZGF2aWQubGVicnVuQHVjbG91dmFpbi5iZVxcdTAwM2VcXG4gICA3OlxcdCAqICBlQlBGIHN1cHBvcnQ6IE1hdGhpZXUgWGhvbm5ldXggXFx1MDAzY20ueGhvbm5ldXhAZ21haWwuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpZm5kZWYgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDExOlxcdCNkZWZpbmUgX05FVF9TRUc2X0xPQ0FMX0hcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0ZXh0ZXJuIGludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgICAgIHUzMiB0YmxfaWQpO1xcbiAgMTk6XFx0ZXh0ZXJuIGJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSB7XFxuICAyMjpcXHRcXHRsb2NhbF9sb2NrX3QgYmhfbG9jaztcXG4gIDIzOlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiAgMjQ6XFx0XFx0dTE2IGhkcmxlbjtcXG4gIDI1OlxcdFxcdGJvb2wgdmFsaWQ7XFxuICAyNjpcXHR9O1xcbiAgMjc6XFx0XFxuICAyODpcXHRERUNMQVJFX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuICAyOTpcXHRcXG4gIDMwOlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjoyMS42NTI5OTA3MzZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI0MzAwNjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2gsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHNlZzZfbG9jYWwuYyAtIEEgRGVlcCBEaXZlIChMaW5lcyAxMzgwLTE0NzApKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyAxMzgwIHRvIDE0NzAgd2l0aGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIHRoZSBwcm9jZXNzaW5nIGFuZCBoYW5kbGluZyBvZiBTZWdtZW50IFJvdXRpbmcgSVB2NiAoU1J2NikgbG9jYWwgcG9saWNpZXMuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgZ2VuZXJhbCBhcmVhIG9mIG5ldHdvcmtpbmcgSSB3b3JrIGluLCBpdCdzIGEgc2FmZSBiZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgY2h1bmssIHNvIEknbSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBmdW5jdGlvbiBjYWxscyBhbmQgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb25zIHRvIHVuZm9sZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaXNtcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBtYWluIGZ1bmN0aW9ucyBpbiBwbGF5LiBJcyB0aGVyZSBhbiBpZiBzdGF0ZW1lbnQgb3Igc29tZSBzb3J0IG9mIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgcmFuZ2UgdGhhdCBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4gUGVyaGFwcyBpdCBjb25jZXJucyB0aGUgcGFyc2luZyBvZiB0aGUgU1JIIChTZWdtZW50IFJvdXRpbmcgSGVhZGVyKSBleHRlbnNpb24gaGVhZGVyPyBBcmUgdGhleSBjaGVja2luZyBmb3Igc3BlY2lmaWMgYmVoYXZpb3JzLCBsaWtlIGVuY2Fwc3VsYXRpb24gb3IgZGVjYXBzdWxhdGlvbiBvZiB0aGUgdHJhZmZpYz8gT3IgbWF5YmUgdGhpcyBpbnZvbHZlcyBtYW5pcHVsYXRpb24gb2YgdGhlIHJvdXRpbmcgdGFibGVzIG9yIGZvcndhcmRpbmcgZGF0YSBzdHJ1Y3R1cmVzP1xuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGNvbWJpbmF0aW9uIG9mIEMtc3BlY2lmaWMgZWxlbWVudHM7IHBvaW50ZXJzLCBzdHJ1Y3RzLCBhbmQgaG9wZWZ1bGx5IHNvbWUga2VybmVsLWxldmVsIGFic3RyYWN0aW9ucyB0byBrZWVwIGl0IHJlYWRhYmxlLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgcmFjZSBjb25kaXRpb25zLiBLbm93aW5nIGtlcm5lbCBjb2RlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBpZiB0aGlzIGludm9sdmVzIGFjY2Vzc2luZyBzaGFyZWQgcmVzb3VyY2VzLiBMb2NraW5nIHByaW1pdGl2ZXMg4oCTIHNwaW5sb2NrcywgbXV0ZXhlcywgcmVhZC13cml0ZSBsb2NrcyDigJMgd2lsbCBiZSBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyB0aHJlYWQtc2FmZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGR1ZSB0byBleGNlc3NpdmUgbG9ja2luZy5cblxuVGhlbiBJJ2xsIHNjcnV0aW5pemUgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgYXJlIHRoZXkgZGVhbGluZyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBpbnZhbGlkIHNlZ21lbnQgbGlzdHMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnM/IEdvb2QgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LCBlc3BlY2lhbGx5IGluIG5ldHdvcmtpbmcgY29kZSwgdG8gcHJldmVudCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYW5kIGVuc3VyZSB0aGUgc3lzdGVtJ3Mgcm9idXN0bmVzcy4gQW55IHVzZSBvZiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgb3BlcmF0aW9ucyBpcyBsaWtlbHkgaGVyZSwgc28gSSdsbCBiZSBsb29raW5nIGF0IGhvdyB0aGV5J3JlIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBJdCBjb3VsZCBpbnZvbHZlIHRoZSBzZXR1cCBvZiBzb21lIGtpbmQgb2YgbG9jYWwgcG9saWN5IHRvIGZvcndhcmQgcGFja2V0cy5cblxuRXNzZW50aWFsbHksIEkgYW0gZ29pbmcgdG8gaWRlbnRpZnkgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgYmVpbmcgcGVyZm9ybWVkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgdXNlZCB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC4gSSdsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIG1pbmRzZXQgb2YgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU2OjI3Ljg5NjAwMTQzOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODA6XFx0XFxuMTM4MTpcXHRkcm9wOlxcbjEzODI6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTM4MzpcXHRcXHRyZXR1cm4gZXJyO1xcbjEzODQ6XFx0fVxcbjEzODU6XFx0XFxuMTM4NjpcXHRERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG4xMzg3OlxcdFxcdC5iaF9sb2NrXFx0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXFxuMTM4ODpcXHR9O1xcbjEzODk6XFx0XFxuMTM5MDpcXHRib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzkxOlxcdHtcXG4xMzkyOlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuMTM5MzpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjEzOTQ6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4xMzk1OlxcdFxcbjEzOTY6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG4xMzk3OlxcdFxcdGlmICh1bmxpa2VseShzcmggPT0gTlVMTCkpXFxuMTM5ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTM5OTpcXHRcXG4xNDAwOlxcdFxcdGlmICh1bmxpa2VseSghc3JoX3N0YXRlLVxcdTAwM2V2YWxpZCkpIHtcXG4xNDAxOlxcdFxcdFxcdGlmICgoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAyNiA3KSAhPSAwKVxcbjE0MDI6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0MDM6XFx0XFxuMTQwNDpcXHRcXHRcXHRzcmgtXFx1MDAzZWhkcmxlbiA9ICh1OCkoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAzZVxcdTAwM2UgMyk7XFxuMTQwNTpcXHRcXHRcXHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMywgdHJ1ZSkpXFxuMTQwNjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0MDk6XFx0XFx0fVxcbjE0MTA6XFx0XFxuMTQxMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNDEyOlxcdH1cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE0MTU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbjE0MTY6XFx0e1xcbjE0MTc6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xcbjE0MTg6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuMTQxOTpcXHRcXHRpbnQgcmV0O1xcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xcbjE0MjI6XFx0XFx0aWYgKCFzcmgpIHtcXG4xNDIzOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE0MjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQyNTpcXHRcXHR9XFxuMTQyNjpcXHRcXHRhZHZhbmNlX25leHRzZWcoc3JoLCBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpO1xcbjE0Mjc6XFx0XFxuMTQyODpcXHRcXHQvKiBUaGUgYWNjZXNzIHRvIHRoZSBwZXItQ1BVIGJ1ZmZlciBzcmhfc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHJ1bm5pbmdcXG4xNDI5OlxcdFxcdCAqIGFsd2F5cyBpbiBzb2Z0aXJxIGNvbnRleHQgKHdpdGggZGlzYWJsZWQgQkgpLiBPbiBQUkVFTVBUX1JUIHRoZVxcbjE0MzA6XFx0XFx0ICogcmVxdWlyZWQgbG9ja2luZyBpcyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIGxvY2FsX2xvY2tfbmVzdGVkX2JoKClcXG4xNDMxOlxcdFxcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcXG4xNDMyOlxcdFxcdCAqIGJwZl9wcm9nX3J1bl9zYXZlX2NiKCkuXFxuMTQzMzpcXHRcXHQgKi9cXG4xNDM0OlxcdFxcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbjE0MzU6XFx0XFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4xNDM2OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbjE0Mzc6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gPSBzcmgtXFx1MDAzZWhkcmxlbiBcXHUwMDNjXFx1MDAzYyAzO1xcbjE0Mzg6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuMTQzOTpcXHRcXG4xNDQwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNDQxOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4xNDQyOlxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXFx1MDAzZWJwZi5wcm9nLCBza2IpO1xcbjE0NDM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ0NDpcXHRcXG4xNDQ1OlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMTQ0NjpcXHRcXHRjYXNlIEJQRl9PSzpcXG4xNDQ3OlxcdFxcdGNhc2UgQlBGX1JFRElSRUNUOlxcbjE0NDg6XFx0XFx0XFx0YnJlYWs7XFxuMTQ0OTpcXHRcXHRjYXNlIEJQRl9EUk9QOlxcbjE0NTA6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NTE6XFx0XFx0ZGVmYXVsdDpcXG4xNDUyOlxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiYnBmLXNlZzZsb2NhbDogSWxsZWdhbCByZXR1cm4gdmFsdWUgJXVcXFxcblxcXCIsIHJldCk7XFxuMTQ1MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTQ1NDpcXHRcXHR9XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjE0NTc6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NTg6XFx0XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDU5OlxcdFxcbjE0NjA6XFx0XFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxuMTQ2MTpcXHRcXHRcXHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XFxuMTQ2MjpcXHRcXG4xNDYzOlxcdFxcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcXG4xNDY0OlxcdFxcbjE0NjU6XFx0ZHJvcDpcXG4xNDY2OlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxuMTQ2NzpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDY4OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0Njk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjoyNy44OTYyMTA2MzhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExMDk5NjM2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBhbmQgZnVuY3Rpb25hbGl0eSBvZiBgc2VnNl9nZXRfc3JoYC4gSSdsbCBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0YXJnZXRlZCBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgc2VnNl9nZXRfc3JoYC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgY2FsbGVycyBhbmQgYW55IHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYnVpbGRpbmcgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGVsZW1lbnRzIGlzIGtleSBmb3IgbWUgdG8gdGhlbiBkZXRlcm1pbmUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdG8gc2VlIHdoZXJlIHRoZSBwb3RlbnRpYWwgZGVzaWduIGNob2ljZXMgaGF2ZSBiZWVuIG1hZGUsIGFzIHdlbGwgYXMgd2hlcmUgbXkgZm9jdXMgc2hvdWxkIGJlIGluIGV2YWx1YXRpbmcgdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzo1NjozOS4wMDYxNzczNTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTg2NzcyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9nZXRfc3JoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NlZzYuaD02Nz1leHRlcm4gYm9vbCBzZWc2X3ZhbGlkYXRlX3NyaChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgaW50IGxlbiwgYm9vbCByZWR1Y2VkKTtcXG5pbmNsdWRlL25ldC9zZWc2Lmg6Njg6ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNz1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDIzOlxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjQtXFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNi5jPTI2PWJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZClcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy03OC1cXG5uZXQvaXB2Ni9zZWc2LmM6Nzk6c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxcbm5ldC9pcHY2L3NlZzYuYy04MC17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9MTEyPXZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy0xMTctXFx0LyogVXBkYXRlIG5ldHdvcmsgaGVhZGVyIHRvIHBvaW50IHRvIHRoZSBpbnZva2luZyBwYWNrZXRcXG5uZXQvaXB2Ni9zZWc2LmM6MTE4OlxcdCAqIGluc2lkZSB0aGUgSUNNUCBwYWNrZXQsIHNvIHdlIGNhbiB1c2UgdGhlIHNlZzZfZ2V0X3NyaCgpXFxubmV0L2lwdjYvc2VnNi5jLTExOS1cXHQgKiBoZWxwZXIuXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmMtMTIyLVxcbm5ldC9pcHY2L3NlZzYuYzoxMjM6XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxubmV0L2lwdjYvc2VnNi5jLTEyNC1cXHRpZiAoIXNyaClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMTY9c3RhdGljIHN0cnVjdCBpcHY2X3NyX2hkciAqZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMTktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjIyMDpcXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCBJUDZfRkhfRl9TS0lQX1JIKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIxLVxcdGlmICghc3JoKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIzNi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjM3OlxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzgtXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiBzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZSAwKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTQ5ND1lbnVtIHNlZzZfbG9jYWxfcGt0aW5mbyB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtNTA0LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo1MDU6c3RhdGljIGVudW0gc2VnNl9sb2NhbF9wa3RpbmZvIHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy01MDYte1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzUxOlxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTItXFx0c3Job2ZmID0gc3JoID8gKCh1bnNpZ25lZCBjaGFyICopc3JoIC0gc2tiLVxcdTAwM2VkYXRhKSA6IDA7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc1MzpcXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1NC0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU2OjQzLjAyNDg2MDA4M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDgyMDE2OTMzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgc2VnNl9nZXRfc3JoYCBpbXBsZW1lbnRhdGlvbiwgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIGBzZWc2X2dldF9zcmhgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHB1bGxpbmcgdXAgdGhlIGBzZWc2X2dldF9zcmhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY2L3NlZzYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgYW5kIGhhbmRsZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgU1J2NiwgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWNrZXQgcHJvY2Vzc2luZywgc28gSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCBvcGVyYXRlcyBhdCBhIGxvdyBsZXZlbC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhpbmdzIGxpa2U6IGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBTUkggdHlwZXMgKGlmIGFueSksIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHJldHJpZXZhbCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFNSdjYgc3RhY2suIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGVmZmljaWVuY3k7IGhvdyBpdCBhY2Nlc3NlcyB0aGUgaGVhZGVyIGRldGFpbHMgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiBTUnY2IHJvdXRpbmcuIExldCdzIHNlZSBob3cgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjU4OjMxLjIyNjU1NjU0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzc6XFx0fVxcbiAgNzg6XFx0XFxuICA3OTpcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gIDgyOlxcdFxcdGludCBsZW4sIHNyaG9mZiA9IDA7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBcXHUwMDI2ZmxhZ3MpIFxcdTAwM2MgMClcXG4gIDg1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzcmhvZmYgKyBzaXplb2YoKnNyaCkpKVxcbiAgODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0bGVuID0gKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc3Job2ZmICsgbGVuKSlcXG4gIDk1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBub3RlIHRoYXQgcHNrYl9tYXlfcHVsbCBtYXkgY2hhbmdlIHBvaW50ZXJzIGluIGhlYWRlcjtcXG4gIDk4OlxcdFxcdCAqIGZvciB0aGlzIHJlYXNvbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVsb2FkIHRoZW0gd2hlbiBuZWVkZWQuXFxuICA5OTpcXHRcXHQgKi9cXG4gMTAwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgdHJ1ZSkpXFxuIDEwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0cmV0dXJuIHNyaDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0LyogRGV0ZXJtaW5lIGlmIGFuIElDTVAgaW52b2tpbmcgcGFja2V0IGNvbnRhaW5zIGEgc2VnbWVudCByb3V0aW5nXFxuIDEwOTpcXHQgKiBoZWFkZXIuICBJZiBpdCBkb2VzLCBleHRyYWN0IHRoZSBvZmZzZXQgdG8gdGhlIHRydWUgZGVzdGluYXRpb25cXG4gMTEwOlxcdCAqIGFkZHJlc3MsIHdoaWNoIGlzIGluIHRoZSBmaXJzdCBzZWdtZW50IGFkZHJlc3MuXFxuIDExMTpcXHQgKi9cXG4gMTEyOlxcdHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdF9fdTE2IG5ldHdvcmtfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6NTg6MzEuMjI2NjI0ODRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc3NDAyNjYyNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VnNiBCUEYgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcHJvYmxlbSB0aGlzIGFpbXMgdG8gc29sdmUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgc3RhdGUgd2l0aGluIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiBgc2VnNmAuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGFwcGVhcnMgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgaXB2Nl9maW5kX2hkcmAgdG8gbG9jYXRlIHRoZSBTUkggd2l0aGluIGEgcGFja2V0LCBjYWxjdWxhdGluZyBhbiBvZmZzZXQuIE5vdyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc2VnNl9nZXRfc3JoKHNrYiwgMClgIGFuZCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYC4gVGhlIGZpcnN0IGNoYW5nZSBzaW1wbGlmaWVzIFNSSCByZXRyaWV2YWwsIGFuZCB0aGUgc2Vjb25kIG11c3QgYmUgc29tZSBzb3J0IG9mIHBvaW50ZXIgcmUtY2FsY3VsYXRpb247IG1vc3QgbGlrZWx5IGZvciB3aGVuIGFuIHNrYiBpcyBhZGp1c3RlZC4gVGhlIGNvbmRpdGlvbmFsIGhhcyBiZWVuIHNpbXBsaWZpZWQ6IHdoZXJlIGJlZm9yZSB0aGVyZSB3YXMgYSBuZWdhdGl2ZSByZXR1cm4gZnJvbSBgaXB2Nl9maW5kX2hkcmAgdGhpcyBpcyBub3cgaGFuZGxlZCBieSBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBzZWc2X2dldF9zcmgoKWAuXG5cblRoZSBuZXh0IHBhcnQgb2YgdGhlIHBhdGNoIHRhY2tsZXMgdGhlIHNpdHVhdGlvbiBpbiB3aGljaCB3ZSBhZGp1c3QgdGhlIElQdjYgaGVhZGVyLCBsaWtlIHdoZW4gYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNmAgb3IgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUGAgYWN0aW9ucyBhcmUgdGFrZW4uIFByZXZpb3VzbHkgaXQgcHVsbGVkIHRoZSBoZWFkZXIuIE5vdywgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayB3aXRoIGBwc2tiX21heV9wdWxsYCB0byBzZWUgaWYgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBwdWxsLCBhbmQgaWYgbm90IHNldHMgYHNyaGAgdG8gbnVsbCBhbmQgY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50IGZvciBhdm9pZGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBBZnRlciBgcHNrYl9tYXlfcHVsbGAgc3VjY2VlZHMsIHRoZXJlJ3MgYSBwdWxsIHdpdGggYF9fc2tiX3B1bGxgIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG5ldHdvcmsgaGVhZGVyLiBOb3RhYmx5LCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2Agc2VlbXMgdG8gYmUgY2FsbGVkICphZnRlciogaGVhZGVyIGFkanVzdG1lbnRzIGluIGJvdGggc2NlbmFyaW9zLlxuXG5UaGUgYGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYilgIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBzZXZlcmFsIGNhc2VzIGFmdGVyIFNSSCBwcm9jZXNzaW5nLCBhbmQgYWZ0ZXIgdGhlIGFjdGlvbnMgd2hpY2ggYWRqdXN0IHRoZSBwYWNrZXQgaGVhZGVycy4gVGhpcyBzdWdnZXN0cyB0aGUgaW50ZW50IGlzIHRvIHVwZGF0ZSB0aGUgU1JIIHN0YXRlICphZnRlciogcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSBwYWNrZXQgc3RydWN0dXJlLiBDcml0aWNhbGx5LCB0aGVyZSdzIG5vdyBhbiB1cGRhdGUgdG8gdGhlIGNhbGxpbmcgY29udmVudGlvbiBvZiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCB3aGljaCBkb2VzICpub3QqIGhhcHBlbiBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgY29kZS5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgcGF0Y2guIFRoaXMgaXMgY2xlYXJseSBhIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgU1JIIGluZm9ybWF0aW9uLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc2AgYW5kIGBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaGAgdG8gdW5kZXJzdGFuZCBob3cgYHNyaF9zdGF0ZWAgaXMgYmVpbmcgKnVzZWQqIGJleW9uZCBqdXN0IHRoZSB1cGRhdGUuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHRydWUga2V5IHRvIGhvdyB0aGUgc3RhdGUgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGJ5IHRoZSBCUEYgcHJvZ3JhbS5cblxuT3ZlcmFsbCwgaXQgbG9va3MgbGlrZSBhIGNsZWFuLXVwLCBvcHRpbWl6YXRpb24sIGFuZCBidWdmaXggcmVsYXRlZCB0byBTUkggc3RhdGUgbWFuYWdlbWVudCBpbiB0aGUgY29udGV4dCBvZiBCUEYtYmFzZWQgU2VnbWVudCBSb3V0aW5nLCBmb2N1c2luZyBvbiBlbnN1cmluZyBwb2ludGVyIHZhbGlkaXR5IGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb25zLiBUaGUgYWRkaXRpb24gb2YgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgIHNlZW1zIHRvIGJlIHRoZSBsaW5jaHBpbiB0byBtYWludGFpbmluZyBjb3JyZWN0IHBvaW50ZXIgdmFsdWVzIGFmdGVyIHRoZSBgc2tiYCBpcyBhZGp1c3RlZCwgYXMgd2VsbCBhcyBhIG1vcmUgcm9idXN0IGNoZWNrIHRvIGRldGVjdCB0aGUgYWJzZW5jZSBvZiBhbiBTUkguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA4OjAxOjI4LjYyOTI5MDIyOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjk3MDpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVcXG42OTcxOlxcdH07XFxuNjk3MjpcXHRcXG42OTczOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbjY5NzQ6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuNjk3NTpcXHRcXHQgICBjb25zdCB2b2lkICosIGZyb20sIHUzMiwgbGVuKVxcbjY5NzY6XFx0e1xcbjY5Nzc6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG42OTc4OlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNjk3OTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbjY5ODA6XFx0XFx0dm9pZCAqc3JoX3RsdnMsICpzcmhfZW5kLCAqcHRyO1xcbjY5ODE6XFx0XFx0aW50IHNyaG9mZiA9IDA7XFxuNjk4MjpcXHRcXG42OTgzOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyaF9zdGF0ZS1cXHUwMDNlYmhfbG9jayk7XFxuNjk4NDpcXHRcXHRpZiAoc3JoID09IE5VTEwpXFxuNjk4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42OTg2OlxcdFxcbjY5ODc6XFx0XFx0c3JoX3RsdnMgPSAodm9pZCAqKSgoY2hhciAqKXNyaCArICgoc3JoLVxcdTAwM2VmaXJzdF9zZWdtZW50ICsgMSkgXFx1MDAzY1xcdTAwM2MgNCkpO1xcbjY5ODg6XFx0XFx0c3JoX2VuZCA9ICh2b2lkICopKChjaGFyICopc3JoICsgc2l6ZW9mKCpzcmgpICsgc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4pO1xcbjY5ODk6XFx0XFxuNjk5MDpcXHRcXHRwdHIgPSBza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQ7XFxuNjk5MTpcXHRcXHRpZiAocHRyIFxcdTAwM2U9IHNyaF90bHZzIFxcdTAwMjZcXHUwMDI2IHB0ciArIGxlbiBcXHUwMDNjPSBzcmhfZW5kKVxcbjY5OTI6XFx0XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbjY5OTM6XFx0XFx0ZWxzZSBpZiAocHRyIFxcdTAwM2MgKHZvaWQgKilcXHUwMDI2c3JoLVxcdTAwM2VmbGFncyB8fFxcbjY5OTQ6XFx0XFx0XFx0IHB0ciArIGxlbiBcXHUwMDNlICh2b2lkICopXFx1MDAyNnNyaC1cXHUwMDNlc2VnbWVudHMpXFxuNjk5NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0aWYgKHVubGlrZWx5KGJwZl90cnlfbWFrZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbikpKVxcbjY5OTg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNjk5OTpcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwMDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzAwMTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MDAyOlxcdFxcbjcwMDM6XFx0XFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgZnJvbSwgbGVuKTtcXG43MDA0OlxcdFxcdHJldHVybiAwO1xcbjcwMDU6XFx0fVxcbjcwMDY6XFx0XFxuNzAwNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG43MDA4OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXFxuNzAwOTpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjcwMTA6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG43MDExOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbjcwMTI6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbjcwMTM6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjcwMTQ6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuNzAxNTpcXHR9O1xcbjcwMTY6XFx0XFxuNzAxNzpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTg6XFx0e1xcbjcwMTk6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDE6MjguNjI5OTA4MDQ4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzQyOTE4ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGNpcmNsaW5nIGJhY2sgdG8gYGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoYC4gSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIG9uZSBzcGVjaWZpY2FsbHkuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIExXVCBpbmZyYXN0cnVjdHVyZSwgYnV0IHRoaXMgZnVuY3Rpb24ncyBuYW1lIHN1Z2dlc3RzIGl0J3MgZGVhbGluZyB3aXRoIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgYWRqdXN0bWVudHMgd2l0aGluIHRoZSBsaWdodHdlaWdodCB0dW5uZWwgZnJhbWV3b3JrLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgbWFuaXB1bGF0aW5nIHRoZSBTUkggd2l0aGluIGEgQlBGIHByb2dyYW0gb2ZmZXJzIHNpZ25pZmljYW50IHBvd2VyIGJ1dCBhbHNvIGludHJvZHVjZXMgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBpbiB0ZXJtcyBvZiBwYWNrZXQgbW9kaWZpY2F0aW9uIGFuZCBoZWFkZXIgdmFsaWRpdHkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgdXNlIGNhc2VzIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgZm9yPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgaXQgaW4gaGFuZGxpbmcgdmFyaW91cyBTUkggY29uZmlndXJhdGlvbnMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhcGF0aCBhbmQgZW5zdXJlIGl0J3Mgbm90IGludHJvZHVjaW5nIGFueSB1bmludGVuZGVkIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gTGV0J3MgZGlnIGluIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byBwb3RlbnRpYWwgbGltaXRhdGlvbnMgYW5kIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIHNlY3VyaXR5IGhhcmRlbmluZyBtaWdodCBiZSBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwODowMTo1OC45NzI4MzA2MzRaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMDgsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcxMDg6XFx0QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG43MTA5OlxcdFxcdCAgIHMzMiwgbGVuKVxcbjcxMTA6XFx0e1xcbjcxMTE6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MTEyOlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzExMzpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbjcxMTQ6XFx0XFx0dm9pZCAqc3JoX2VuZCwgKnNyaF90bHZzLCAqcHRyO1xcbjcxMTU6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmhkcjtcXG43MTE2OlxcdFxcdGludCBzcmhvZmYgPSAwO1xcbjcxMTc6XFx0XFx0aW50IHJldDtcXG43MTE4OlxcdFxcbjcxMTk6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG43MTIwOlxcdFxcdGlmICh1bmxpa2VseShzcmggPT0gTlVMTCkpXFxuNzEyMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MTIyOlxcdFxcbjcxMjM6XFx0XFx0c3JoX3RsdnMgPSAodm9pZCAqKSgodW5zaWduZWQgY2hhciAqKXNyaCArIHNpemVvZigqc3JoKSArXFxuNzEyNDpcXHRcXHRcXHRcXHQoKHNyaC1cXHUwMDNlZmlyc3Rfc2VnbWVudCArIDEpIFxcdTAwM2NcXHUwMDNjIDQpKTtcXG43MTI1OlxcdFxcdHNyaF9lbmQgPSAodm9pZCAqKSgodW5zaWduZWQgY2hhciAqKXNyaCArIHNpemVvZigqc3JoKSArXFxuNzEyNjpcXHRcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbik7XFxuNzEyNzpcXHRcXHRwdHIgPSBza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQ7XFxuNzEyODpcXHRcXG43MTI5OlxcdFxcdGlmICh1bmxpa2VseShwdHIgXFx1MDAzYyBzcmhfdGx2cyB8fCBwdHIgXFx1MDAzZSBzcmhfZW5kKSlcXG43MTMwOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjcxMzE6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgKHZvaWQgKikoKGNoYXIgKilwdHIgLSBsZW4pIFxcdTAwM2Ugc3JoX2VuZCkpXFxuNzEzMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MTMzOlxcdFxcbjcxMzQ6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIDApIHtcXG43MTM1OlxcdFxcdFxcdHJldCA9IHNrYl9jb3dfaGVhZChza2IsIGxlbik7XFxuNzEzNjpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuNzEzNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjcxMzg6XFx0XFxuNzEzOTpcXHRcXHRcXHRyZXQgPSBicGZfc2tiX25ldF9oZHJfcHVzaChza2IsIG9mZnNldCwgbGVuKTtcXG43MTQwOlxcdFxcdH0gZWxzZSB7XFxuNzE0MTpcXHRcXHRcXHRyZXQgPSBicGZfc2tiX25ldF9oZHJfcG9wKHNrYiwgb2Zmc2V0LCAtMSAqIGxlbik7XFxuNzE0MjpcXHRcXHR9XFxuNzE0MzpcXHRcXG43MTQ0OlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MTQ1OlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG43MTQ2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNzE0NzpcXHRcXG43MTQ4OlxcdFxcdGhkciA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG43MTQ5OlxcdFxcdGhkci1cXHUwMDNlcGF5bG9hZF9sZW4gPSBodG9ucyhza2ItXFx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbjcxNTA6XFx0XFxuNzE1MTpcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcxNTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzE1MzpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MTU0OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuICs9IGxlbjtcXG43MTU1OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSBmYWxzZTtcXG43MTU2OlxcdFxcdHJldHVybiAwO1xcbjcxNTc6XFx0fVxcbjcxNTg6XFx0XFxuNzE1OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbjcxNjA6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLFxcbjcxNjE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG43MTYyOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuNzE2MzpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG43MTY0OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG43MTY1OlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG43MTY2OlxcdH07XFxuNzE2NzpcXHQjZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDE6NTguOTczMzAwNDY0WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDYyMjAyNTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggaW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBzYWZlZ3VhcmRpbmcgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgc3RhbGUgZGF0YSBwb2ludGVycyB3aXRoaW4gdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHdhcyBnb2luZyB3cm9uZywgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGUgY2hhbmdlcy5cblxuSW5pdGlhbGx5LCB3aXRoIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YCwgdGhlIGNvZGUgd2FzIHB1bGxpbmcgYW4gaW5uZXIgSVB2NiBoZWFkZXIgd2l0aCBgcHNrYl9wdWxsYC4gSG93ZXZlciwgYSBjcnVjaWFsIG92ZXJzaWdodCB3YXMgdGhhdCBpdCAqd2Fzbid0KiB2ZXJpZnlpbmcgaWYgdGhlIGhlYWRlciB3YXMgKmFjdHVhbGx5KiBwcmVzZW50IHdpdGhpbiB0aGUgbGluZWFyIGJ1ZmZlciBhZnRlciB0aGUgYGhkcm9mZmAgb2Zmc2V0IHdpdGggYHBza2JfbWF5X3B1bGxgLCBzbyB0aGVyZSBjb3VsZCBiZSBhIGRhdGEgY29weSBhbmQgYWxsb2NhdGlvbiB0byBwdWxsIGl0IGluLiBGdXJ0aGVybW9yZSwgdGhlcmUgd2FzIGFuIGlzc3VlIHdoZXJlLCBpZiBgcHNrYl9tYXlfcHVsbGAgZmFpbGVkIG9yIHJlYWxsb2NhdGVkIHRoZSBgc2tiYCBoZWFkLCB0aGUgYHNyaF9zdGF0ZWAgb3IgdGhlIHJlc3VsdHMgb2YgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnNgIHdvdWxkIGhhdmUgcG9pbnRlZCB0byBzdGFsZSBtZW1vcnkuXG5cblNpbWlsYXJseSwgaW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgdGhlIGNvZGUgdXNlZCBgaXB2Nl9maW5kX2hkcmAgdG8gbG9jYXRlIHRoZSBTUkggYnV0IGRpZCBub3QgYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBgaXB2Nl9maW5kX2hkcmAgZG9lc24ndCB2YWxpZGF0ZSB0aGUgU1JIJ3MgcHJlc2VuY2UgaW4gdGhlIGxpbmVhciBza2IgZGF0YSwgbm9yIGlmIHRoZSBTUkggaXMgdmFsaWQhIEl0IHdhcyBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIFNSSCB0aHJvdWdoIGBza2ItXHUwMDNlZGF0YSArIHNyaG9mZmAgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTUkggd2Fzbid0IHByb3Blcmx5IHB1bGxlZCBvciB2YWxpZGF0ZWQuIFRoZSBgc2VnNl9nZXRfc3JoYCBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRoaXMgdmlhIGBwc2tiX21heV9wdWxsYCBhbmQgZnVsbCBTUkggdmFsaWRhdGlvbi5cblxuSSBhbHNvIHNlZSB0aGF0IGBicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpYCBpcyBub3cgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBpbiBzb21lIGNvbnRleHRzIChsaWtlIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZgIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYCksIGFuZCBpcyBhbHNvIGNhbGxlZCBhZnRlciBjYWxscyB0aGF0IHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgc2tiLCBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgdG8gZW5zdXJlIGBzcmhfc3RhdGVgIGlzIHVwZGF0ZWQuXG5cblNvLCB0aGUgZml4IGludHJvZHVjZXMgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyB0byB2YWxpZGF0ZSBoZWFkZXIgcHJlc2VuY2UgYW5kICp0aGVuKiB0aGUgdXNlIG9mIGBzZWc2X2dldF9zcmhgIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBTUkgsIHRoZXJlYnkgcmVkdWNpbmcgdGhlIGNoYW5jZXMgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIENydWNpYWxseSwgdGhlIGNvZGUgbm93IGFsc28gaW5jb3Jwb3JhdGVzIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGFmdGVyIGFueSBwb3RlbnRpYWwgYHNrYmAgcmVhbGxvY2F0aW9ucyB0cmlnZ2VyZWQgYnkgYHBza2JfbWF5X3B1bGxgLiBUaGVzZSBwb2ludHMgYXJlIGtleS5cblxuTm93LCBsZXQncyBwaXZvdCB0byBtZW1vcnkgc2FmZXR5LiBUaGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIHJ1biBpdCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqTm8gdXNlci1zcGFjZSBkYXRhIGxlYWtzLioqIFRoaXMgcGF0Y2ggYXZvaWRzIGFueSBjb3B5LXRvLXVzZXIsIHB1dF91c2VyLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zIG9yIGluZm8tbGVha3MsIHNvIHdlIGNhbiBjcm9zcyB0aGF0IG9uZSBvZmYuXG4yLiAgKipObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLioqIFRoZSBgc3JoYCBhbmQgYHNyaF9zdGF0ZWAgc3RydWN0IGZpZWxkcyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBUaGUgYGhkcm9mZmAgaXMgYXNzaWduZWQgYW5kIGRlZmluZWQuIFNvIHRoYXQncyBzYWZlLlxuMy4gICoqTm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi4qKiBObyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIHRoYXQncyBub3QgYSBjb25jZXJuLlxuNC4gICoqTm8gYm91bmRzIGNoZWNrIGlzc3VlcyBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4qKiBUaGUgZml4IGFjdHVhbGx5IGFkZHMgKnN0cmljdGVyKiBjaGVja3MsIGxpa2UgYHBza2JfbWF5X3B1bGxgIGFuZCBgc2VnNl9nZXRfc3JoYCwgZW5zdXJpbmcgdGhhdCBza2IgZGF0YSBwb2ludGVycyBhcmUgdXBkYXRlZCBhZnRlciByZWFsbG9jYXRpb25zLiBUaGlzIGlzIGFjdHVhbGx5ICppbXByb3ZpbmcqIGJvdW5kcyBjaGVja2luZy5cblxuU28sIGJhc2VkIG9uIHRoaXMsIEtNU0FOIGlzbid0IHdhcnJhbnRlZC4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzdGFsZSBwb2ludGVyIGlzc3VlcyBkdWUgdG8gYHBza2JfcHVsbGAgYW5kIGBwc2tiX21heV9wdWxsYCDigJMgY29tbW9uIEtBU0FOIHRlcnJpdG9yeS4gS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVzdWx0aW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgcmV2aXNpdCB3aGF0IGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGRvZXMgZXhhY3RseS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGNvbmZpcm0gaXQgaGFuZGxlcyByZWNvbXB1dGVkIGBza2JgIGhlYWRlciBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwODowNDozMy41OTUzMjg5OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MDIxOTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGtpdC5jPTUzPW5ldGtpdF9ydW4oY29uc3Qgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy01OS1cXHRicGZfbXByb2dfZm9yZWFjaF9wcm9nKGVudHJ5LCBmcCwgcHJvZykge1xcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjYwOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5kcml2ZXJzL25ldC9uZXRraXQuYy02MS1cXHRcXHRyZXQgPSBicGZfcHJvZ19ydW4ocHJvZywgc2tiKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9OTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbmV0X2N0eF9nZXRfYWxsX3VzZWRfZmx1c2hfbGlzdHMoc3RydWN0IGxpc3RfaGVhZCAqKmxoX21hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTczLSAqL1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTc0OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05NzUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD05ODM9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfcnVuX2RhdGFfcG9pbnRlcnMoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTk5My1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjk5NDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05OTUtXFx0cmVzID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEwMDItXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMDAzOi8qIFNpbWlsYXIgdG8gYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycygpLCBleGNlcHQgdGhhdCBzYXZlIG9yZ2luYWxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEwMDQtICogZGF0YSBpbiBjYi1cXHUwMDNlZGF0YSBhbmQgY2ItXFx1MDAzZW1ldGFfZGF0YSBmb3IgcmVzdG9yZS5cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTE5OC1cXHRpZiAoaXNfZGlyZWN0X3BrdF9hY2Nlc3MpXFxubmV0L2JwZi90ZXN0X3J1bi5jOjExOTk6XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjAwLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDQ5Mj10Y3hfcnVuKGNvbnN0IHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDUwMS1cXHRicGZfbXByb2dfZm9yZWFjaF9wcm9nKGVudHJ5LCBmcCwgcHJvZykge1xcbm5ldC9jb3JlL2Rldi5jOjQ1MDI6XFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2Rldi5jLTQ1MDMtXFx0XFx0cmV0ID0gYnBmX3Byb2dfcnVuKHByb2csIHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNjkyPXN0YXRpYyBpbmxpbmUgaW50IGJwZl90cnlfbWFrZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTY5Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxNjk3OlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xNjk4LVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMjk4PUJQRl9DQUxMXzMoYnBmX3NrYl92bGFuX3B1c2gsIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCB2bGFuX3Byb3RvLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMxMS1cXG5uZXQvY29yZS9maWx0ZXIuYzozMzEyOlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zMzEzLVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMzI1PUJQRl9DQUxMXzEoYnBmX3NrYl92bGFuX3BvcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzozMzMzOlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zMzM0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zNDk0PUJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MTktXFx0cmV0ID0gYnBmX3NrYl9wcm90b194bGF0KHNrYiwgcHJvdG8pO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjM1MjA6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MjEtXFx0aWYgKHJldClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM4NDc9QlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zOTM3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5Mzg6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzktXFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQwMjk9QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzNDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDAzNS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDA5Nj1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX2hlYWQsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBoZWFkX3Jvb20sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MTAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQxMDE6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQxMDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4ODA9c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTAzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MDQ6XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MDUtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTc9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjMtXFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAyNDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyNS1cXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDY0LVxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gTlVMTDtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDY1OlxcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDY2LVxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDg9QlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNDMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzE0NS1cXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmM9Mzk9c3RhdGljIGludCBydW5fbHd0X2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2x3dF9wcm9nICpsd3QsXFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmMtNDktXFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXFx1MDAyNl9fYnBmX25ldF9jdHgpO1xcbm5ldC9jb3JlL2x3dF9icGYuYzo1MDpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvbHd0X2JwZi5jLTUxLVxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKGx3dC1cXHUwMDNlcHJvZywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYz02MDU9aW50IGJwZl9sd3RfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYy02NTctXFx0bWVtY3B5KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHIsIGxlbik7XFxubmV0L2NvcmUvbHd0X2JwZi5jOjY1ODpcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxubmV0L2NvcmUvbHd0X2JwZi5jLTY1OS1cXHRza2JfY2xlYXJfaGFzaChza2IpO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MTQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDAtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDQxOlxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ0Mi1cXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVxcdTAwM2VicGYucHJvZywgc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDQ6MzUuODc1NTU3NjI2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTQ2ODIyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGVCUEYgRGF0YSBQb2ludGVyIEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIEl0IHNlZW1zIGxpa2UgdGhlIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBrZWVwaW5nIGVCUEYgcHJvZ3JhbXMgc2FmZSB3aGVuIHRoZXkncmUgYWNjZXNzaW5nIHBhY2tldCBkYXRhIGRpcmVjdGx5IHZpYSBgY2ItXHUwMDNlZGF0YWAgYW5kIGBjYi1cdTAwM2VkYXRhX2VuZGAuIFRoZXNlIHBvaW50ZXJzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBwYWNrZXQgZGlyZWN0IGFjY2VzcyB3aXRoaW4gZUJQRiBwcm9ncmFtcy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIHRoZSBwYWNrZXQgYnVmZmVyIChgc2tiYCkgZ2V0cyBtYW5pcHVsYXRlZCwgc2F5IHdpdGggc29tZXRoaW5nIGxpa2UgYSBgcHNrYl9tYXlfcHVsbGAgb3BlcmF0aW9uIChhcyBzZWVuIGluIGBzZWc2X2dldF9zcmhgKSwgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGNhbiBzaGlmdCBhcm91bmQuIElmIHdlICpkb24ndCogdXBkYXRlIHRob3NlIGRhdGEgcG9pbnRlcnMgd2l0aCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVyc2AgaW4gdGhlc2Ugc2l0dWF0aW9ucywgZUJQRiBwcm9ncmFtcyBvciB0aGVpciBoZWxwZXIgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSByZWFkaW5nIG9yIHdyaXRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgbG9jYXRpb25zLiBUaGlzIGxlYWRzIGRpcmVjdGx5IHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIOKAkyBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEkndmUgcmVhZCwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBsaWtlIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0J3Mgc29sZWx5IGFib3V0ICpwcmV2ZW50aW5nKiBtZW1vcnkgZXJyb3JzIGluIHRoZSBmaXJzdCBwbGFjZSwgZW5zdXJpbmcgdGhhdCBlQlBGIHByb2dyYW1zIGFyZSBvcGVyYXRpbmcgd2l0aCB2YWxpZCBkYXRhIHBvaW50ZXJzLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSd2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHRvb2wuIEkgbmVlZCB0bzpcblxuMS4gIENhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBqdXN0IG9uY2UuXG4yLiAgUHJvdmlkZSB0aGUgY29udHJhc3QgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uXG4zLiAgS2VlcCB0aGUgb3V0cHV0IGNsZWFyIGFuZCBkZXRhaWxlZC5cblxuQWxyaWdodCwgSSB0aGluayBJJ20gcmVhZHkgdG8gbWFrZSB0aGUgdG9vbCBjYWxsIGFuZCBkb2N1bWVudCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0MCwiT3V0cHV0VG9rZW5zIjozMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDg6MDQ6NTYuODIyMzgzMDJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXFxuXFxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90OlxcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cXG4zLiBJbnRyb2R1Y2UgYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgZnVuY3Rpb25zIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIG1hbnVhbCBTUkggbG9va3VwcyB3aXRoIGBzZWc2X2dldF9zcmgoKWAgKHdoaWNoIHBlcmZvcm1zIHByb3BlciBgcHNrYl9tYXlfcHVsbGAgYW5kIHZhbGlkYXRlcyB0aGUgU1JIKSwgZW5zdXJlcyBCUEYgcGFja2V0IGRhdGEgcG9pbnRlcnMgKGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCkgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHNrYiBsaW5lYXIgYnVmZmVycyBtYXkgYmUgcmVhbGxvY2F0ZWQgZHVyaW5nIGhlYWRlciBwdWxscywgYW5kIGFkZHMgbWlzc2luZyBib3VuZHMgdmFsaWRhdGlvbiAoYHBza2JfbWF5X3B1bGxgKSBiZWZvcmUgcHVsbGluZyBJUHY2IGhlYWRlcnMuXFxuXFxuVGhlIGJ1Z3MgYW5kIHJpc2tzIGFkZHJlc3NlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBhbmQgdXNlLWFmdGVyLWZyZWUvc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgY2F1c2VkIGJ5IHNrYiBidWZmZXIgcmVhbGxvY2F0aW9uIG9yIG1pc3NpbmcgbGluZWFyIGJ1ZmZlciBjaGVja3MuIFRoZXNlIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChhbmQgVUIgc2FuaXRpemVycykuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90OlxcbjEuIEFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcy5cXG4yLiBFeHBvc2UgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy5cXG4zLiBJbnRyb2R1Y2UgYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjQuIE1vZGlmeSBsZW5ndGhzIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[1] Phase: Succeeded StartedAt: 2026-09-02 08:05:08 +0000 UTC FinishedAt: 2026-09-02 08:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 08:05:08 +0000 UTC FinishedAt: 2026-09-02 08:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2] Phase: Succeeded StartedAt: 2026-09-02 08:05:08 +0000 UTC FinishedAt: 2026-09-02 11:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 08:05:08 +0000 UTC FinishedAt: 2026-09-02 11:44:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 08:05:08 +0000 UTC FinishedAt: 2026-09-02 08:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 08:05:08 +0000 UTC FinishedAt: 2026-09-02 08:05:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowf545m/series-workflowf545m-convert-artifact-1515311437/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 08:05:18 +0000 UTC FinishedAt: 2026-09-02 08:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 08:05:18 +0000 UTC FinishedAt: 2026-09-02 08:21:51 +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:*0c0c08bb-a116-4966-846b-490b32d9b8d5,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-workflowf545m/series-workflowf545m-convert-artifact-1515311437/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": "aa9ba3bf-06ce-4935-9b98-4476adc3c140", "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-workflowf545m/series-workflowf545m-build-action-3695579587/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 08:05:18 +0000 UTC FinishedAt: 2026-09-02 08:21:41 +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:*0c0c08bb-a116-4966-846b-490b32d9b8d5,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-workflowf545m/series-workflowf545m-convert-artifact-1515311437/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": "aa9ba3bf-06ce-4935-9b98-4476adc3c140", "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-workflowf545m/series-workflowf545m-build-action-3695579587/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 08:21:51 +0000 UTC FinishedAt: 2026-09-02 08:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 08:21:51 +0000 UTC FinishedAt: 2026-09-02 08:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 08:21:51 +0000 UTC FinishedAt: 2026-09-02 08:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 08:21:51 +0000 UTC FinishedAt: 2026-09-02 08:21:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowf545m/series-workflowf545m-convert-artifact-2567280808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 08:22:01 +0000 UTC FinishedAt: 2026-09-02 08:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 08:22:01 +0000 UTC FinishedAt: 2026-09-02 08:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa9ba3bf-06ce-4935-9b98-4476adc3c140,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-workflowf545m/series-workflowf545m-build-action-3695579587/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-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 08:23:49 +0000 UTC FinishedAt: 2026-09-02 08:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 08:23:49 +0000 UTC FinishedAt: 2026-09-02 08:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 08:23:49 +0000 UTC FinishedAt: 2026-09-02 08:40:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 08:23:49 +0000 UTC FinishedAt: 2026-09-02 08:40:05 +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:*0c0c08bb-a116-4966-846b-490b32d9b8d5,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-workflowf545m/series-workflowf545m-convert-artifact-2567280808/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": "42f94919-0ab2-4b96-9ed1-7d95a9fb9c89", "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-workflowf545m/series-workflowf545m-build-action-1213109844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 08:23:49 +0000 UTC FinishedAt: 2026-09-02 08:39:55 +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:*0c0c08bb-a116-4966-846b-490b32d9b8d5,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-workflowf545m/series-workflowf545m-convert-artifact-2567280808/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": "42f94919-0ab2-4b96-9ed1-7d95a9fb9c89", "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-workflowf545m/series-workflowf545m-build-action-1213109844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 08:40:05 +0000 UTC FinishedAt: 2026-09-02 08:40:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 08:40:05 +0000 UTC FinishedAt: 2026-09-02 08:40:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 08:40:05 +0000 UTC FinishedAt: 2026-09-02 08:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 08:40:05 +0000 UTC FinishedAt: 2026-09-02 08:41:47 +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:*42f94919-0ab2-4b96-9ed1-7d95a9fb9c89,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-workflowf545m/series-workflowf545m-build-action-1213109844/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-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 11:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 11:44:44 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*aa9ba3bf-06ce-4935-9b98-4476adc3c140,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42f94919-0ab2-4b96-9ed1-7d95a9fb9c89,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-workflowf545m/series-workflowf545m-build-action-3695579587/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-workflowf545m/series-workflowf545m-build-action-1213109844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 08:42:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 08:42:03 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf545m/series-workflowf545m-convert-artifact-3770788833/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 08:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 08:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 08:41:57 +0000 UTC FinishedAt: 2026-09-02 08:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 08:42:07 +0000 UTC FinishedAt: 2026-09-02 11:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf545m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","input_action_end_bpf","seg6_bpf_has_valid_srh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"fa029dd5-e76d-4745-a062-e0d26e2a9239","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 08:42:07 +0000 UTC FinishedAt: 2026-09-02 11:44:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa9ba3bf-06ce-4935-9b98-4476adc3c140,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42f94919-0ab2-4b96-9ed1-7d95a9fb9c89,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-workflowf545m/series-workflowf545m-build-action-3695579587/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-workflowf545m/series-workflowf545m-build-action-1213109844/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-workflowf545m/series-workflowf545m-convert-artifact-3770788833/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,}