Name: series-workflow2g68c Phase: Succeeded StartedAt: 2026-07-31 23:18:41 +0000 UTC FinishedAt: 2026-08-01 03:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[0] Phase: Succeeded StartedAt: 2026-07-31 23:18:41 +0000 UTC FinishedAt: 2026-07-31 23:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 23:18:41 +0000 UTC FinishedAt: 2026-07-31 23:47:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "8b8a18d8-e83f-4d82-b847-00753dc436b3" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "adjust_scalar_min_max_vals", "adjust_ptr_min_max_vals", "regs_refine_cond_op" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2FkanVzdF9zY2FsYXJfbWluX21heF92YWxzJiMzNDssCiAgICAmIzM0O2FkanVzdF9wdHJfbWluX21heF92YWxzJiMzNDssCiAgICAmIzM0O3JlZ3NfcmVmaW5lX2NvbmRfb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIEJQRiB2ZXJpZmllciBmb3IgdHJhY2tpbmcgcmVnaXN0ZXIgYm91bmRzIHVzaW5nIGNpcmN1bGFyIG51bWJlcnMgKGNudW0pLiBJdCBzaW1wbGlmaWVzIHRoZSBzbWluLCBzbWF4LCBub3JtYWxpemUsIGFuZCBjb250YWlucyBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyBhbmQgdmFsaWRhdGVzIHJlZ2lzdGVyIHZhbHVlcyBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHZlcmlmaWVyIGVudHJ5IHBvaW50cyBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gYm91bmRzIGFkanVzdG1lbnRzIGFuZCBjb25kaXRpb25hbCBicmFuY2ggcmVmaW5lbWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzY2QwOGRlN2E4NWZjNDYyY2UxNDFlNTc1NTFiOTllYmE4ZWRiOTIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjM6NDY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jbnVtX2RlZnMuaCBiL2tlcm5lbC9icGYvY251bV9kZWZzLmhcbmluZGV4IGE5MGUzMTdlMzU3ODAuLjMwNjg1ZTQzZGUwNDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NudW1fZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NudW1fZGVmcy5oXG5AQCAtMzMsNyAmIzQzOzMzLDEyIEBAIHN0cnVjdCBjbnVtX3QgRk4oZnJvbV9zcmFuZ2UpKHN0IG1pbiwgc3QgbWF4KVxuIFx0cmV0dXJuIChzdHJ1Y3QgY251bV90KXsgLmJhc2UgPSBiYXNlLCAuc2l6ZSA9IHNpemUgfTtcbiB9XG4gXG4tLyogVHJ1ZSBpZiB0aGlzIGNudW0gcmVwcmVzZW50cyB0d28gdW5zaWduZWQgcmFuZ2VzLiAqL1xuJiM0MzsvKlxuJiM0MzsgKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byB1bnNpZ25lZCByYW5nZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXG4mIzQzOyAqIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBGTih1cmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB7XG4gXHQvKiBTYW1lIGFzIGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUgXHUwMDNlIFVUX01BWCBidXQgYXZvaWRzIG92ZXJmbG93ICovXG5AQCAtNDQsNiAmIzQzOzQ5LDkgQEAgc3RhdGljIGlubGluZSBib29sIEZOKHVyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKVxuICAqIGNudW17VH1fdW1pbiAvIGNudW17VH1fdW1heCBxdWVyeSBhbiB1bnNpZ25lZCByYW5nZSByZXByZXNlbnRlZCBieSB0aGlzIGNudW0uXG4gICogSWYgY251bSByZXByZXNlbnRzIGEgcmFuZ2UgY3Jvc3NpbmcgdGhlIFVUX01BWC8wIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxuICAqIFswLi5VVF9NQVhdIGlzIHJldHVybmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xuJiM0MzsgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXguXG4gICovXG4gdXQgRk4odW1pbikoc3RydWN0IGNudW1fdCBjbnVtKVxuIHtcbkBAIC01Nyw3ICYjNDM7NjUsMTIgQEAgdXQgRk4odW1heCkoc3RydWN0IGNudW1fdCBjbnVtKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChGTih1bWF4KSk7XG4gXG4tLyogVHJ1ZSBpZiB0aGlzIGNudW0gcmVwcmVzZW50cyB0d28gc2lnbmVkIHJhbmdlcy4gKi9cbiYjNDM7LypcbiYjNDM7ICogVHJ1ZSBpZiB0aGlzIGNudW0gcmVwcmVzZW50cyB0d28gc2lnbmVkIHJhbmdlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmdcbiYjNDM7ICogdGhpcyBmdW5jdGlvbi5cbiYjNDM7ICovXG4gc3RhdGljIGlubGluZSBib29sIEZOKHNyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKVxuIHtcbiBcdHJldHVybiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01BWCkgXHUwMDI2XHUwMDI2IEZOKGNvbnRhaW5zKShjbnVtLCAodXQpU1RfTUlOKTtcbkBAIC02NywxOSAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiAgKiBjbnVte1R9X3NtaW4gLyBjbnVte1R9X3NtYXggcXVlcnkgYSBzaWduZWQgcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbnVtLlxuICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBTVF9NQVgvU1RfTUlOIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxuICAqIFtTVF9NSU4uLlNUX01BWF0gaXMgcmV0dXJuZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXG4mIzQzOyAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heC5cbiAgKi9cbiBzdCBGTihzbWluKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0cmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSlcbi1cdCAgICAgICA/IFNUX01JTlxuLVx0ICAgICAgIDogbWluKChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZSkpO1xuJiM0MztcdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pID8gU1RfTUlOIDogKHN0KWNudW0uYmFzZTtcbiB9XG4gXG4gc3QgRk4oc21heCkoc3RydWN0IGNudW1fdCBjbnVtKVxuIHtcbi1cdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pXG4tXHQgICAgICAgPyBTVF9NQVhcbi1cdCAgICAgICA6IG1heCgoc3QpY251bS5iYXNlLCAoc3QpKGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUpKTtcbiYjNDM7XHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01BWCA6IChzdCkoY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZSk7XG4gfVxuIFxuIC8qXG5AQCAtMTgxLDcgJiM0MzsxOTMsNyBAQCB2b2lkIEZOKGludGVyc2VjdF93aXRoX3NyYW5nZSkoc3RydWN0IGNudW1fdCAqZHN0LCBzdCBtaW4sIHN0IG1heClcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbnVtX3QgRk4obm9ybWFsaXplKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0aWYgKGNudW0uc2l6ZSA9PSBVVF9NQVggXHUwMDI2XHUwMDI2IGNudW0uYmFzZSAhPSAwIFx1MDAyNlx1MDAyNiBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWClcbiYjNDM7XHRpZiAoY251bS5zaXplID09IFVUX01BWClcbiBcdFx0Y251bS5iYXNlID0gMDtcbiBcdHJldHVybiBjbnVtO1xuIH1cbkBAIC0yMTAsMTIgJiM0MzsyMjIsNyBAQCBib29sIEZOKGlzX2VtcHR5KShzdHJ1Y3QgY251bV90IGNudW0pXG4gXG4gYm9vbCBGTihjb250YWlucykoc3RydWN0IGNudW1fdCBjbnVtLCB1dCB2KVxuIHtcbi1cdGlmIChGTihpc19lbXB0eSkoY251bSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChGTih1cmFuZ2Vfb3ZlcmZsb3cpKGNudW0pKVxuLVx0XHRyZXR1cm4gdiBcdTAwM2U9IGNudW0uYmFzZSB8fCB2IFx1MDAzYz0gKHV0KWNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemU7XG4tXHRlbHNlXG4tXHRcdHJldHVybiB2IFx1MDAzZT0gY251bS5iYXNlIFx1MDAyNlx1MDAyNiB2IFx1MDAzYz0gKHV0KWNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemU7XG4mIzQzO1x0cmV0dXJuICFGTihpc19lbXB0eSkoY251bSkgXHUwMDI2XHUwMDI2IHYgLSBjbnVtLmJhc2UgXHUwMDNjPSBjbnVtLnNpemU7XG4gfVxuIFxuIGJvb2wgRk4oaXNfY29uc3QpKHN0cnVjdCBjbnVtX3QgY251bSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7YWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7cmVnc19yZWZpbmVfY29uZF9vcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgQlBGIHZlcmlmaWVyIGZvciB0cmFja2luZyByZWdpc3RlciBib3VuZHMgdXNpbmcgY2lyY3VsYXIgbnVtYmVycyAoY251bSkuIEl0IHNpbXBsaWZpZXMgdGhlIHNtaW4sIHNtYXgsIG5vcm1hbGl6ZSwgYW5kIGNvbnRhaW5zIG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIGFuZCB2YWxpZGF0ZXMgcmVnaXN0ZXIgdmFsdWVzIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24sIHdoaWNoIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgYm91bmRhcnkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgdmVyaWZpZXIgZW50cnkgcG9pbnRzIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBib3VuZHMgYWRqdXN0bWVudHMgYW5kIGNvbmRpdGlvbmFsIGJyYW5jaCByZWZpbmVtZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjZDA4ZGU3YTg1ZmM0NjJjZTE0MWU1NzU1MWI5OWViYThlZGI5MjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo0NjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY251bV9kZWZzLmggYi9rZXJuZWwvYnBmL2NudW1fZGVmcy5oCmluZGV4IGE5MGUzMTdlMzU3ODAuLjMwNjg1ZTQzZGUwNDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY251bV9kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jbnVtX2RlZnMuaApAQCAtMzMsNyAmIzQzOzMzLDEyIEBAIHN0cnVjdCBjbnVtX3QgRk4oZnJvbV9zcmFuZ2UpKHN0IG1pbiwgc3QgbWF4KQogCXJldHVybiAoc3RydWN0IGNudW1fdCl7IC5iYXNlID0gYmFzZSwgLnNpemUgPSBzaXplIH07CiB9CiAKLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy4gKi8KJiM0MzsvKgomIzQzOyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy4KJiM0MzsgKgomIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nCiYjNDM7ICogdGhpcyBmdW5jdGlvbi4KJiM0MzsgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBGTih1cmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSkKIHsKIAkvKiBTYW1lIGFzIGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUgJmd0OyBVVF9NQVggYnV0IGF2b2lkcyBvdmVyZmxvdyAqLwpAQCAtNDQsNiAmIzQzOzQ5LDkgQEAgc3RhdGljIGlubGluZSBib29sIEZOKHVyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKQogICogY251bXtUfV91bWluIC8gY251bXtUfV91bWF4IHF1ZXJ5IGFuIHVuc2lnbmVkIHJhbmdlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY251bS4KICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBVVF9NQVgvMCBib3VuZGFyeSwgdGhlIHVuYm91bmQgcmFuZ2UKICAqIFswLi5VVF9NQVhdIGlzIHJldHVybmVkLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmcKJiM0MzsgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXguCiAgKi8KIHV0IEZOKHVtaW4pKHN0cnVjdCBjbnVtX3QgY251bSkKIHsKQEAgLTU3LDcgJiM0Mzs2NSwxMiBAQCB1dCBGTih1bWF4KShzdHJ1Y3QgY251bV90IGNudW0pCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChGTih1bWF4KSk7CiAKLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuICovCiYjNDM7LyoKJiM0MzsgKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byBzaWduZWQgcmFuZ2VzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmcKJiM0MzsgKiB0aGlzIGZ1bmN0aW9uLgomIzQzOyAqLwogc3RhdGljIGlubGluZSBib29sIEZOKHNyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKQogewogCXJldHVybiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01BWCkgJmFtcDsmYW1wOyBGTihjb250YWlucykoY251bSwgKHV0KVNUX01JTik7CkBAIC02NywxOSAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSkKICAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heCBxdWVyeSBhIHNpZ25lZCByYW5nZSByZXByZXNlbnRlZCBieSB0aGlzIGNudW0uCiAgKiBJZiBjbnVtIHJlcHJlc2VudHMgYSByYW5nZSBjcm9zc2luZyB0aGUgU1RfTUFYL1NUX01JTiBib3VuZGFyeSwgdGhlIHVuYm91bmQgcmFuZ2UKICAqIFtTVF9NSU4uLlNUX01BWF0gaXMgcmV0dXJuZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZwomIzQzOyAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heC4KICAqLwogc3QgRk4oc21pbikoc3RydWN0IGNudW1fdCBjbnVtKQogewotCXJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pCi0JICAgICAgID8gU1RfTUlOCi0JICAgICAgIDogbWluKChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZSkpOwomIzQzOwlyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01JTiA6IChzdCljbnVtLmJhc2U7CiB9CiAKIHN0IEZOKHNtYXgpKHN0cnVjdCBjbnVtX3QgY251bSkKIHsKLQlyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKQotCSAgICAgICA/IFNUX01BWAotCSAgICAgICA6IG1heCgoc3QpY251bS5iYXNlLCAoc3QpKGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUpKTsKJiM0MzsJcmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSkgPyBTVF9NQVggOiAoc3QpKGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUpOwogfQogCiAvKgpAQCAtMTgxLDcgJiM0MzsxOTMsNyBAQCB2b2lkIEZOKGludGVyc2VjdF93aXRoX3NyYW5nZSkoc3RydWN0IGNudW1fdCAqZHN0LCBzdCBtaW4sIHN0IG1heCkKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY251bV90IEZOKG5vcm1hbGl6ZSkoc3RydWN0IGNudW1fdCBjbnVtKQogewotCWlmIChjbnVtLnNpemUgPT0gVVRfTUFYICZhbXA7JmFtcDsgY251bS5iYXNlICE9IDAgJmFtcDsmYW1wOyBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWCkKJiM0MzsJaWYgKGNudW0uc2l6ZSA9PSBVVF9NQVgpCiAJCWNudW0uYmFzZSA9IDA7CiAJcmV0dXJuIGNudW07CiB9CkBAIC0yMTAsMTIgJiM0MzsyMjIsNyBAQCBib29sIEZOKGlzX2VtcHR5KShzdHJ1Y3QgY251bV90IGNudW0pCiAKIGJvb2wgRk4oY29udGFpbnMpKHN0cnVjdCBjbnVtX3QgY251bSwgdXQgdikKIHsKLQlpZiAoRk4oaXNfZW1wdHkpKGNudW0pKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKEZOKHVyYW5nZV9vdmVyZmxvdykoY251bSkpCi0JCXJldHVybiB2ICZndDs9IGNudW0uYmFzZSB8fCB2ICZsdDs9ICh1dCljbnVtLmJhc2UgJiM0MzsgY251bS5zaXplOwotCWVsc2UKLQkJcmV0dXJuIHYgJmd0Oz0gY251bS5iYXNlICZhbXA7JmFtcDsgdiAmbHQ7PSAodXQpY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZTsKJiM0MzsJcmV0dXJuICFGTihpc19lbXB0eSkoY251bSkgJmFtcDsmYW1wOyB2IC0gY251bS5iYXNlICZsdDs9IGNudW0uc2l6ZTsKIH0KIAogYm9vbCBGTihpc19jb25zdCkoc3RydWN0IGNudW1fdCBjbnVtKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgUGF0Y2g6IGNudW1fZGVmcy5oIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBga2VybmVsL2JwZi9jbnVtX2RlZnMuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIEJQRiB2ZXJpZmllciwgbGlrZWx5IGRlYWxpbmcgd2l0aCBjaXJjdWxhciBudW1iZXIgcmVwcmVzZW50YXRpb25zIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdWRnaW5nIGJ5IHRoZSBmdW5jdGlvbiBuYW1lcy4gV2UmIzM5O3ZlIGdvdCBjaGFuZ2VzIHRvIGZvdXIgZnVuY3Rpb25zOiBgRk4oc21pbilgLCBgRk4oc21heClgLCBgRk4obm9ybWFsaXplKWAsIGFuZCBgRk4oY29udGFpbnMpYC4gTGV0JiMzOTtzIGJyZWFrIHRoZXNlIGRvd24gcXVpY2tseS4KCkZpcnN0LCBgRk4oc21pbilgIGFuZCBgRk4oc21heClgIGFyZSBzaW1wbGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBwb3RlbnRpYWxseSBoYWQgcmVkdW5kYW50IGBtaW5gIGFuZCBgbWF4YCBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGlzIGNvbXBsZXhpdHkuIFNwZWNpZmljYWxseSwgaW4gdGhlIGBzbWluYCBmdW5jdGlvbiBpdCB3YXMgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gYnkgdXNpbmcgdGhlIGBtaW5gIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggbm93IHNpbXBseSByZXR1cm5zIHRoZSBgY251bS5iYXNlYCB2YWx1ZSBpZiB0aGVyZSBpcyBubyBvdmVyZmxvdy4gU2ltaWxhcmx5LCBgRk4oc21heClgIHdhcyB1c2luZyBgbWF4YCBidXQgbm93IHNpbXBseSByZXR1cm5zIGBjbnVtLmJhc2UgJiM0MzsgY251bS5zaXplYC4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgb2JzZXJ2YXRpb24uIEl0IHByb2JhYmx5IGltcGxpZXMgdGhhdCB0aGUgb3ZlcmZsb3cgY2FzZSB3aWxsIGFsd2F5cyByZXN1bHQgaW4gYSBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgYmFzZSBwbHVzIHNpemUgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgbWF4IGluIHRoZSBub24tb3ZlcmZsb3cgY2FzZS4KClRoZW4sIGBGTihub3JtYWxpemUpYCBpcyBjbGVhbmVkIHVwLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYW4gZXh0cmEgY29uZGl0aW9uYWwgY2hlY2suIEl0IHNlZW1zIHRoZSB1cGRhdGVkIGxvZ2ljIHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgY251bS5iYXNlICE9IDAgJmFtcDsmYW1wOyBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWGAsIHNpbXBsaWZ5aW5nIHRoZSBvdmVyZmxvdyBoYW5kbGluZy4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSwgYnV0IGl0JiMzOTtzIGNsZWFybHkgYSByZWR1Y3Rpb24gaW4gY29kZSBjb21wbGV4aXR5LgoKRmluYWxseSwgYEZOKGNvbnRhaW5zKWAgaGFzIGJlZW4gc2lnbmlmaWNhbnRseSByZXdvcmtlZC4gVGhlIG9yaWdpbmFsIHZlcnNpb24gaGFkIHR3byBkaWZmZXJlbnQgcGF0aHMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlIHdhcyBhbiBvdmVyZmxvdyBpbiB0aGUgcmFuZ2UgY2FsY3VsYXRpb24uIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBjb25kaXRpb25hbCBhbmQgaW5zdGVhZCBjaGVja3MgYHYgLSBjbnVtLmJhc2UgJmx0Oz0gY251bS5zaXplYC4gU2VlbXMgbGlrZSB0aGlzIGlzIG9wdGltaXppbmcgZm9yIGEgc2ltcGxlciBhbmQgbW9yZSBwZXJmb3JtYW50IGNoZWNrIHRoYXQgY292ZXJzIGJvdGggb3ZlcmZsb3cgYW5kIG5vcm1hbCBjYXNlcy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSBtb3JlIGNvbXBsZXggdGhhbiBuZWNlc3NhcnkuCgpPdmVyYWxsLCB0aGVzZSBsb29rIGxpa2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFpbWVkIGF0IHNpbXBsaWZ5aW5nIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVsYXRlZCB0byBudW1iZXIgcmFuZ2VzLiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIHVzZXMgb2YgYGNudW1fZGVmcy5oYCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgcmlwcGxlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NudW1fZGVmcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY251bS5jLTYtI2RlZmluZSBUIDMyXG5rZXJuZWwvYnBmL2NudW0uYzo3OiNpbmNsdWRlIFwmIzM0O2NudW1fZGVmcy5oXCYjMzQ7XG5rZXJuZWwvYnBmL2NudW0uYy04LSN1bmRlZiBUXG4tLVxua2VybmVsL2JwZi9jbnVtLmMtMTAtI2RlZmluZSBUIDY0XG5rZXJuZWwvYnBmL2NudW0uYzoxMTojaW5jbHVkZSBcJiMzNDtjbnVtX2RlZnMuaFwmIzM0O1xua2VybmVsL2JwZi9jbnVtLmMtMTItI3VuZGVmIFRcbi0tXG5rZXJuZWwvYnBmL2NudW1fZGVmcy5oLTQtI2lmbmRlZiBUXG5rZXJuZWwvYnBmL2NudW1fZGVmcy5oOjU6I2Vycm9yIFwmIzM0O0RlZmluZSBUIChiaXQgd2lkdGg6IDMyLCA2NCkgYmVmb3JlIGluY2x1ZGluZyBjbnVtX2RlZnMuaFwmIzM0O1xua2VybmVsL2JwZi9jbnVtX2RlZnMuaC02LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYnBmL2NudW0gSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkgc2VlIGBjbnVtX2RlZnMuaGAgaXMgZ2V0dGluZyBpbmNsdWRlZCB3aXRoaW4gYGtlcm5lbC9icGYvY251bS5jYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2V0dXAgZm9yIGRlZmluaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyAoMzItYml0IGFuZCA2NC1iaXQgaW4gdGhpcyBjYXNlKSBpbXBsZW1lbnRhdGlvbnMgb2Ygc29tZSBjcml0aWNhbCBudW1lcmljYWwgZnVuY3Rpb25zLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvY251bS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmV4cG9ydGVkKiBmcm9tIHRoYXQgbW9kdWxlLCBhbmQgbW9yZSBjcml0aWNhbGx5LCB3aGF0IGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKnVzZWQqIHdpdGhpbiBpdC4gSWRlbnRpZnlpbmcgdGhlIGNhbGwgZ3JhcGggZnJvbSB0aGF0IHBvaW50IHdpbGwgYWxsb3cgYSBjbGVhbiB2aWV3IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aG9zZSBiaXQgd2lkdGhzIGFuZCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBObyBwb2ludCBnb2luZyBmdXJ0aGVyIHdpdGhvdXQgYSBzb2xpZCBtYXAgb2YgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y251bTMyXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE5ND1zdGF0aWMgaW5saW5lIHMzMiByZWdfczMyX21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xOTUte1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxOTY6XHRyZXR1cm4gY251bTMyX3NtaW4ocmVnLVx1MDAzZXIzMik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE5Ny19XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xOTk9c3RhdGljIGlubGluZSBzMzIgcmVnX3MzMl9tYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjAwLXtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjAxOlx0cmV0dXJuIGNudW0zMl9zbWF4KHJlZy1cdTAwM2VyMzIpO1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMDItfVxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MjA0PXN0YXRpYyBpbmxpbmUgdTMyIHJlZ191MzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIwNS17XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjIwNjpcdHJldHVybiBjbnVtMzJfdW1pbihyZWctXHUwMDNlcjMyKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjA3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTIwOT1zdGF0aWMgaW5saW5lIHUzMiByZWdfdTMyX21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTAte1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoyMTE6XHRyZXR1cm4gY251bTMyX3VtYXgocmVnLVx1MDAzZXIzMik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIxMi19XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0yMTQ9c3RhdGljIGlubGluZSB2b2lkIHJlZ19zZXRfc3JhbmdlMzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgczMyIHNtaW4sIHMzMiBzbWF4KVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTUte1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoyMTY6XHRyZWctXHUwMDNlcjMyID0gY251bTMyX2Zyb21fc3JhbmdlKHNtaW4sIHNtYXgpO1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTctfVxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MjE5PXN0YXRpYyBpbmxpbmUgdm9pZCByZWdfc2V0X3VyYW5nZTMyKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHUzMiB1bWluLCB1MzIgdW1heClcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjIwLXtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjIxOlx0cmVnLVx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSh1bWluLCB1bWF4KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjIyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2NudW0uaD0yOD1zdHJ1Y3QgY251bTMyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NudW0uaC0zNS1cbmluY2x1ZGUvbGludXgvY251bS5oOjM2OnN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fdXJhbmdlKHUzMiBtaW4sIHUzMiBtYXgpO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzc6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV9zcmFuZ2UoczMyIG1pbiwgczMyIG1heCk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDozODp1MzIgY251bTMyX3VtaW4oc3RydWN0IGNudW0zMiBjbnVtKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjM5OnUzMiBjbnVtMzJfdW1heChzdHJ1Y3QgY251bTMyIGNudW0pO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NDA6czMyIGNudW0zMl9zbWluKHN0cnVjdCBjbnVtMzIgY251bSk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0MTpzMzIgY251bTMyX3NtYXgoc3RydWN0IGNudW0zMiBjbnVtKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjQyOnN0cnVjdCBjbnVtMzIgY251bTMyX2ludGVyc2VjdChzdHJ1Y3QgY251bTMyIGEsIHN0cnVjdCBjbnVtMzIgYik7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Mzp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aChzdHJ1Y3QgY251bTMyICpkc3QsIHN0cnVjdCBjbnVtMzIgc3JjKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjQ0OnZvaWQgY251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShzdHJ1Y3QgY251bTMyICpkc3QsIHUzMiBtaW4sIHUzMiBtYXgpO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NDU6dm9pZCBjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKHN0cnVjdCBjbnVtMzIgKmRzdCwgczMyIG1pbiwgczMyIG1heCk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Njpib29sIGNudW0zMl9jb250YWlucyhzdHJ1Y3QgY251bTMyIGNudW0sIHUzMiB2KTtcbmluY2x1ZGUvbGludXgvY251bS5oOjQ3OmJvb2wgY251bTMyX2lzX2NvbnN0KHN0cnVjdCBjbnVtMzIgY251bSk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0ODpib29sIGNudW0zMl9pc19lbXB0eShzdHJ1Y3QgY251bTMyIGNudW0pO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NDk6c3RydWN0IGNudW0zMiBjbnVtMzJfYWRkKHN0cnVjdCBjbnVtMzIgYSwgc3RydWN0IGNudW0zMiBiKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjUwOnN0cnVjdCBjbnVtMzIgY251bTMyX25lZ2F0ZShzdHJ1Y3QgY251bTMyIGEpO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NTE6Ym9vbCBjbnVtMzJfaXNfc3Vic2V0KHN0cnVjdCBjbnVtMzIgb3V0ZXIsIHN0cnVjdCBjbnVtMzIgaW5uZXIpO1xuaW5jbHVkZS9saW51eC9jbnVtLmgtNTItXG4tLVxuaW5jbHVkZS9saW51eC9jbnVtLmg9Nzc9Ym9vbCBjbnVtNjRfaXNfc3Vic2V0KHN0cnVjdCBjbnVtNjQgb3V0ZXIsIHN0cnVjdCBjbnVtNjQgaW5uZXIpO1xuaW5jbHVkZS9saW51eC9jbnVtLmgtNzgtXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo3OTpzdHJ1Y3QgY251bTMyIGNudW0zMl9mcm9tX2NudW02NChzdHJ1Y3QgY251bTY0IGNudW0pO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6ODA6c3RydWN0IGNudW02NCBjbnVtNjRfY251bTMyX2ludGVyc2VjdChzdHJ1Y3QgY251bTY0IGEsIHN0cnVjdCBjbnVtMzIgYik7XG5pbmNsdWRlL2xpbnV4L2NudW0uaC04MS1cbi0tXG5rZXJuZWwvYnBmL2NudW0uYy0xMy1cbmtlcm5lbC9icGYvY251bS5jOjE0OnN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fY251bTY0KHN0cnVjdCBjbnVtNjQgY251bSlcbmtlcm5lbC9icGYvY251bS5jLTE1LXtcbi0tXG5rZXJuZWwvYnBmL2NudW0uYy00MC0gKi9cbmtlcm5lbC9icGYvY251bS5jOjQxOnN0cnVjdCBjbnVtNjQgY251bTY0X2NudW0zMl9pbnRlcnNlY3Qoc3RydWN0IGNudW02NCBhLCBzdHJ1Y3QgY251bTMyIGIpXG5rZXJuZWwvYnBmL2NudW0uYy00Mi17XG4tLVxua2VybmVsL2JwZi9jbnVtLmMtNTAtXG5rZXJuZWwvYnBmL2NudW0uYzo1MTpcdGlmIChjbnVtNjRfaXNfZW1wdHkoYSkgfHwgY251bTMyX2lzX2VtcHR5KGIpKVxua2VybmVsL2JwZi9jbnVtLmMtNTItXHRcdHJldHVybiBDTlVNNjRfRU1QVFk7XG5rZXJuZWwvYnBmL2NudW0uYy01My1cbmtlcm5lbC9icGYvY251bS5jOjU0Olx0aWYgKGNudW0zMl91cmFuZ2Vfb3ZlcmZsb3coYjEpKSB7XG5rZXJuZWwvYnBmL2NudW0uYy01NS1cdFx0YjFfbWF4ID0gKHUzMiliMS5iYXNlICYjNDM7ICh1MzIpYjEuc2l6ZTsgLyogb3ZlcmZsb3cgaGVyZSBpcyBmaW5lIGFuZCBuZWNlc3NhcnkgKi9cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTMwMj1zdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNS1cdHJldHVybiBjbnVtNjRfaXNfc3Vic2V0KG9sZC1cdTAwM2VyNjQsIGN1ci1cdTAwM2VyNjQpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzozMDY6XHQgICAgICAgY251bTMyX2lzX3N1YnNldChvbGQtXHUwMDNlcjMyLCBjdXItXHUwMDNlcjMyKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzA3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5MT1zdGF0aWMgdm9pZCBfX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk0LVx0cmVnLVx1MDAzZXI2NCA9IGNudW02NF9mcm9tX3VyYW5nZShpbW0sIGltbSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NTpcdHJlZy1cdTAwM2VyMzIgPSBjbnVtMzJfZnJvbV91cmFuZ2UoKHUzMilpbW0sICh1MzIpaW1tKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgxMT1zdGF0aWMgdm9pZCBfX21hcmtfcmVnMzJfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMy1cdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jb25zdF9zdWJyZWcocmVnLVx1MDAzZXZhcl9vZmYsIGltbSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDpcdHJlZy1cdTAwM2VyMzIgPSBjbnVtMzJfZnJvbV91cmFuZ2UoKHUzMilpbW0sICh1MzIpaW1tKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE1LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk0OT1zdGF0aWMgdm9pZCByZXNldF9yZWczMl9hbmRfdG51bShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTU6c3RhdGljIHN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fdG51bShzdHJ1Y3QgdG51bSB0bnVtKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwLVx0XHQvKiBtYXggc2lnbmVkIGlzIG1pbihzaWduIGJpdCkgfCBtYXgob3RoZXIgYml0cykgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYxOlx0XHRyZXR1cm4gY251bTMyX2Zyb21fc3JhbmdlKHRudW0udmFsdWUgfCAodG51bS5tYXNrIFx1MDAyNiBTMzJfTUlOKSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyLVx0XHRcdFx0XHQgIHRudW0udmFsdWUgfCAodG51bS5tYXNrIFx1MDAyNiBTMzJfTUFYKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2My1cdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY0Olx0XHRyZXR1cm4gY251bTMyX2Zyb21fdXJhbmdlKHRudW0udmFsdWUsICh0bnVtLnZhbHVlIHwgdG51bS5tYXNrKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Nzg9c3RhdGljIHZvaWQgX191cGRhdGVfcmVnMzJfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3OS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4MDpcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcdTAwMjZyZWctXHUwMDNlcjMyLCBjbnVtMzJfZnJvbV90bnVtKHJlZy1cdTAwM2V2YXJfb2ZmKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4MS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjQ9c3RhdGljIHZvaWQgZGVkdWNlX2JvdW5kc18zMl9mcm9tXzY0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyNjpcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcdTAwMjZyZWctXHUwMDNlcjMyLCBjbnVtMzJfZnJvbV9jbnVtNjQocmVnLVx1MDAzZXI2NCkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDI5PXN0YXRpYyB2b2lkIGRlZHVjZV9ib3VuZHNfNjRfZnJvbV8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzAte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzE6XHRyZWctXHUwMDNlcjY0ID0gY251bTY0X2NudW0zMl9pbnRlcnNlY3QocmVnLVx1MDAzZXI2NCwgcmVnLVx1MDAzZXIzMik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODI9c3RhdGljIGJvb2wgY29uc3RfdG51bV9yYW5nZV9taXNtYXRjaF8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODc6XHRyZXR1cm4gIWNudW0zMl9pc19jb25zdChyZWctXHUwMDNlcjMyKSB8fCByZWctXHUwMDNlcjMyLmJhc2UgIT0gdG51bV9zdWJyZWcocmVnLVx1MDAzZXZhcl9vZmYpLnZhbHVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODgtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDkwPXN0YXRpYyBib29sIHJhbmdlX2JvdW5kc192aW9sYXRpb24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDkxLXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDkyOlx0cmV0dXJuIGNudW0zMl9pc19lbXB0eShyZWctXHUwMDNlcjMyKSB8fCBjbnVtNjRfaXNfZW1wdHkocmVnLVx1MDAzZXI2NCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5My19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU0ODk9c3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplX3N4KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTA2LVx0XHRyZWctXHUwMDNlcjY0ID0gY251bTY0X2Zyb21fdXJhbmdlKHU2NF9jdmFsLCB1NjRfY3ZhbCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTUwNzpcdFx0cmVnLVx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSgodTMyKXU2NF9jdmFsLCAodTMyKXU2NF9jdmFsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTA4LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTE2PXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxOC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5MTk6XHRkc3RfcmVnLVx1MDAzZXIzMiA9IGNudW0zMl9hZGQoZHN0X3JlZy1cdTAwM2VyMzIsIHNyY19yZWctXHUwMDNlcjMyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkyMC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTI4PXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfc3ViKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkzMC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5MzE6XHRkc3RfcmVnLVx1MDAzZXIzMiA9IGNudW0zMl9hZGQoZHN0X3JlZy1cdTAwM2VyMzIsIGNudW0zMl9uZWdhdGUoc3JjX3JlZy1cdTAwM2VyMzIpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkzMi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTQwPXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfbXVsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzk2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzk2NzpcdGRzdF9yZWctXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChjbnVtMzJfZnJvbV91cmFuZ2UodW1pbiwgdW1heCksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5Njg6XHRcdFx0XHRcdGNudW0zMl9mcm9tX3NyYW5nZShzbWluLCBzbWF4KSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5NjktfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU3MD1zdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU1OTEtXHRcdGlmIChpc19qbXAzMikge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NTkyOlx0XHRcdHJlZzEtXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChyZWcxLVx1MDAzZXIzMiwgcmVnMi1cdTAwM2VyMzIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NTkzLVx0XHRcdHJlZzItXHUwMDNlcjMyID0gcmVnMS1cdTAwM2VyMzI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjE3LVx0XHRcdC8qIENvbXBsZW1lbnQgb2YgdGhlIHJhbmdlIFt2YWwsIHZhbF0gYXMgY251bTMyLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NjE4Olx0XHRcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcdTAwMjZyZWcxLVx1MDAzZXIzMiwgKHN0cnVjdCBjbnVtMzIpeyB2YWwgJiM0MzsgMSwgVTMyX01BWCAtIDEgfSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2MTktXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjY3LVx0XHRpZiAoaXNfam1wMzIpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY2ODpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFx1MDAyNnJlZzEtXHUwMDNlcjMyLCAwLCByZWdfdTMyX21heChyZWcyKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2Njk6XHRcdFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShcdTAwMjZyZWcyLVx1MDAzZXIzMiwgcmVnX3UzMl9taW4ocmVnMSksIFUzMl9NQVgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjcwLVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY3Ni1cdFx0aWYgKGlzX2ptcDMyKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2Nzc6XHRcdFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShcdTAwMjZyZWcxLVx1MDAzZXIzMiwgMCwgcmVnX3UzMl9tYXgocmVnMikgLSAxKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY3ODpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFx1MDAyNnJlZzItXHUwMDNlcjMyLCByZWdfdTMyX21pbihyZWcxKSAmIzQzOyAxLCBVMzJfTUFYKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY3OS1cdFx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODUtXHRcdGlmIChpc19qbXAzMikge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Njg2Olx0XHRcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2UoXHUwMDI2cmVnMS1cdTAwM2VyMzIsIFMzMl9NSU4sIHJlZ19zMzJfbWF4KHJlZzIpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY4NzpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFx1MDAyNnJlZzItXHUwMDNlcjMyLCByZWdfczMyX21pbihyZWcxKSwgUzMyX01BWCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODgtXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njk0LVx0XHRpZiAoaXNfam1wMzIpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY5NTpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFx1MDAyNnJlZzEtXHUwMDNlcjMyLCBTMzJfTUlOLCByZWdfczMyX21heChyZWcyKSAtIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Njk2Olx0XHRcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2UoXHUwMDI2cmVnMi1cdTAwM2VyMzIsIHJlZ19zMzJfbWluKHJlZzEpICYjNDM7IDEsIFMzMl9NQVgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njk3LVx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvY251bV9kZWZzLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgc29tZXRoaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGZpbGUmIzM5O3MgaW5jbHVzaW9uIGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIFRoZSBgY251bTMyXypgIGFuZCBgY251bTY0XypgIGZ1bmN0aW9ucyBkZWZpbmVkIHRoZXJlIGFyZSBjcml0aWNhbDsgdGhlIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHVzZXMgdGhlbSBleHRlbnNpdmVseS4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGF0IHRoZSBoZWFydCBvZiBob3cgdGhlIEJQRiB2ZXJpZmllciB0cmFja3MgcmVnaXN0ZXIgYm91bmRzIOKAkyB0aGUgbWluL21heCB2YWx1ZXMgaXQgdXNlcyB0byBlbnN1cmUgcHJvZ3JhbXMgYXJlIHNhZmUuIENoYW5naW5nIHRoaXMgKmRlZmluaXRlbHkqIG1lYW5zIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhhdCBtZWFucyBmdXp6aW5nIGlzIGNydWNpYWwuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgdmFsdWUgdHJhY2tpbmcgbG9naWMuCgpTbywgdGhlIG5leHQgc3RlcCBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb3JlIGJvdW5kIGZ1bmN0aW9ucyBhbmQgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyByZWxpYW5jZSBvbiB0aGVzZSB2YWx1ZXMsIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGFyZSBsaWtlbHkgdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgdGhlbXNlbHZlcywgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqZGlyZWN0bHkqIHVzaW5nIHRoZXNlIGJvdW5kcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGFrZSBhIGxvb2sgZm9yIGNhbmRpZGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NTMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTEyOD1yZXVzZXMgdGhlIGV4aXN0aW5nIGBgZmRfYXJyYXlgYDpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5JiMzOTtzIGxlbmd0aC5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM2LSAgIGhhcyByZXNvbHZlZCB0aGUgYGBmZF9hcnJheWBgIGVudHJpZXMgaW50byB0aGUgcHJvZ3JhbSYjMzk7cyBgYHVzZWRfbWFwc2BgLiBUaGVcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0yMzA9VGhpcyBob29rIGdhdGVzIGFkbWlzc2lvbiAqKmZvciBldmVyeSBsb2FkKiosIGZyb20gYSBzaW5nbGUgY2FsbCBzaXRlIGluc2lkZSB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMjMyLW9wdGlvbmFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIHNvIHRoZSB2ZXJkaWN0IGFuZCBrZXlyaW5nIGZpZWxkcyBhcmUgZmluYWwgLSB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdD02NDc9Z290IGZyb20gYnBmX3Byb2dfY3JlYXRlKCksIGFuZCAmIzM5O2N0eCYjMzk7IHRoZSBnaXZlbiBjb250ZXh0IChlLmcuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdDo2NDg6c2tiIHBvaW50ZXIpLiBBbGwgY29uc3RyYWludHMgYW5kIHJlc3RyaWN0aW9ucyBmcm9tIGJwZl9jaGVja19jbGFzc2ljKCkgYXBwbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0LTY0OS1iZWZvcmUgYSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgbGF5b3V0IGlzIGJlaW5nIGRvbmUgYmVoaW5kIHRoZSBzY2VuZXMhXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9Nj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yNi1cdGFkZFx0eDAsIHg5LCB4MjVcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjI3Olx0YmxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjgtXHQvKiBCUEZfUkVHX0FYKHg5KSB3aWxsIGJlIHN0b3JlZCBpbnRvIGNvdW50LCBzbyBtb3ZlIHJldHVybiB2YWx1ZSB0byBpdC4gKi9cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjE0OiAqIENhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCBub3JtYWwgcG93ZXJwYzY0IEFCSTpcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTUtICogXHQtIHIzID0gcHRyLCByZXR1cm4gaW4gcjNcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIwPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzgtXHRhZGQgICAgIHIzLCByMzEsIHIxMlxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozOTpcdGJsICAgICAgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQwLVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTExLSAqXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMjogKiBDYWxscyBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIHRoZSBzdGFuZGFyZCBSSVNDLVYgQUJJLCB3aGVyZVxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTMtICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTE3PVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMxLVx0YWRkXHRhMCwgdDAsIHM1XG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozMjpcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzMtXHRtdlx0dDAsIGEwXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0yMj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM2LVx0bGF5ICVyMiwwKCVyMTIsJXIxMylcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzc6XHRicmFzbCAlcjE0LGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zOC1cdGxnciAlcjEyLCVyMlxuLS1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0xMT1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXHRDQUxMX0RFUFRIX0FDQ09VTlRcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo0MDpcdGNhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTE4MT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM6MTgyOm5mcF9icGZfY2hlY2tfbXR1KHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTE4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTUyMT1jb25zdCBzdHJ1Y3QgbmZwX2FwcF90eXBlIGFwcF9icGYgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYzo1MzE6XHQuY2hlY2tfbXR1XHQ9IG5mcF9icGZfY2hlY2tfbXR1LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTE2OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjE3MDpuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTE3MS1cdFx0XHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0zMTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzozMTE6bmZwX2JwZl9jaGVja19leGl0KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTMxMi1cdFx0ICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTM0Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjM0MzpuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zNDQtXHRcdFx0ICAgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz00NTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo0NTE6bmZwX2JwZl9jaGVja19wdHIoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTQ1Mi1cdFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCByZWdfbm8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjUtXHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjQ2NjpcdFx0ZXJyID0gbmZwX2JwZl9jaGVja19zdGFja19hY2Nlc3MobmZwX3Byb2csIG1ldGEsIHJlZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDY3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTAxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTAyOm5mcF9icGZfY2hlY2tfc3RvcmUoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUwMy1cdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjEtZXhpdF9jaGVja19wdHI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUyMjpcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVx1MDAzZWluc24uZHN0X3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz01MjU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MjY6bmZwX2JwZl9jaGVja19hdG9taWMoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyNy1cdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1NTI6XHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudiwgbWV0YS1cdTAwM2VpbnNuLmRzdF9yZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTU2Om5mcF9icGZfY2hlY2tfYWx1KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTctXHRcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTYzMT1pbnQgbmZwX3ZlcmlmeV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Mi1cdGlmIChpc19tYnBmX2hlbHBlcl9jYWxsKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTM6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKG5mcF9wcm9nLCBlbnYsIG1ldGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTQtXHRpZiAobWV0YS1cdTAwM2VpbnNuLmNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1NTpcdFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfZXhpdChuZnBfcHJvZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTctXHRpZiAoaXNfbWJwZl9sb2FkKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTg6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTktXHRcdFx0XHRcdCBtZXRhLVx1MDAzZWluc24uc3JjX3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2MC1cdGlmIChpc19tYnBmX3N0b3JlKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NjE6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3N0b3JlKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2My1cdGlmIChpc19tYnBmX2F0b21pYyhtZXRhKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjY0Olx0XHRyZXR1cm4gbmZwX2JwZl9jaGVja19hdG9taWMobmZwX3Byb2csIG1ldGEsIGVudik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY2LVx0aWYgKGlzX21icGZfYWx1KG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2Njc6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2FsdShuZnBfcHJvZywgbWV0YSwgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY4LVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMi1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzMzppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzNC1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjAtXHRpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9ERVZJQ0UpKVx0XHRcdCAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDozNjE6XHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKGF0eXBlLCBtYWpvciwgbWlub3IsIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjItXHRcdFx0XHRcdFx0XHQgIGFjY2VzcyxcdCAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zMDQ5PWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDozMDUwOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsIHNpemVfdCBleHBlY3RlZF9zaXplLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUxLVx0XHRcdCAgICAgc2l6ZV90IGFjdHVhbF9zaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwNTQ9c3RydWN0IGJwZl9sb2dfYXR0cjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1NTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKmZwLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTYtXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD05MDE9c3RydWN0IGJwZl9mZF9hcnJheSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MDktLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHNcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTEwOiAqIG9uZSB2ZXJpZmllcl9lbnYgcGVyIGJwZl9jaGVjaygpIGNhbGxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTExLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleSh1NjQga2V5LCB1MzIgKm9ial9pZCwgdTMyICpidGZfaWQpXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTc5LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTgwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4MS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODI6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgzLVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4NC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4NTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTQzOD1pbnQgYnBmX3BydW5lX2RlYWRfYnJhbmNoZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE0Mzk6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE0NDAtaW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NDA9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDMtLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSB0cmFtcG9saW5lLmMgKi9cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY0NDppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDUtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDYtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NDc6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQ4LWludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExOTY9dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMTk3OnU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5OC1ib29sIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTcxNz1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC90Y3AuaC03MzAtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjIyLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTIyMzogKiBsb25nIGJwZl9jaGVja19tdHUodm9pZCAqY3R4LCB1MzIgaWZpbmRleCwgdTMyICptdHVfbGVuLCBzMzIgbGVuX2RpZmYsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjI0LSAqXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD03NDg1PXN0cnVjdCBicGZfcmVkaXJfbmVpZ2gge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk0LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc0OTU6LyogYnBmX2NoZWNrX210dSBmbGFncyovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NjplbnVtICBicGZfY2hlY2tfbXR1X2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk3LVx0QlBGX01UVV9DSEtfU0VHUyAgPSAoMVUgXHUwMDNjXHUwMDNjIDApLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk5LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc1MDA6ZW51bSBicGZfY2hlY2tfbXR1X3JldCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwMS1cdEJQRl9NVFVfQ0hLX1JFVF9TVUNDRVNTLCAgICAgIC8qIGNoZWNrIGFuZCBsb29rdXAgc3VjY2Vzc2Z1bCAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI5LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01NjEtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01NjMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OD1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc2OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3MDppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3MS1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlx0XHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cdFx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2xpbmZvOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cdFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVx0XHQvKlxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcdFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cdFx0ICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjcyNzpcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNS1cbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzExNy1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTE4Olx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjIwPXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzUzOlx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1NC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODU9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MDk5LVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTEwMDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwMS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3NT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4NS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1Mzg2Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDQ2PXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1NTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYyPXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3Mi1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NzM6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzQtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MDU9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTEzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUxNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE1LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MjkwPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjk4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjI5OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTAtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzExOlx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMi1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM2Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NjQ9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzUtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Ny0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4OTk1PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAzMS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQzNT1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NjY6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjctXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTUzNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzYtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjA9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTM1OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTM2LSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA2MS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3NC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDc1Olx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDc2LVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTY4Olx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxODA6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxODEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL3NlY2NvbXAuYz0yNDQ9c3RhdGljIHZvaWQgcG9wdWxhdGVfc2VjY29tcF9kYXRhKHN0cnVjdCBzZWNjb21wX2RhdGEgKnNkKVxuLS1cbmtlcm5lbC9zZWNjb21wLmMtMjcwLSAqXG5rZXJuZWwvc2VjY29tcC5jOjI3MTogKiBUYWtlcyBhIHByZXZpb3VzbHkgY2hlY2tlZCBmaWx0ZXIgKGJ5IGJwZl9jaGVja19jbGFzc2ljKSBhbmRcbmtlcm5lbC9zZWNjb21wLmMtMjcyLSAqIHJlZGlyZWN0cyBhbGwgZmlsdGVyIGNvZGUgdGhhdCBsb2FkcyBzdHJ1Y3Qgc2tfYnVmZiBkYXRhXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTg1ND1zdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy04NjktXHRpZiAoZGF0YV9pbikge1xubmV0L2JwZi90ZXN0X3J1bi5jOjg3MDpcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKGRhdGFfaW4pLCBtYXhfc2l6ZSwgc2l6ZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtODcxLVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXG5uZXQvY29yZS9maWx0ZXIuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcbm5ldC9jb3JlL2ZpbHRlci5jLTE4LSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk4Nz1zdGF0aWMgYm9vbCBjaGtfY29kZV9hbGxvd2VkKHUxNiBjb2RlX3RvX3Byb2JlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMDUzOnN0YXRpYyBib29sIGJwZl9jaGVja19iYXNpY3Nfb2soY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU0LVx0XHRcdFx0dW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2NC0vKipcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNjU6ICpcdGJwZl9jaGVja19jbGFzc2ljIC0gdmVyaWZ5IHNvY2tldCBmaWx0ZXIgY29kZVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2Ni0gKlx0QGZpbHRlcjogZmlsdGVyIHRvIHZlcmlmeVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzctICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMDc4OnN0YXRpYyBpbnQgYnBmX2NoZWNrX2NsYXNzaWMoY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDc5LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTMzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJlcGFyZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTM0MzpcdGVyciA9IGJwZl9jaGVja19jbGFzc2ljKGZwLVx1MDAzZWluc25zLCBmcC1cdTAwM2VsZW4pO1xubmV0L2NvcmUvZmlsdGVyLmMtMTM0NC1cdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMzg0PWludCBicGZfcHJvZ19jcmVhdGUoc3RydWN0IGJwZl9wcm9nICoqcGZwLCBzdHJ1Y3Qgc29ja19mcHJvZ19rZXJuICpmcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzg5LVx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTM5MDpcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cdTAwM2VmaWx0ZXIsIGZwcm9nLVx1MDAzZWxlbikpXG5uZXQvY29yZS9maWx0ZXIuYy0xMzkxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xNDI5PWludCBicGZfcHJvZ19jcmVhdGVfZnJvbV91c2VyKHN0cnVjdCBicGZfcHJvZyAqKnBmcCwgc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzYtXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXG5uZXQvY29yZS9maWx0ZXIuYzoxNDM3Olx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVx1MDAzZWZpbHRlciwgZnByb2ctXHUwMDNlbGVuKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTE1MDU9c3RydWN0IGJwZl9wcm9nICpfX2dldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNC1cdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjE1MTU6XHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXHUwMDNlZmlsdGVyLCBmcHJvZy1cdTAwM2VsZW4pKVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTI2Mz1zdGF0aWMgaW50IGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMwMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDMte1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz00MDU9c3RydWN0IHNvY2sgKmNvb2tpZV92NF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzo0MjY6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI3LVx0fSBlbHNlIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NTg6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyMz1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTM6XHRcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU0LVx0fVxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0xMzU9c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxubmV0L2lwdjQvdWRwX2JwZi5jOjE0NDpzdGF0aWMgdm9pZCB1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQ1LXtcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTYzPWludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XHRcdHVkcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc1LVxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE5Mi1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE1MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciYjMzk7cyBBcml0aG1ldGljIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBjb2RlIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZXNlIGNoYW5nZXMgdG8gdGhlIGBjbnVtMzJfKmAgZnVuY3Rpb25zIGltcGFjdCB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBlbnRyeSBwb2ludCwgb2YgY291cnNlLCBpcyBgYnBmX2NoZWNrYCwgYnV0IEkgd2FudCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcuIExvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0b3VjaGVzIGBjbnVtMzJfc21pbmAsIGBjbnVtMzJfc21heGAsIGBjbnVtMzJfbm9ybWFsaXplYCwgYW5kIGBjbnVtMzJfY29udGFpbnNgLgoKVGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCwgdXNlZCBleHRlbnNpdmVseSB3aXRoaW4gYHZlcmlmaWVyLmNgIGJ5IGZ1bmN0aW9ucyBsaWtlIGBjbnVtMzJfaW50ZXJzZWN0YCwgYGNudW0zMl9pbnRlcnNlY3Rfd2l0aGAsIGBjbnVtMzJfYWRkYCwgYGNudW0zMl9uZWdhdGVgLCBgY251bTMyX2Zyb21fdXJhbmdlYCwgYGNudW0zMl9mcm9tX3NyYW5nZWAsIGFuZCBzbyBvbi4gVGhhdCBhbG9uZSBnaXZlcyBtZSBhIGdvb2QgaWRlYSBvZiB0aGVpciBpbXBvcnRhbmNlLgoKRGlnZ2luZyBkZWVwZXIsIEkgY2FuIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW4gdGhlIHZlcmlmaWVyIHRoYXQgcmVseSBvbiB0aGVzZSB1cGRhdGVkIGBjbnVtMzJfKmAgZnVuY3Rpb25zLiBUaGVzZSBhcmU6IGBzY2FsYXIzMl9taW5fbWF4X2FkZGAsIGBzY2FsYXIzMl9taW5fbWF4X3N1YmAsIGBzY2FsYXIzMl9taW5fbWF4X211bGAsIGByZWdzX3JlZmluZV9jb25kX29wYCwgYGRlZHVjZV9ib3VuZHNfMzJfZnJvbV82NGAsIGBkZWR1Y2VfYm91bmRzXzY0X2Zyb21fMzJgLCBgX191cGRhdGVfcmVnMzJfYm91bmRzYCwgYW5kIGByYW5nZV9ib3VuZHNfdmlvbGF0aW9uYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IHRoZXNlIGtleSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBgcmVnc19yZWZpbmVfY29uZF9vcGAgYW5kIGBzY2FsYXIzMl9taW5fbWF4X2FkZGAsIHVzZSB0aGUgbW9kaWZpZWQgYGNudW0zMl8qYCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgc2NvcGUgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3NfcmVmaW5lX2NvbmRfb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE1MTU5PXN0YXRpYyB2b2lkIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTIzNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTIzNjpzdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTIzNy1cdFx0XHRcdHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyMzg9c3RhdGljIHU4IHJldl9vcGNvZGUodTggb3Bjb2RlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNDEtICogTGVhcm4gbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsaXZlIGJyYW5jaGVzIGJ5IHNpbXVsYXRpbmcgcmVmaW5lbWVudCBvbiBib3RoIGJyYW5jaGVzLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjQyOiAqIHJlZ3NfcmVmaW5lX2NvbmRfb3AoKSBpcyBzb3VuZCwgc28gcHJvZHVjaW5nIGlsbC1mb3JtZWQgcmVnaXN0ZXIgYm91bmRzIGZvciB0aGUgYnJhbmNoIG1lYW5zXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNDMtICogdGhhdCBicmFuY2ggaXMgZGVhZC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyNDU9c3RhdGljIGludCBzaW11bGF0ZV9ib3RoX2JyYW5jaGVzX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNDctXHQvKiBGYWxsdGhyb3VnaCAoRkFMU0UpIGJyYW5jaCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjQ4Olx0cmVnc19yZWZpbmVfY29uZF9vcChcdTAwMjZlbnYtXHUwMDNlZmFsc2VfcmVnMSwgXHUwMDI2ZW52LVx1MDAzZWZhbHNlX3JlZzIsIHJldl9vcGNvZGUob3Bjb2RlKSwgaXNfam1wMzIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MjQ5LVx0cmVnX2JvdW5kc19zeW5jKFx1MDAyNmVudi1cdTAwM2VmYWxzZV9yZWcxKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNTktXHQvKiBKdW1wIChUUlVFKSBicmFuY2ggKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTI2MDpcdHJlZ3NfcmVmaW5lX2NvbmRfb3AoXHUwMDI2ZW52LVx1MDAzZXRydWVfcmVnMSwgXHUwMDI2ZW52LVx1MDAzZXRydWVfcmVnMiwgb3Bjb2RlLCBpc19qbXAzMik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNjEtXHRyZWdfYm91bmRzX3N5bmMoXHUwMDI2ZW52LVx1MDAzZXRydWVfcmVnMSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NTQ3PXN0YXRpYyB1OCByZXZfb3Bjb2RlKHU4IG9wY29kZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU1NjktLyogUmVmaW5lIHJhbmdlIGtub3dsZWRnZSBmb3IgXHUwMDNjcmVnMVx1MDAzZSBcdTAwM2NvcFx1MDAzZSBcdTAwM2NyZWdcdTAwM2UyIGNvbmRpdGlvbmFsIG9wZXJhdGlvbi4gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTU3MDpzdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTU3MS1cdFx0XHRcdHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NjQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3M6CgoqKlJlZmluaW5nIE9wdGltaXphdGlvbiBUYXJnZXRzKioKCkFscmlnaHQsICpgcmVnc19yZWZpbmVfY29uZF9vcGAqIGlzIGRlZmluaXRlbHkgYSBzb2xpZCBjb250ZW5kZXIgZm9yIG9wdGltaXphdGlvbi4gSSYjMzk7dmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhhdCBhcmVhIGZvciBhIHdoaWxlIG5vdy4gVGhlIHBvdGVudGlhbCBnYWlucyB0aGVyZSBhcmUgc2lnbmlmaWNhbnQsIGFuZCBJIGhhdmUgYSBmZXcgc3BlY2lmaWMgaWRlYXMgSSYjMzk7dmUgYmVlbiBtdWxsaW5nIG92ZXIgcmVnYXJkaW5nIGhvdyB0byBpbXByb3ZlIHRoZSByZWdpc3RlciBhbGxvY2F0aW9uIHByb2Nlc3MgaW4gdGhhdCBjb250ZXh0LiBJdCYjMzk7cyBhIGtleSBwaWVjZSBmb3IgaW1wcm92aW5nIG92ZXJhbGwgY29kZSBnZW5lcmF0aW9uIHF1YWxpdHksIHNvIGl0JiMzOTtzIHdvcnRoIHRoZSBmb2N1cy4KCkJ1dC4uLndoYXQgYWJvdXQgKmBzY2FsYXIzMl9taW5fbWF4X2FkZGAqPyBUaGF0IGZ1bmN0aW9uJiMzOTtzIGJlZW4gb24gbXkgcmFkYXIgdG9vLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBjbGV2ZXIgcGVlcGhvbGUgb3B0aW1pemF0aW9uIG9yIGEgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybnMgdGhlcmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBzaW1wbGlmeSBvciBhdm9pZCBzb21lIHVubmVjZXNzYXJ5IG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaG93IGZyZXF1ZW50bHkgdGhvc2UgdHlwZXMgb2YgY2FsY3VsYXRpb25zIHBvcCB1cCBpbiBteSB0YXJnZXQgYXBwbGljYXRpb25zLiBNaWdodCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHNlZSBob3cgaXQgYmVuY2htYXJrcy4gSXQgbWlnaHQgbm90IGJlIGFzIHN0cmF0ZWdpY2FsbHkgY3JpdGljYWwgYXMgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgLCBidXQgc21hbGwgaW1wcm92ZW1lbnRzIHRoZXJlIGNhbiBhY2N1bXVsYXRlIGludG8gc3Vic3RhbnRpYWwgZ2FpbnMgYWNyb3NzIHRoZSBib2FyZC4gVGltZSB0byBjb21wYXJlIHRoZSB0d28gYW5kIGRlY2lkZSB3aGljaCB3b3VsZCBiZSBtb3JlIHdvcnRod2hpbGUgdG8gZm9jdXMgb24gZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjYWxhcjMyX21pbl9tYXhfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTU9c3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTY6c3RhdGljIHZvaWQgc2NhbGFyMzJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTctc3RhdGljIHZvaWQgc2NhbGFyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxMDY9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjExNjpcdHNjYWxhcjMyX21pbl9tYXhfYWRkKGRzdF9yZWcsIFx1MDAyNmZha2VfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTE3LVx0c2NhbGFyX21pbl9tYXhfYWRkKGRzdF9yZWcsIFx1MDAyNmZha2VfcmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3MTg9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkxNjpzdGF0aWMgdm9pZCBzY2FsYXIzMl9taW5fbWF4X2FkZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxNy1cdFx0XHRcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2NDQ9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDY4MC1cdGNhc2UgQlBGX0FERDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDY4MTpcdFx0c2NhbGFyMzJfbWluX21heF9hZGQoZHN0X3JlZywgXHUwMDI2c3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2ODItXHRcdHNjYWxhcl9taW5fbWF4X2FkZChkc3RfcmVnLCBcdTAwMjZzcmNfcmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5Mzg9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTgzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0Olx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaXMgdGhhdCBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhbmFseXNpcywgYW5kIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AgaXMgYWxzbyBhIGxpa2VseSBjYW5kaWRhdGUuIEhvd2V2ZXIsIHRoZSBiaWcgZmlzaCBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIGlzIGBicGZfY2hlY2tgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEFoLCByaWdodC4gVGhlIEJQRiB2ZXJpZmllciBpcyBhbHdheXMgZW5hYmxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBJIGRvbiYjMzk7dCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBUaGF0IG1lYW5zIEkgY2FuIGFzc3VtZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyB0aGVyZS4gR29vZCwgdGhhdCYjMzk7cyBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQlBGIFZlcmlmaWNhdGlvbjogQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgQlBGIHN5c2NhbGxzLiBUaGUgYmlnIG9uZSB0byBrZWVwIGFuIGV5ZSBvbiwgb2YgY291cnNlLCBpcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGtleSB0byBlbnN1cmluZyBCUEYmIzM5O3Mgc2FmZXR5IGFuZCBpbnRlZ3JpdHkgbGllcyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBieSBkaXZpbmcgaW50byB0aGUgYGJwZl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIHJlc2lkZXMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSB2ZXJpZmllciBpcyB1cCB0bywgYW5kIHdoYXQgcHJvdGVjdGlvbnMgaXQmIzM5O3MgcHV0dGluZyBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NTMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTEyOD1yZXVzZXMgdGhlIGV4aXN0aW5nIGBgZmRfYXJyYXlgYDpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5JiMzOTtzIGxlbmd0aC5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM2LSAgIGhhcyByZXNvbHZlZCB0aGUgYGBmZF9hcnJheWBgIGVudHJpZXMgaW50byB0aGUgcHJvZ3JhbSYjMzk7cyBgYHVzZWRfbWFwc2BgLiBUaGVcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0yMzA9VGhpcyBob29rIGdhdGVzIGFkbWlzc2lvbiAqKmZvciBldmVyeSBsb2FkKiosIGZyb20gYSBzaW5nbGUgY2FsbCBzaXRlIGluc2lkZSB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMjMyLW9wdGlvbmFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIHNvIHRoZSB2ZXJkaWN0IGFuZCBrZXlyaW5nIGZpZWxkcyBhcmUgZmluYWwgLSB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdD02NDc9Z290IGZyb20gYnBmX3Byb2dfY3JlYXRlKCksIGFuZCAmIzM5O2N0eCYjMzk7IHRoZSBnaXZlbiBjb250ZXh0IChlLmcuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdDo2NDg6c2tiIHBvaW50ZXIpLiBBbGwgY29uc3RyYWludHMgYW5kIHJlc3RyaWN0aW9ucyBmcm9tIGJwZl9jaGVja19jbGFzc2ljKCkgYXBwbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0LTY0OS1iZWZvcmUgYSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgbGF5b3V0IGlzIGJlaW5nIGRvbmUgYmVoaW5kIHRoZSBzY2VuZXMhXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9Nj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yNi1cdGFkZFx0eDAsIHg5LCB4MjVcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjI3Olx0YmxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjgtXHQvKiBCUEZfUkVHX0FYKHg5KSB3aWxsIGJlIHN0b3JlZCBpbnRvIGNvdW50LCBzbyBtb3ZlIHJldHVybiB2YWx1ZSB0byBpdC4gKi9cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjE0OiAqIENhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCBub3JtYWwgcG93ZXJwYzY0IEFCSTpcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTUtICogXHQtIHIzID0gcHRyLCByZXR1cm4gaW4gcjNcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIwPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzgtXHRhZGQgICAgIHIzLCByMzEsIHIxMlxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozOTpcdGJsICAgICAgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQwLVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTExLSAqXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMjogKiBDYWxscyBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIHRoZSBzdGFuZGFyZCBSSVNDLVYgQUJJLCB3aGVyZVxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTMtICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTE3PVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMxLVx0YWRkXHRhMCwgdDAsIHM1XG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozMjpcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzMtXHRtdlx0dDAsIGEwXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0yMj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM2LVx0bGF5ICVyMiwwKCVyMTIsJXIxMylcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzc6XHRicmFzbCAlcjE0LGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zOC1cdGxnciAlcjEyLCVyMlxuLS1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0xMT1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXHRDQUxMX0RFUFRIX0FDQ09VTlRcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo0MDpcdGNhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTE4MT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM6MTgyOm5mcF9icGZfY2hlY2tfbXR1KHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTE4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTUyMT1jb25zdCBzdHJ1Y3QgbmZwX2FwcF90eXBlIGFwcF9icGYgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYzo1MzE6XHQuY2hlY2tfbXR1XHQ9IG5mcF9icGZfY2hlY2tfbXR1LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTE2OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjE3MDpuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTE3MS1cdFx0XHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0zMTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzozMTE6bmZwX2JwZl9jaGVja19leGl0KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTMxMi1cdFx0ICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTM0Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjM0MzpuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zNDQtXHRcdFx0ICAgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz00NTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo0NTE6bmZwX2JwZl9jaGVja19wdHIoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTQ1Mi1cdFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCByZWdfbm8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjUtXHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjQ2NjpcdFx0ZXJyID0gbmZwX2JwZl9jaGVja19zdGFja19hY2Nlc3MobmZwX3Byb2csIG1ldGEsIHJlZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDY3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTAxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTAyOm5mcF9icGZfY2hlY2tfc3RvcmUoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUwMy1cdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjEtZXhpdF9jaGVja19wdHI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUyMjpcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVx1MDAzZWluc24uZHN0X3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz01MjU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MjY6bmZwX2JwZl9jaGVja19hdG9taWMoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyNy1cdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1NTI6XHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudiwgbWV0YS1cdTAwM2VpbnNuLmRzdF9yZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTU2Om5mcF9icGZfY2hlY2tfYWx1KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTctXHRcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTYzMT1pbnQgbmZwX3ZlcmlmeV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Mi1cdGlmIChpc19tYnBmX2hlbHBlcl9jYWxsKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTM6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKG5mcF9wcm9nLCBlbnYsIG1ldGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTQtXHRpZiAobWV0YS1cdTAwM2VpbnNuLmNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1NTpcdFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfZXhpdChuZnBfcHJvZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTctXHRpZiAoaXNfbWJwZl9sb2FkKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTg6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTktXHRcdFx0XHRcdCBtZXRhLVx1MDAzZWluc24uc3JjX3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2MC1cdGlmIChpc19tYnBmX3N0b3JlKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NjE6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3N0b3JlKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2My1cdGlmIChpc19tYnBmX2F0b21pYyhtZXRhKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjY0Olx0XHRyZXR1cm4gbmZwX2JwZl9jaGVja19hdG9taWMobmZwX3Byb2csIG1ldGEsIGVudik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY2LVx0aWYgKGlzX21icGZfYWx1KG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2Njc6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2FsdShuZnBfcHJvZywgbWV0YSwgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY4LVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMi1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzMzppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzNC1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjAtXHRpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9ERVZJQ0UpKVx0XHRcdCAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDozNjE6XHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKGF0eXBlLCBtYWpvciwgbWlub3IsIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjItXHRcdFx0XHRcdFx0XHQgIGFjY2VzcyxcdCAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zMDQ5PWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDozMDUwOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsIHNpemVfdCBleHBlY3RlZF9zaXplLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUxLVx0XHRcdCAgICAgc2l6ZV90IGFjdHVhbF9zaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwNTQ9c3RydWN0IGJwZl9sb2dfYXR0cjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1NTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKmZwLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTYtXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD05MDE9c3RydWN0IGJwZl9mZF9hcnJheSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MDktLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHNcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTEwOiAqIG9uZSB2ZXJpZmllcl9lbnYgcGVyIGJwZl9jaGVjaygpIGNhbGxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTExLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleSh1NjQga2V5LCB1MzIgKm9ial9pZCwgdTMyICpidGZfaWQpXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTc5LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTgwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4MS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODI6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgzLVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4NC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4NTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTQzOD1pbnQgYnBmX3BydW5lX2RlYWRfYnJhbmNoZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE0Mzk6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE0NDAtaW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NDA9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDMtLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSB0cmFtcG9saW5lLmMgKi9cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY0NDppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDUtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDYtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NDc6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQ4LWludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExOTY9dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMTk3OnU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5OC1ib29sIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTcxNz1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC90Y3AuaC03MzAtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjIyLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTIyMzogKiBsb25nIGJwZl9jaGVja19tdHUodm9pZCAqY3R4LCB1MzIgaWZpbmRleCwgdTMyICptdHVfbGVuLCBzMzIgbGVuX2RpZmYsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjI0LSAqXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD03NDg1PXN0cnVjdCBicGZfcmVkaXJfbmVpZ2gge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk0LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc0OTU6LyogYnBmX2NoZWNrX210dSBmbGFncyovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NjplbnVtICBicGZfY2hlY2tfbXR1X2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk3LVx0QlBGX01UVV9DSEtfU0VHUyAgPSAoMVUgXHUwMDNjXHUwMDNjIDApLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk5LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc1MDA6ZW51bSBicGZfY2hlY2tfbXR1X3JldCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwMS1cdEJQRl9NVFVfQ0hLX1JFVF9TVUNDRVNTLCAgICAgIC8qIGNoZWNrIGFuZCBsb29rdXAgc3VjY2Vzc2Z1bCAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI5LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01NjEtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01NjMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OD1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc2OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3MDppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3MS1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlx0XHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cdFx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2xpbmZvOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cdFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVx0XHQvKlxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcdFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cdFx0ICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjcyNzpcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNS1cbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzExNy1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTE4Olx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjIwPXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzUzOlx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1NC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODU9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MDk5LVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTEwMDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwMS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3NT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4NS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1Mzg2Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDQ2PXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1NTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYyPXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3Mi1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NzM6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzQtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MDU9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTEzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUxNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE1LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MjkwPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjk4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjI5OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTAtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzExOlx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMi1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM2Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NjQ9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzUtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Ny0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4OTk1PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAzMS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQzNT1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NjY6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjctXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTUzNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzYtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjA9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTM1OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTM2LSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA2MS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3NC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDc1Olx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDc2LVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTY4Olx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxODA6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxODEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL3NlY2NvbXAuYz0yNDQ9c3RhdGljIHZvaWQgcG9wdWxhdGVfc2VjY29tcF9kYXRhKHN0cnVjdCBzZWNjb21wX2RhdGEgKnNkKVxuLS1cbmtlcm5lbC9zZWNjb21wLmMtMjcwLSAqXG5rZXJuZWwvc2VjY29tcC5jOjI3MTogKiBUYWtlcyBhIHByZXZpb3VzbHkgY2hlY2tlZCBmaWx0ZXIgKGJ5IGJwZl9jaGVja19jbGFzc2ljKSBhbmRcbmtlcm5lbC9zZWNjb21wLmMtMjcyLSAqIHJlZGlyZWN0cyBhbGwgZmlsdGVyIGNvZGUgdGhhdCBsb2FkcyBzdHJ1Y3Qgc2tfYnVmZiBkYXRhXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTg1ND1zdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy04NjktXHRpZiAoZGF0YV9pbikge1xubmV0L2JwZi90ZXN0X3J1bi5jOjg3MDpcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKGRhdGFfaW4pLCBtYXhfc2l6ZSwgc2l6ZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtODcxLVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXG5uZXQvY29yZS9maWx0ZXIuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcbm5ldC9jb3JlL2ZpbHRlci5jLTE4LSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk4Nz1zdGF0aWMgYm9vbCBjaGtfY29kZV9hbGxvd2VkKHUxNiBjb2RlX3RvX3Byb2JlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMDUzOnN0YXRpYyBib29sIGJwZl9jaGVja19iYXNpY3Nfb2soY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU0LVx0XHRcdFx0dW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2NC0vKipcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNjU6ICpcdGJwZl9jaGVja19jbGFzc2ljIC0gdmVyaWZ5IHNvY2tldCBmaWx0ZXIgY29kZVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2Ni0gKlx0QGZpbHRlcjogZmlsdGVyIHRvIHZlcmlmeVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzctICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMDc4OnN0YXRpYyBpbnQgYnBmX2NoZWNrX2NsYXNzaWMoY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDc5LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTMzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJlcGFyZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTM0MzpcdGVyciA9IGJwZl9jaGVja19jbGFzc2ljKGZwLVx1MDAzZWluc25zLCBmcC1cdTAwM2VsZW4pO1xubmV0L2NvcmUvZmlsdGVyLmMtMTM0NC1cdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMzg0PWludCBicGZfcHJvZ19jcmVhdGUoc3RydWN0IGJwZl9wcm9nICoqcGZwLCBzdHJ1Y3Qgc29ja19mcHJvZ19rZXJuICpmcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzg5LVx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTM5MDpcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cdTAwM2VmaWx0ZXIsIGZwcm9nLVx1MDAzZWxlbikpXG5uZXQvY29yZS9maWx0ZXIuYy0xMzkxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xNDI5PWludCBicGZfcHJvZ19jcmVhdGVfZnJvbV91c2VyKHN0cnVjdCBicGZfcHJvZyAqKnBmcCwgc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzYtXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXG5uZXQvY29yZS9maWx0ZXIuYzoxNDM3Olx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVx1MDAzZWZpbHRlciwgZnByb2ctXHUwMDNlbGVuKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTE1MDU9c3RydWN0IGJwZl9wcm9nICpfX2dldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNC1cdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjE1MTU6XHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXHUwMDNlZmlsdGVyLCBmcHJvZy1cdTAwM2VsZW4pKVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTI2Mz1zdGF0aWMgaW50IGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMwMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDMte1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz00MDU9c3RydWN0IHNvY2sgKmNvb2tpZV92NF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzo0MjY6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI3LVx0fSBlbHNlIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NTg6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyMz1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTM6XHRcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU0LVx0fVxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0xMzU9c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxubmV0L2lwdjQvdWRwX2JwZi5jOjE0NDpzdGF0aWMgdm9pZCB1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQ1LXtcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTYzPWludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XHRcdHVkcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc1LVxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE5Mi1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MTIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBnZXR0aW5nIHN0YXJ0ZWQgd2l0aCB0aGlzIEJQRiB2ZXJpZmljYXRpb24gYW5hbHlzaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfY2hlY2tgLiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AsIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AsIGFuZCBgcmVnc19yZWZpbmVfY29uZF9vcGAuIFRoZXkgYXJlIGFsbCBsaWtlbHkgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBicGZfY2hlY2tgIGlzIGludGVybmFsIG9yIGV4cG9zZWQuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgeWVwLCBpdCYjMzk7cyBhIHJlZ3VsYXIgZnVuY3Rpb24gZGVjbGFyYXRpb246CgpgYGBjCmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAoJICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpCmBgYAoKQW5kIGl0JiMzOTtzIG5vdCBgc3RhdGljYCwgc28gaXQmIzM5O3MgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodHMuIEkmIzM5O3ZlIHNlZW4gaXQgdXNlZCBpbiBgc3lzY2FsbC5jYCwgc28gSSBrbm93IHRoYXQmIzM5O3MgYWNjdXJhdGUuCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGZvY3VzOgoKKiAgIGBicGZfY2hlY2tgCiogICBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgCiogICBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgCiogICBgcmVnc19yZWZpbmVfY29uZF9vcGAKCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsIGhlcmUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIGFzIHdlbGwsIG9mIGNvdXJzZS4KClRoZSByZWxldmFudCBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGtlcm5lbC9icGYvY251bV9kZWZzLmhgLiBUaGlzIGlzIGluY2x1ZGVkIGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgTWFrZWZpbGUgdG8gYmUgc3VyZS4gSSB3aWxsIGFuYWx5emUgdGhlIE1ha2VmaWxlIGZvciBga2VybmVsL2JwZi9jbnVtLmNgIHRvIGlkZW50aWZ5IGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y251bS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MjkKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBjbnVtLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgY2lyY3VsYXIgbnVtYmVycyAoYGNudW1gKSBmb3IgcmVnaXN0ZXIgYm91bmRzLiBUaGlzIGlzIGEgKmNvcmUqIHBhcnQgb2YgdGhlIEJQRiB2ZXJpZmllciwgcmlnaHQ/IFNpbXBsaWZpY2F0aW9uIG9mIGBzbWluYCwgYHNtYXhgLCBgbm9ybWFsaXplYCwgYW5kIGBjb250YWluc2Ag4oCTIHRob3NlIGFyZSB0aGUgZnVuZGFtZW50YWwgb3BlcmF0aW9ucyBmb3IgbWFuYWdpbmcgYW5kIGNvbXBhcmluZyB0aGVzZSBib3VuZHMuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3Mgbm90IGp1c3QgYSByZWZhY3RvcmluZzsgaXQmIzM5O3MgYWx0ZXJpbmcgaG93IHRoZSB2ZXJpZmllciAqdGhpbmtzKiBhYm91dCByZWdpc3RlciBib3VuZHMuIFRoaXMgbWVhbnMgaXQgY291bGQgc3VidGx5IGFsdGVyIHdoaWNoIEJQRiBwcm9ncmFtcyBwYXNzIHZlcmlmaWNhdGlvbiBvciwgY29udmVyc2VseSwgd2hpY2ggb25lcyBhcmUgcmVqZWN0ZWQuIEl0IGNvdWxkIGFsc28gY2hhbmdlIHRoZSBwcmVjaXNpb24gb3IgYWNjdXJhY3kgb2YgdGhlIHRyYWNrZWQgYm91bmRzLCB3aGljaCBoYXMgc2VyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuIEFueSBjaGFuZ2UgdG8gdGhlIHZlcmlmaWVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGJvdW5kIHRyYWNraW5nLCBpcyB3b3J0aCBleHBsb3JpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpGcm9tIGEgZm9jdXMgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfY2hlY2tgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQsIG5hdHVyYWxseTsgYGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzYCBhbmQgYGFkanVzdF9wdHJfbWluX21heF92YWxzYCAtIHRoZXkmIzM5O3JlIGNyaXRpY2FsIGJlY2F1c2UgdGhleSBhcmUgdGhlIG9uZXMgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIGJvdW5kcyBhbmQgdGhlIGFkanVzdG1lbnQgdG8gdGhlbTsgYW5kIGByZWdzX3JlZmluZV9jb25kX29wYCAtIHRoaXMgaXMgaW1wb3J0YW50IGZvciBjb25kaXRpb25hbCBvcGVyYXRpb25zIGFuZCBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYnJhbmNoaW5nLCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIGBjbnVtYCBib3VuZHMgY29tZSBpbnRvIHBsYXkuCgpNeSByZWFzb25pbmc/IFRoZSBwYXRjaCBtZXNzZXMgd2l0aCB0aGUgZnVuZGFtZW50YWwgbG9naWMgb2YgQlBGIHZlcmlmaWVyJiMzOTtzIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzLiBJdCYjMzk7cyBhIHNpbXBsaWZpY2F0aW9uIGluIHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb24sIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBhZmZlY3RzIGhvdyB0aGUgdmVyaWZpZXIgZG9lcyBpdHMgam9iLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LiBGdXp6aW5nIGhhcyB0byBjb25jZW50cmF0ZSBvbiB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnRzLCBhbmQgdGhlc2UgZnVuY3Rpb25zOiBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgLCBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgLCBhbmQgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgLgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBgc2V0LXJlc3VsdHNgIHJ1bm5pbmcgYW5kIHN0YXJ0IGdlbmVyYXRpbmcgc29tZSBmdXp6IHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDthZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHRyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDtyZWdzX3JlZmluZV9jb25kX29wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDthZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHRyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDtyZWdzX3JlZmluZV9jb25kX29wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6MTkuOTg5MTkyNjc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxMTQxOTM3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImFkanVzdF9zY2FsYXJfbWluX21heF92YWxzXCIsXG4gICAgXCJhZGp1c3RfcHRyX21pbl9tYXhfdmFsc1wiLFxuICAgIFwicmVnc19yZWZpbmVfY29uZF9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjoxOS45ODkxOTk4MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTk0MTYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNjZDA4ZGU3YTg1ZmM0NjJjZTE0MWU1NzU1MWI5OWViYThlZGI5MjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjM6NDY6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jbnVtX2RlZnMuaCBiL2tlcm5lbC9icGYvY251bV9kZWZzLmhcXG5pbmRleCBhOTBlMzE3ZTM1NzgwLi4zMDY4NWU0M2RlMDQ5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY251bV9kZWZzLmhcXG4rKysgYi9rZXJuZWwvYnBmL2NudW1fZGVmcy5oXFxuQEAgLTMzLDcgKzMzLDEyIEBAIHN0cnVjdCBjbnVtX3QgRk4oZnJvbV9zcmFuZ2UpKHN0IG1pbiwgc3QgbWF4KVxcbiBcXHRyZXR1cm4gKHN0cnVjdCBjbnVtX3QpeyAuYmFzZSA9IGJhc2UsIC5zaXplID0gc2l6ZSB9O1xcbiB9XFxuIFxcbi0vKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byB1bnNpZ25lZCByYW5nZXMuICovXFxuKy8qXFxuKyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy5cXG4rICpcXG4rICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmdcXG4rICogdGhpcyBmdW5jdGlvbi5cXG4rICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBGTih1cmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcXG4ge1xcbiBcXHQvKiBTYW1lIGFzIGNudW0uYmFzZSArIGNudW0uc2l6ZSBcXHUwMDNlIFVUX01BWCBidXQgYXZvaWRzIG92ZXJmbG93ICovXFxuQEAgLTQ0LDYgKzQ5LDkgQEAgc3RhdGljIGlubGluZSBib29sIEZOKHVyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKVxcbiAgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXggcXVlcnkgYW4gdW5zaWduZWQgcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbnVtLlxcbiAgKiBJZiBjbnVtIHJlcHJlc2VudHMgYSByYW5nZSBjcm9zc2luZyB0aGUgVVRfTUFYLzAgYm91bmRhcnksIHRoZSB1bmJvdW5kIHJhbmdlXFxuICAqIFswLi5VVF9NQVhdIGlzIHJldHVybmVkLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xcbisgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXguXFxuICAqL1xcbiB1dCBGTih1bWluKShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG5AQCAtNTcsNyArNjUsMTIgQEAgdXQgRk4odW1heCkoc3RydWN0IGNudW1fdCBjbnVtKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKEZOKHVtYXgpKTtcXG4gXFxuLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuICovXFxuKy8qXFxuKyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuXFxuKyAqXFxuKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXFxuKyAqIHRoaXMgZnVuY3Rpb24uXFxuKyAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgRk4oc3JhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG4gXFx0cmV0dXJuIEZOKGNvbnRhaW5zKShjbnVtLCAodXQpU1RfTUFYKSBcXHUwMDI2XFx1MDAyNiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01JTik7XFxuQEAgLTY3LDE5ICs4MCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgRk4oc3JhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXFxuICAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heCBxdWVyeSBhIHNpZ25lZCByYW5nZSByZXByZXNlbnRlZCBieSB0aGlzIGNudW0uXFxuICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBTVF9NQVgvU1RfTUlOIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxcbiAgKiBbU1RfTUlOLi5TVF9NQVhdIGlzIHJldHVybmVkLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xcbisgKiBjbnVte1R9X3NtaW4gLyBjbnVte1R9X3NtYXguXFxuICAqL1xcbiBzdCBGTihzbWluKShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG4tXFx0cmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSlcXG4tXFx0ICAgICAgID8gU1RfTUlOXFxuLVxcdCAgICAgICA6IG1pbigoc3QpY251bS5iYXNlLCAoc3QpKGNudW0uYmFzZSArIGNudW0uc2l6ZSkpO1xcbitcXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01JTiA6IChzdCljbnVtLmJhc2U7XFxuIH1cXG4gXFxuIHN0IEZOKHNtYXgpKHN0cnVjdCBjbnVtX3QgY251bSlcXG4ge1xcbi1cXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKVxcbi1cXHQgICAgICAgPyBTVF9NQVhcXG4tXFx0ICAgICAgIDogbWF4KChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICsgY251bS5zaXplKSk7XFxuK1xcdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pID8gU1RfTUFYIDogKHN0KShjbnVtLmJhc2UgKyBjbnVtLnNpemUpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xODEsNyArMTkzLDcgQEAgdm9pZCBGTihpbnRlcnNlY3Rfd2l0aF9zcmFuZ2UpKHN0cnVjdCBjbnVtX3QgKmRzdCwgc3QgbWluLCBzdCBtYXgpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbnVtX3QgRk4obm9ybWFsaXplKShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG4tXFx0aWYgKGNudW0uc2l6ZSA9PSBVVF9NQVggXFx1MDAyNlxcdTAwMjYgY251bS5iYXNlICE9IDAgXFx1MDAyNlxcdTAwMjYgY251bS5iYXNlICE9ICh1dClTVF9NQVgpXFxuK1xcdGlmIChjbnVtLnNpemUgPT0gVVRfTUFYKVxcbiBcXHRcXHRjbnVtLmJhc2UgPSAwO1xcbiBcXHRyZXR1cm4gY251bTtcXG4gfVxcbkBAIC0yMTAsMTIgKzIyMiw3IEBAIGJvb2wgRk4oaXNfZW1wdHkpKHN0cnVjdCBjbnVtX3QgY251bSlcXG4gXFxuIGJvb2wgRk4oY29udGFpbnMpKHN0cnVjdCBjbnVtX3QgY251bSwgdXQgdilcXG4ge1xcbi1cXHRpZiAoRk4oaXNfZW1wdHkpKGNudW0pKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmIChGTih1cmFuZ2Vfb3ZlcmZsb3cpKGNudW0pKVxcbi1cXHRcXHRyZXR1cm4gdiBcXHUwMDNlPSBjbnVtLmJhc2UgfHwgdiBcXHUwMDNjPSAodXQpY251bS5iYXNlICsgY251bS5zaXplO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiB2IFxcdTAwM2U9IGNudW0uYmFzZSBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2M9ICh1dCljbnVtLmJhc2UgKyBjbnVtLnNpemU7XFxuK1xcdHJldHVybiAhRk4oaXNfZW1wdHkpKGNudW0pIFxcdTAwMjZcXHUwMDI2IHYgLSBjbnVtLmJhc2UgXFx1MDAzYz0gY251bS5zaXplO1xcbiB9XFxuIFxcbiBib29sIEZOKGlzX2NvbnN0KShzdHJ1Y3QgY251bV90IGNudW0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjIwLjM4MTk1Njk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjU3MjE0MjA5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImFkanVzdF9zY2FsYXJfbWluX21heF92YWxzXCIsXG4gICAgXCJhZGp1c3RfcHRyX21pbl9tYXhfdmFsc1wiLFxuICAgIFwicmVnc19yZWZpbmVfY29uZF9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzY2QwOGRlN2E4NWZjNDYyY2UxNDFlNTc1NTFiOTllYmE4ZWRiOTIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjM6NDY6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NudW1fZGVmcy5oIGIva2VybmVsL2JwZi9jbnVtX2RlZnMuaFxuaW5kZXggYTkwZTMxN2UzNTc4MC4uMzA2ODVlNDNkZTA0OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY251bV9kZWZzLmhcbisrKyBiL2tlcm5lbC9icGYvY251bV9kZWZzLmhcbkBAIC0zMyw3ICszMywxMiBAQCBzdHJ1Y3QgY251bV90IEZOKGZyb21fc3JhbmdlKShzdCBtaW4sIHN0IG1heClcbiBcdHJldHVybiAoc3RydWN0IGNudW1fdCl7IC5iYXNlID0gYmFzZSwgLnNpemUgPSBzaXplIH07XG4gfVxuIFxuLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy4gKi9cbisvKlxuKyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy5cbisgKlxuKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXG4rICogdGhpcyBmdW5jdGlvbi5cbisgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgRk4odXJhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuIFx0LyogU2FtZSBhcyBjbnVtLmJhc2UgKyBjbnVtLnNpemUgXHUwMDNlIFVUX01BWCBidXQgYXZvaWRzIG92ZXJmbG93ICovXG5AQCAtNDQsNiArNDksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgRk4odXJhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXG4gICogY251bXtUfV91bWluIC8gY251bXtUfV91bWF4IHF1ZXJ5IGFuIHVuc2lnbmVkIHJhbmdlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY251bS5cbiAgKiBJZiBjbnVtIHJlcHJlc2VudHMgYSByYW5nZSBjcm9zc2luZyB0aGUgVVRfTUFYLzAgYm91bmRhcnksIHRoZSB1bmJvdW5kIHJhbmdlXG4gICogWzAuLlVUX01BWF0gaXMgcmV0dXJuZWQuXG4rICpcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xuKyAqIGNudW17VH1fdW1pbiAvIGNudW17VH1fdW1heC5cbiAgKi9cbiB1dCBGTih1bWluKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuQEAgLTU3LDcgKzY1LDEyIEBAIHV0IEZOKHVtYXgpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoRk4odW1heCkpO1xuIFxuLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuICovXG4rLypcbisgKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byBzaWduZWQgcmFuZ2VzLlxuKyAqXG4rICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmdcbisgKiB0aGlzIGZ1bmN0aW9uLlxuKyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB7XG4gXHRyZXR1cm4gRk4oY29udGFpbnMpKGNudW0sICh1dClTVF9NQVgpIFx1MDAyNlx1MDAyNiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01JTik7XG5AQCAtNjcsMTkgKzgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiAgKiBjbnVte1R9X3NtaW4gLyBjbnVte1R9X3NtYXggcXVlcnkgYSBzaWduZWQgcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbnVtLlxuICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBTVF9NQVgvU1RfTUlOIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxuICAqIFtTVF9NSU4uLlNUX01BWF0gaXMgcmV0dXJuZWQuXG4rICpcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xuKyAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heC5cbiAgKi9cbiBzdCBGTihzbWluKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0cmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSlcbi1cdCAgICAgICA/IFNUX01JTlxuLVx0ICAgICAgIDogbWluKChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICsgY251bS5zaXplKSk7XG4rXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01JTiA6IChzdCljbnVtLmJhc2U7XG4gfVxuIFxuIHN0IEZOKHNtYXgpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB7XG4tXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKVxuLVx0ICAgICAgID8gU1RfTUFYXG4tXHQgICAgICAgOiBtYXgoKHN0KWNudW0uYmFzZSwgKHN0KShjbnVtLmJhc2UgKyBjbnVtLnNpemUpKTtcbitcdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pID8gU1RfTUFYIDogKHN0KShjbnVtLmJhc2UgKyBjbnVtLnNpemUpO1xuIH1cbiBcbiAvKlxuQEAgLTE4MSw3ICsxOTMsNyBAQCB2b2lkIEZOKGludGVyc2VjdF93aXRoX3NyYW5nZSkoc3RydWN0IGNudW1fdCAqZHN0LCBzdCBtaW4sIHN0IG1heClcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbnVtX3QgRk4obm9ybWFsaXplKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0aWYgKGNudW0uc2l6ZSA9PSBVVF9NQVggXHUwMDI2XHUwMDI2IGNudW0uYmFzZSAhPSAwIFx1MDAyNlx1MDAyNiBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWClcbitcdGlmIChjbnVtLnNpemUgPT0gVVRfTUFYKVxuIFx0XHRjbnVtLmJhc2UgPSAwO1xuIFx0cmV0dXJuIGNudW07XG4gfVxuQEAgLTIxMCwxMiArMjIyLDcgQEAgYm9vbCBGTihpc19lbXB0eSkoc3RydWN0IGNudW1fdCBjbnVtKVxuIFxuIGJvb2wgRk4oY29udGFpbnMpKHN0cnVjdCBjbnVtX3QgY251bSwgdXQgdilcbiB7XG4tXHRpZiAoRk4oaXNfZW1wdHkpKGNudW0pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoRk4odXJhbmdlX292ZXJmbG93KShjbnVtKSlcbi1cdFx0cmV0dXJuIHYgXHUwMDNlPSBjbnVtLmJhc2UgfHwgdiBcdTAwM2M9ICh1dCljbnVtLmJhc2UgKyBjbnVtLnNpemU7XG4tXHRlbHNlXG4tXHRcdHJldHVybiB2IFx1MDAzZT0gY251bS5iYXNlIFx1MDAyNlx1MDAyNiB2IFx1MDAzYz0gKHV0KWNudW0uYmFzZSArIGNudW0uc2l6ZTtcbitcdHJldHVybiAhRk4oaXNfZW1wdHkpKGNudW0pIFx1MDAyNlx1MDAyNiB2IC0gY251bS5iYXNlIFx1MDAzYz0gY251bS5zaXplO1xuIH1cbiBcbiBib29sIEZOKGlzX2NvbnN0KShzdHJ1Y3QgY251bV90IGNudW0pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjoyMC4zODE5NTg2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjQ1NTM2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBQYXRjaDogY251bV9kZWZzLmggTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbW9kaWZ5aW5nIGBrZXJuZWwvYnBmL2NudW1fZGVmcy5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyLCBsaWtlbHkgZGVhbGluZyB3aXRoIGNpcmN1bGFyIG51bWJlciByZXByZXNlbnRhdGlvbnMgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGp1ZGdpbmcgYnkgdGhlIGZ1bmN0aW9uIG5hbWVzLiBXZSd2ZSBnb3QgY2hhbmdlcyB0byBmb3VyIGZ1bmN0aW9uczogYEZOKHNtaW4pYCwgYEZOKHNtYXgpYCwgYEZOKG5vcm1hbGl6ZSlgLCBhbmQgYEZOKGNvbnRhaW5zKWAuIExldCdzIGJyZWFrIHRoZXNlIGRvd24gcXVpY2tseS5cblxuRmlyc3QsIGBGTihzbWluKWAgYW5kIGBGTihzbWF4KWAgYXJlIHNpbXBsaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHBvdGVudGlhbGx5IGhhZCByZWR1bmRhbnQgYG1pbmAgYW5kIGBtYXhgIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCByZW1vdmVzIHRoaXMgY29tcGxleGl0eS4gU3BlY2lmaWNhbGx5LCBpbiB0aGUgYHNtaW5gIGZ1bmN0aW9uIGl0IHdhcyBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBieSB1c2luZyB0aGUgYG1pbmAgZnVuY3Rpb24uIFRoZSBwYXRjaCBub3cgc2ltcGx5IHJldHVybnMgdGhlIGBjbnVtLmJhc2VgIHZhbHVlIGlmIHRoZXJlIGlzIG5vIG92ZXJmbG93LiBTaW1pbGFybHksIGBGTihzbWF4KWAgd2FzIHVzaW5nIGBtYXhgIGJ1dCBub3cgc2ltcGx5IHJldHVybnMgYGNudW0uYmFzZSArIGNudW0uc2l6ZWAuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIG9ic2VydmF0aW9uLiBJdCBwcm9iYWJseSBpbXBsaWVzIHRoYXQgdGhlIG92ZXJmbG93IGNhc2Ugd2lsbCBhbHdheXMgcmVzdWx0IGluIGEgbWluaW11bSBvciBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlIGJhc2UgcGx1cyBzaXplIGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIG1heCBpbiB0aGUgbm9uLW92ZXJmbG93IGNhc2UuXG5cblRoZW4sIGBGTihub3JtYWxpemUpYCBpcyBjbGVhbmVkIHVwLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYW4gZXh0cmEgY29uZGl0aW9uYWwgY2hlY2suIEl0IHNlZW1zIHRoZSB1cGRhdGVkIGxvZ2ljIHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgY251bS5iYXNlICE9IDAgXHUwMDI2XHUwMDI2IGNudW0uYmFzZSAhPSAodXQpU1RfTUFYYCwgc2ltcGxpZnlpbmcgdGhlIG92ZXJmbG93IGhhbmRsaW5nLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIHRoaXMgcGFydGljdWxhciBjaGFuZ2UsIGJ1dCBpdCdzIGNsZWFybHkgYSByZWR1Y3Rpb24gaW4gY29kZSBjb21wbGV4aXR5LlxuXG5GaW5hbGx5LCBgRk4oY29udGFpbnMpYCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IHJld29ya2VkLiBUaGUgb3JpZ2luYWwgdmVyc2lvbiBoYWQgdHdvIGRpZmZlcmVudCBwYXRocywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUgd2FzIGFuIG92ZXJmbG93IGluIHRoZSByYW5nZSBjYWxjdWxhdGlvbi4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGNvbmRpdGlvbmFsIGFuZCBpbnN0ZWFkIGNoZWNrcyBgdiAtIGNudW0uYmFzZSBcdTAwM2M9IGNudW0uc2l6ZWAuIFNlZW1zIGxpa2UgdGhpcyBpcyBvcHRpbWl6aW5nIGZvciBhIHNpbXBsZXIgYW5kIG1vcmUgcGVyZm9ybWFudCBjaGVjayB0aGF0IGNvdmVycyBib3RoIG92ZXJmbG93IGFuZCBub3JtYWwgY2FzZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBsaWtlbHkgbW9yZSBjb21wbGV4IHRoYW4gbmVjZXNzYXJ5LlxuXG5PdmVyYWxsLCB0aGVzZSBsb29rIGxpa2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFpbWVkIGF0IHNpbXBsaWZ5aW5nIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVsYXRlZCB0byBudW1iZXIgcmFuZ2VzLiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIHVzZXMgb2YgYGNudW1fZGVmcy5oYCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgcmlwcGxlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6MjYuNzQ2NTE1NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NjA4MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbnVtX2RlZnMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NudW0uYy02LSNkZWZpbmUgVCAzMlxcbmtlcm5lbC9icGYvY251bS5jOjc6I2luY2x1ZGUgXFxcImNudW1fZGVmcy5oXFxcIlxcbmtlcm5lbC9icGYvY251bS5jLTgtI3VuZGVmIFRcXG4tLVxcbmtlcm5lbC9icGYvY251bS5jLTEwLSNkZWZpbmUgVCA2NFxcbmtlcm5lbC9icGYvY251bS5jOjExOiNpbmNsdWRlIFxcXCJjbnVtX2RlZnMuaFxcXCJcXG5rZXJuZWwvYnBmL2NudW0uYy0xMi0jdW5kZWYgVFxcbi0tXFxua2VybmVsL2JwZi9jbnVtX2RlZnMuaC00LSNpZm5kZWYgVFxcbmtlcm5lbC9icGYvY251bV9kZWZzLmg6NTojZXJyb3IgXFxcIkRlZmluZSBUIChiaXQgd2lkdGg6IDMyLCA2NCkgYmVmb3JlIGluY2x1ZGluZyBjbnVtX2RlZnMuaFxcXCJcXG5rZXJuZWwvYnBmL2NudW1fZGVmcy5oLTYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjI5LjIzMjYwNjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUyMjQwMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBicGYvY251bSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJIHNlZSBgY251bV9kZWZzLmhgIGlzIGdldHRpbmcgaW5jbHVkZWQgd2l0aGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIFRoYXQncyBhIGNsYXNzaWMgc2V0dXAgZm9yIGRlZmluaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyAoMzItYml0IGFuZCA2NC1iaXQgaW4gdGhpcyBjYXNlKSBpbXBsZW1lbnRhdGlvbnMgb2Ygc29tZSBjcml0aWNhbCBudW1lcmljYWwgZnVuY3Rpb25zLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvY251bS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBhY3R1YWxseSAqZXhwb3J0ZWQqIGZyb20gdGhhdCBtb2R1bGUsIGFuZCBtb3JlIGNyaXRpY2FsbHksIHdoYXQgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBiZWluZyAqdXNlZCogd2l0aGluIGl0LiBJZGVudGlmeWluZyB0aGUgY2FsbCBncmFwaCBmcm9tIHRoYXQgcG9pbnQgd2lsbCBhbGxvdyBhIGNsZWFuIHZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aG9zZSBiaXQgd2lkdGhzIGFuZCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBObyBwb2ludCBnb2luZyBmdXJ0aGVyIHdpdGhvdXQgYSBzb2xpZCBtYXAgb2YgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjozMi40ODQ4NDkzNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNzQ1NTU2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbnVtMzJfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTk0PXN0YXRpYyBpbmxpbmUgczMyIHJlZ19zMzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xOTUte1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTk2OlxcdHJldHVybiBjbnVtMzJfc21pbihyZWctXFx1MDAzZXIzMik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xOTctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xOTk9c3RhdGljIGlubGluZSBzMzIgcmVnX3MzMl9tYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIwMC17XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoyMDE6XFx0cmV0dXJuIGNudW0zMl9zbWF4KHJlZy1cXHUwMDNlcjMyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIwMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTIwND1zdGF0aWMgaW5saW5lIHUzMiByZWdfdTMyX21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjA1LXtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjIwNjpcXHRyZXR1cm4gY251bTMyX3VtaW4ocmVnLVxcdTAwM2VyMzIpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjA3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MjA5PXN0YXRpYyBpbmxpbmUgdTMyIHJlZ191MzJfbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTAte1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjExOlxcdHJldHVybiBjbnVtMzJfdW1heChyZWctXFx1MDAzZXIzMik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0yMTQ9c3RhdGljIGlubGluZSB2b2lkIHJlZ19zZXRfc3JhbmdlMzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgczMyIHNtaW4sIHMzMiBzbWF4KVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjE1LXtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjIxNjpcXHRyZWctXFx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3NyYW5nZShzbWluLCBzbWF4KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIxNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTIxOT1zdGF0aWMgaW5saW5lIHZvaWQgcmVnX3NldF91cmFuZ2UzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1MzIgdW1pbiwgdTMyIHVtYXgpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMjAte1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjIxOlxcdHJlZy1cXHUwMDNlcjMyID0gY251bTMyX2Zyb21fdXJhbmdlKHVtaW4sIHVtYXgpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjIyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvY251bS5oPTI4PXN0cnVjdCBjbnVtMzIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9jbnVtLmgtMzUtXFxuaW5jbHVkZS9saW51eC9jbnVtLmg6MzY6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV91cmFuZ2UodTMyIG1pbiwgdTMyIG1heCk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzc6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV9zcmFuZ2UoczMyIG1pbiwgczMyIG1heCk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzg6dTMyIGNudW0zMl91bWluKHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzk6dTMyIGNudW0zMl91bWF4KHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDA6czMyIGNudW0zMl9zbWluKHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDE6czMyIGNudW0zMl9zbWF4KHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDI6c3RydWN0IGNudW0zMiBjbnVtMzJfaW50ZXJzZWN0KHN0cnVjdCBjbnVtMzIgYSwgc3RydWN0IGNudW0zMiBiKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Mzp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aChzdHJ1Y3QgY251bTMyICpkc3QsIHN0cnVjdCBjbnVtMzIgc3JjKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0NDp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aF91cmFuZ2Uoc3RydWN0IGNudW0zMiAqZHN0LCB1MzIgbWluLCB1MzIgbWF4KTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0NTp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2Uoc3RydWN0IGNudW0zMiAqZHN0LCBzMzIgbWluLCBzMzIgbWF4KTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Njpib29sIGNudW0zMl9jb250YWlucyhzdHJ1Y3QgY251bTMyIGNudW0sIHUzMiB2KTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Nzpib29sIGNudW0zMl9pc19jb25zdChzdHJ1Y3QgY251bTMyIGNudW0pO1xcbmluY2x1ZGUvbGludXgvY251bS5oOjQ4OmJvb2wgY251bTMyX2lzX2VtcHR5KHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDk6c3RydWN0IGNudW0zMiBjbnVtMzJfYWRkKHN0cnVjdCBjbnVtMzIgYSwgc3RydWN0IGNudW0zMiBiKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo1MDpzdHJ1Y3QgY251bTMyIGNudW0zMl9uZWdhdGUoc3RydWN0IGNudW0zMiBhKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo1MTpib29sIGNudW0zMl9pc19zdWJzZXQoc3RydWN0IGNudW0zMiBvdXRlciwgc3RydWN0IGNudW0zMiBpbm5lcik7XFxuaW5jbHVkZS9saW51eC9jbnVtLmgtNTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NudW0uaD03Nz1ib29sIGNudW02NF9pc19zdWJzZXQoc3RydWN0IGNudW02NCBvdXRlciwgc3RydWN0IGNudW02NCBpbm5lcik7XFxuaW5jbHVkZS9saW51eC9jbnVtLmgtNzgtXFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Nzk6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV9jbnVtNjQoc3RydWN0IGNudW02NCBjbnVtKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo4MDpzdHJ1Y3QgY251bTY0IGNudW02NF9jbnVtMzJfaW50ZXJzZWN0KHN0cnVjdCBjbnVtNjQgYSwgc3RydWN0IGNudW0zMiBiKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaC04MS1cXG4tLVxcbmtlcm5lbC9icGYvY251bS5jLTEzLVxcbmtlcm5lbC9icGYvY251bS5jOjE0OnN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fY251bTY0KHN0cnVjdCBjbnVtNjQgY251bSlcXG5rZXJuZWwvYnBmL2NudW0uYy0xNS17XFxuLS1cXG5rZXJuZWwvYnBmL2NudW0uYy00MC0gKi9cXG5rZXJuZWwvYnBmL2NudW0uYzo0MTpzdHJ1Y3QgY251bTY0IGNudW02NF9jbnVtMzJfaW50ZXJzZWN0KHN0cnVjdCBjbnVtNjQgYSwgc3RydWN0IGNudW0zMiBiKVxcbmtlcm5lbC9icGYvY251bS5jLTQyLXtcXG4tLVxcbmtlcm5lbC9icGYvY251bS5jLTUwLVxcbmtlcm5lbC9icGYvY251bS5jOjUxOlxcdGlmIChjbnVtNjRfaXNfZW1wdHkoYSkgfHwgY251bTMyX2lzX2VtcHR5KGIpKVxcbmtlcm5lbC9icGYvY251bS5jLTUyLVxcdFxcdHJldHVybiBDTlVNNjRfRU1QVFk7XFxua2VybmVsL2JwZi9jbnVtLmMtNTMtXFxua2VybmVsL2JwZi9jbnVtLmM6NTQ6XFx0aWYgKGNudW0zMl91cmFuZ2Vfb3ZlcmZsb3coYjEpKSB7XFxua2VybmVsL2JwZi9jbnVtLmMtNTUtXFx0XFx0YjFfbWF4ID0gKHUzMiliMS5iYXNlICsgKHUzMiliMS5zaXplOyAvKiBvdmVyZmxvdyBoZXJlIGlzIGZpbmUgYW5kIG5lY2Vzc2FyeSAqL1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0zMDI9c3RhdGljIGJvb2wgcmFuZ2Vfd2l0aGluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNS1cXHRyZXR1cm4gY251bTY0X2lzX3N1YnNldChvbGQtXFx1MDAzZXI2NCwgY3VyLVxcdTAwM2VyNjQpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzozMDY6XFx0ICAgICAgIGNudW0zMl9pc19zdWJzZXQob2xkLVxcdTAwM2VyMzIsIGN1ci1cXHUwMDNlcjMyKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5MT1zdGF0aWMgdm9pZCBfX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTQtXFx0cmVnLVxcdTAwM2VyNjQgPSBjbnVtNjRfZnJvbV91cmFuZ2UoaW1tLCBpbW0pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk1OlxcdHJlZy1cXHUwMDNlcjMyID0gY251bTMyX2Zyb21fdXJhbmdlKCh1MzIpaW1tLCAodTMyKWltbSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTYtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTE9c3RhdGljIHZvaWQgX19tYXJrX3JlZzMyX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMy1cXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX2NvbnN0X3N1YnJlZyhyZWctXFx1MDAzZXZhcl9vZmYsIGltbSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTQ6XFx0cmVnLVxcdTAwM2VyMzIgPSBjbnVtMzJfZnJvbV91cmFuZ2UoKHUzMilpbW0sICh1MzIpaW1tKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxNS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk0OT1zdGF0aWMgdm9pZCByZXNldF9yZWczMl9hbmRfdG51bShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTU6c3RhdGljIHN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fdG51bShzdHJ1Y3QgdG51bSB0bnVtKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwLVxcdFxcdC8qIG1heCBzaWduZWQgaXMgbWluKHNpZ24gYml0KSB8IG1heChvdGhlciBiaXRzKSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYxOlxcdFxcdHJldHVybiBjbnVtMzJfZnJvbV9zcmFuZ2UodG51bS52YWx1ZSB8ICh0bnVtLm1hc2sgXFx1MDAyNiBTMzJfTUlOKSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2Mi1cXHRcXHRcXHRcXHRcXHQgIHRudW0udmFsdWUgfCAodG51bS5tYXNrIFxcdTAwMjYgUzMyX01BWCkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYzLVxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NDpcXHRcXHRyZXR1cm4gY251bTMyX2Zyb21fdXJhbmdlKHRudW0udmFsdWUsICh0bnVtLnZhbHVlIHwgdG51bS5tYXNrKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjUtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Nzg9c3RhdGljIHZvaWQgX191cGRhdGVfcmVnMzJfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzkte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTgwOlxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcXHUwMDI2cmVnLVxcdTAwM2VyMzIsIGNudW0zMl9mcm9tX3RudW0ocmVnLVxcdTAwM2V2YXJfb2ZmKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODEtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjQ9c3RhdGljIHZvaWQgZGVkdWNlX2JvdW5kc18zMl9mcm9tXzY0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDI2OlxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcXHUwMDI2cmVnLVxcdTAwM2VyMzIsIGNudW0zMl9mcm9tX2NudW02NChyZWctXFx1MDAzZXI2NCkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDI5PXN0YXRpYyB2b2lkIGRlZHVjZV9ib3VuZHNfNjRfZnJvbV8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMTpcXHRyZWctXFx1MDAzZXI2NCA9IGNudW02NF9jbnVtMzJfaW50ZXJzZWN0KHJlZy1cXHUwMDNlcjY0LCByZWctXFx1MDAzZXIzMik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODI9c3RhdGljIGJvb2wgY29uc3RfdG51bV9yYW5nZV9taXNtYXRjaF8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODc6XFx0cmV0dXJuICFjbnVtMzJfaXNfY29uc3QocmVnLVxcdTAwM2VyMzIpIHx8IHJlZy1cXHUwMDNlcjMyLmJhc2UgIT0gdG51bV9zdWJyZWcocmVnLVxcdTAwM2V2YXJfb2ZmKS52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4OC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5MD1zdGF0aWMgYm9vbCByYW5nZV9ib3VuZHNfdmlvbGF0aW9uKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTEte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDkyOlxcdHJldHVybiBjbnVtMzJfaXNfZW1wdHkocmVnLVxcdTAwM2VyMzIpIHx8IGNudW02NF9pc19lbXB0eShyZWctXFx1MDAzZXI2NCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTMtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU0ODk9c3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplX3N4KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU1MDYtXFx0XFx0cmVnLVxcdTAwM2VyNjQgPSBjbnVtNjRfZnJvbV91cmFuZ2UodTY0X2N2YWwsIHU2NF9jdmFsKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTUwNzpcXHRcXHRyZWctXFx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSgodTMyKXU2NF9jdmFsLCAodTMyKXU2NF9jdmFsKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTUwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM5MTY9c3RhdGljIHZvaWQgc2NhbGFyMzJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MTgte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkxOTpcXHRkc3RfcmVnLVxcdTAwM2VyMzIgPSBjbnVtMzJfYWRkKGRzdF9yZWctXFx1MDAzZXIzMiwgc3JjX3JlZy1cXHUwMDNlcjMyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MjAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTI4PXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfc3ViKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTMwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5MzE6XFx0ZHN0X3JlZy1cXHUwMDNlcjMyID0gY251bTMyX2FkZChkc3RfcmVnLVxcdTAwM2VyMzIsIGNudW0zMl9uZWdhdGUoc3JjX3JlZy1cXHUwMDNlcjMyKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTMyLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzk0MD1zdGF0aWMgdm9pZCBzY2FsYXIzMl9taW5fbWF4X211bChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzk2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5Njc6XFx0ZHN0X3JlZy1cXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChjbnVtMzJfZnJvbV91cmFuZ2UodW1pbiwgdW1heCksXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzOTY4OlxcdFxcdFxcdFxcdFxcdGNudW0zMl9mcm9tX3NyYW5nZShzbWluLCBzbWF4KSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTY5LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU3MD1zdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTU5MS1cXHRcXHRpZiAoaXNfam1wMzIpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU1OTI6XFx0XFx0XFx0cmVnMS1cXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChyZWcxLVxcdTAwM2VyMzIsIHJlZzItXFx1MDAzZXIzMik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NTkzLVxcdFxcdFxcdHJlZzItXFx1MDAzZXIzMiA9IHJlZzEtXFx1MDAzZXIzMjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTYxNy1cXHRcXHRcXHQvKiBDb21wbGVtZW50IG9mIHRoZSByYW5nZSBbdmFsLCB2YWxdIGFzIGNudW0zMi4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2MTg6XFx0XFx0XFx0Y251bTMyX2ludGVyc2VjdF93aXRoKFxcdTAwMjZyZWcxLVxcdTAwM2VyMzIsIChzdHJ1Y3QgY251bTMyKXsgdmFsICsgMSwgVTMyX01BWCAtIDEgfSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjE5LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2NjctXFx0XFx0aWYgKGlzX2ptcDMyKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NjY4OlxcdFxcdFxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF91cmFuZ2UoXFx1MDAyNnJlZzEtXFx1MDAzZXIzMiwgMCwgcmVnX3UzMl9tYXgocmVnMikpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY2OTpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ191MzJfbWluKHJlZzEpLCBVMzJfTUFYKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2NzAtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY3Ni1cXHRcXHRpZiAoaXNfam1wMzIpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2Nzc6XFx0XFx0XFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShcXHUwMDI2cmVnMS1cXHUwMDNlcjMyLCAwLCByZWdfdTMyX21heChyZWcyKSAtIDEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY3ODpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ191MzJfbWluKHJlZzEpICsgMSwgVTMyX01BWCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njc5LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODUtXFx0XFx0aWYgKGlzX2ptcDMyKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Njg2OlxcdFxcdFxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2UoXFx1MDAyNnJlZzEtXFx1MDAzZXIzMiwgUzMyX01JTiwgcmVnX3MzMl9tYXgocmVnMikpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY4NzpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ19zMzJfbWluKHJlZzEpLCBTMzJfTUFYKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY5NC1cXHRcXHRpZiAoaXNfam1wMzIpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2OTU6XFx0XFx0XFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3NyYW5nZShcXHUwMDI2cmVnMS1cXHUwMDNlcjMyLCBTMzJfTUlOLCByZWdfczMyX21heChyZWcyKSAtIDEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY5NjpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ19zMzJfbWluKHJlZzEpICsgMSwgUzMyX01BWCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njk3LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjM0LjI5MjMwOTgyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mzk4OTgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQ2hhbmdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9jbnVtX2RlZnMuaGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgZmlsZSdzIGluY2x1c2lvbiBpbiBga2VybmVsL2JwZi9jbnVtLmNgLiBUaGUgYGNudW0zMl8qYCBhbmQgYGNudW02NF8qYCBmdW5jdGlvbnMgZGVmaW5lZCB0aGVyZSBhcmUgY3JpdGljYWw7IHRoZSB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB1c2VzIHRoZW0gZXh0ZW5zaXZlbHkuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGF0IHRoZSBoZWFydCBvZiBob3cgdGhlIEJQRiB2ZXJpZmllciB0cmFja3MgcmVnaXN0ZXIgYm91bmRzIOKAkyB0aGUgbWluL21heCB2YWx1ZXMgaXQgdXNlcyB0byBlbnN1cmUgcHJvZ3JhbXMgYXJlIHNhZmUuIENoYW5naW5nIHRoaXMgKmRlZmluaXRlbHkqIG1lYW5zIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhhdCBtZWFucyBmdXp6aW5nIGlzIGNydWNpYWwuIFdlJ3JlIGxvb2tpbmcgYXQgY29yZSB2YWx1ZSB0cmFja2luZyBsb2dpYy5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29yZSBib3VuZCBmdW5jdGlvbnMgYW5kIHRoZSBCUEYgdmVyaWZpZXIncyByZWxpYW5jZSBvbiB0aGVzZSB2YWx1ZXMsIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGFyZSBsaWtlbHkgdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgdGhlbXNlbHZlcywgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqZGlyZWN0bHkqIHVzaW5nIHRoZXNlIGJvdW5kcy4gSSdsbCBuZWVkIHRvIGdvIHRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCB0YWtlIGEgbG9vayBmb3IgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjozOC43MzIyMTE2NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjgzMTcxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NTMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTEyOD1yZXVzZXMgdGhlIGV4aXN0aW5nIGBgZmRfYXJyYXlgYDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNC0gICBzZXQgc28gdGhlIGtlcm5lbCBrbm93cyB0aGUgYXJyYXkncyBsZW5ndGguXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q6MTM1OiMuIFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gcnVucyBpbnNpZGUgdGhlIHZlcmlmaWVyIChgYGJwZl9jaGVjaygpYGApLCBvbmNlIGl0XFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM2LSAgIGhhcyByZXNvbHZlZCB0aGUgYGBmZF9hcnJheWBgIGVudHJpZXMgaW50byB0aGUgcHJvZ3JhbSdzIGBgdXNlZF9tYXBzYGAuIFRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q9MjMwPVRoaXMgaG9vayBnYXRlcyBhZG1pc3Npb24gKipmb3IgZXZlcnkgbG9hZCoqLCBmcm9tIGEgc2luZ2xlIGNhbGwgc2l0ZSBpbnNpZGUgdGhlXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q6MjMxOnZlcmlmaWVyIChgYGJwZl9jaGVjaygpYGApLCBiZWZvcmUgdGhlIG1haW4gdmVyaWZpY2F0aW9uIHdvcmsuIEl0IHJ1bnMgYWZ0ZXIgdGhlXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMjMyLW9wdGlvbmFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIHNvIHRoZSB2ZXJkaWN0IGFuZCBrZXlyaW5nIGZpZWxkcyBhcmUgZmluYWwgLSB0aGVcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0PTY0Nz1nb3QgZnJvbSBicGZfcHJvZ19jcmVhdGUoKSwgYW5kICdjdHgnIHRoZSBnaXZlbiBjb250ZXh0IChlLmcuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci5yc3Q6NjQ4OnNrYiBwb2ludGVyKS4gQWxsIGNvbnN0cmFpbnRzIGFuZCByZXN0cmljdGlvbnMgZnJvbSBicGZfY2hlY2tfY2xhc3NpYygpIGFwcGx5XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci5yc3QtNjQ5LWJlZm9yZSBhIGNvbnZlcnNpb24gdG8gdGhlIG5ldyBsYXlvdXQgaXMgYmVpbmcgZG9uZSBiZWhpbmQgdGhlIHNjZW5lcyFcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTY9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yNi1cXHRhZGRcXHR4MCwgeDksIHgyNVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjI3OlxcdGJsXFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjgtXFx0LyogQlBGX1JFR19BWCh4OSkgd2lsbCBiZSBzdG9yZWQgaW50byBjb3VudCwgc28gbW92ZSByZXR1cm4gdmFsdWUgdG8gaXQuICovXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNDogKiBDYWxsIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggbm9ybWFsIHBvd2VycGM2NCBBQkk6XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xNS0gKiBcXHQtIHIzID0gcHRyLCByZXR1cm4gaW4gcjNcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MjA9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM4LVxcdGFkZCAgICAgcjMsIHIzMSwgcjEyXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozOTpcXHRibCAgICAgIGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDAtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMS0gKlxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjEyOiAqIENhbGxzIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggdGhlIHN0YW5kYXJkIFJJU0MtViBBQkksIHdoZXJlXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTMtICogcHRyID0gQlBGX1JFR19GUCAoczUpICsgQlBGX1JFR19BWCAodDApLiBCUEYgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0xNz1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMxLVxcdGFkZFxcdGEwLCB0MCwgczVcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozMjpcXHRjYWxsXFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzMtXFx0bXZcXHR0MCwgYTBcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MjI9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM2LVxcdGxheSAlcjIsMCglcjEyLCVyMTMpXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozNzpcXHRicmFzbCAlcjE0LGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzgtXFx0bGdyICVyMTIsJXIyXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MTE9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXFx0Q0FMTF9ERVBUSF9BQ0NPVU5UXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQwOlxcdGNhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTE4MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jOjE4MjpuZnBfYnBmX2NoZWNrX210dShzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmMtMTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYz01MjE9Y29uc3Qgc3RydWN0IG5mcF9hcHBfdHlwZSBhcHBfYnBmID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM6NTMxOlxcdC5jaGVja19tdHVcXHQ9IG5mcF9icGZfY2hlY2tfbXR1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYy01MzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTE2OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzoxNzA6bmZwX2JwZl9jaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtMTcxLVxcdFxcdFxcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9MzEwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjMxMTpuZnBfYnBmX2NoZWNrX2V4aXQoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTMxMi1cXHRcXHQgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0zNDI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6MzQzOm5mcF9icGZfY2hlY2tfc3RhY2tfYWNjZXNzKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zNDQtXFx0XFx0XFx0ICAgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTQ1MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo0NTE6bmZwX2JwZl9jaGVja19wdHIoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NTItXFx0XFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCByZWdfbm8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTQ2NS1cXHRpZiAocmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NDY2OlxcdFxcdGVyciA9IG5mcF9icGZfY2hlY2tfc3RhY2tfYWNjZXNzKG5mcF9wcm9nLCBtZXRhLCByZWcsIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjctXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTAxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUwMjpuZnBfYnBmX2NoZWNrX3N0b3JlKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTAzLVxcdFxcdCAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjEtZXhpdF9jaGVja19wdHI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MjI6XFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfcHRyKG5mcF9wcm9nLCBtZXRhLCBlbnYsIG1ldGEtXFx1MDAzZWluc24uZHN0X3JlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz01MjU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTI2Om5mcF9icGZfY2hlY2tfYXRvbWljKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTI3LVxcdFxcdCAgICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTUyOlxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVxcdTAwM2VpbnNuLmRzdF9yZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTU1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjU1NjpuZnBfYnBmX2NoZWNrX2FsdShzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLCBzdHJ1Y3QgbmZwX2luc25fbWV0YSAqbWV0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTU1Ny1cXHRcXHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTYzMT1pbnQgbmZwX3ZlcmlmeV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjUyLVxcdGlmIChpc19tYnBmX2hlbHBlcl9jYWxsKG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjUzOlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKG5mcF9wcm9nLCBlbnYsIG1ldGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU0LVxcdGlmIChtZXRhLVxcdTAwM2VpbnNuLmNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTU6XFx0XFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfZXhpdChuZnBfcHJvZywgZW52KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Ny1cXHRpZiAoaXNfbWJwZl9sb2FkKG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjU4OlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU5LVxcdFxcdFxcdFxcdFxcdCBtZXRhLVxcdTAwM2VpbnNuLnNyY19yZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjYwLVxcdGlmIChpc19tYnBmX3N0b3JlKG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjYxOlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3N0b3JlKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjYzLVxcdGlmIChpc19tYnBmX2F0b21pYyhtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY2NDpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19hdG9taWMobmZwX3Byb2csIG1ldGEsIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjYtXFx0aWYgKGlzX21icGZfYWx1KG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjY3OlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX2FsdShuZnBfcHJvZywgbWV0YSwgZW52KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTMyLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzMzppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzQtXFx0XFx0XFx0XFx0ICAgICAgc2hvcnQgYWNjZXNzLCBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTgwPXN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjAtXFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfREVWSUNFKSlcXHRcXHRcXHQgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MzYxOlxcdFxcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKGF0eXBlLCBtYWpvciwgbWlub3IsIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBhY2Nlc3MsXFx0ICAgICAgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMDQ5PWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1MDppbnQgYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKGJwZnB0cl90IHVhZGRyLCBzaXplX3QgZXhwZWN0ZWRfc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTEtXFx0XFx0XFx0ICAgICBzaXplX3QgYWN0dWFsX3NpemUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMDU0PXN0cnVjdCBicGZfbG9nX2F0dHI7XFxuaW5jbHVkZS9saW51eC9icGYuaDozMDU1OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqZnAsIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTYtXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD05MDE9c3RydWN0IGJwZl9mZF9hcnJheSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTkwOS0vKiBzaW5nbGUgY29udGFpbmVyIGZvciBhbGwgc3RydWN0c1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTEwOiAqIG9uZSB2ZXJpZmllcl9lbnYgcGVyIGJwZl9jaGVjaygpIGNhbGxcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTkxMS0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleSh1NjQga2V5LCB1MzIgKm9ial9pZCwgdTMyICpidGZfaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExNzktXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTgwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExODEtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4MjppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgzLVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4NC1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODU6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTg2LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE0Mzg9aW50IGJwZl9wcnVuZV9kZWFkX2JyYW5jaGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTQzOTppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE0NDAtaW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTY0MD1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQzLS8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgdHJhbXBvbGluZS5jICovXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjQ0OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY0Ni1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NDc6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY0OC1pbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExOTY9dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTE5Nzp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKik7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMTk4LWJvb2wgYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD03MTc9c3RhdGljIGlubGluZSBib29sIGNvb2tpZV9icGZfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cXG5pbmNsdWRlL25ldC90Y3AuaDo3MjI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMy0jZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzI4LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUyMjItICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTIyMzogKiBsb25nIGJwZl9jaGVja19tdHUodm9pZCAqY3R4LCB1MzIgaWZpbmRleCwgdTMyICptdHVfbGVuLCBzMzIgbGVuX2RpZmYsIHU2NCBmbGFncylcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTIyNC0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzQ4NT1zdHJ1Y3QgYnBmX3JlZGlyX25laWdoIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk0LVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NDk1Oi8qIGJwZl9jaGVja19tdHUgZmxhZ3MqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NDk2OmVudW0gIGJwZl9jaGVja19tdHVfZmxhZ3Mge1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk3LVxcdEJQRl9NVFVfQ0hLX1NFR1MgID0gKDFVIFxcdTAwM2NcXHUwMDNjIDApLFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc0OTktXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc1MDA6ZW51bSBicGZfY2hlY2tfbXR1X3JldCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc1MDEtXFx0QlBGX01UVV9DSEtfUkVUX1NVQ0NFU1MsICAgICAgLyogY2hlY2sgYW5kIGxvb2t1cCBzdWNjZXNzZnVsICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTA0PWludCBicGZfaXRlcl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVxcdGlmICghYnBmcHRyX2lzX251bGwodWxpbmZvKSkge1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MjY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgc2l6ZW9mKGxpbmZvKSxcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5mb19sZW4pO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMjctXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcXHRcXHQvKiBDaGVja2VkIGJ5IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0ICovXFxua2VybmVsL2JwZi9idGYuYy03MDI5LVxcdFxcdHRuYW1lICs9IHNpemVvZihcXFwiYnRmX3RyYWNlX1xcXCIpIC0gMTtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDI2PXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTYxLSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NTYyOmludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy01NjMte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzY4PUVYUE9SVF9TWU1CT0woX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc2OS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3NzA6aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzcxLVxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zMT1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTcwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZnVuY3M7IGkrKykge1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NzE6XFx0XFx0cmV0ID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVyZWNvcmQsIGtyZWNfc2l6ZSwgdXJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTcyLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjUzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9saW5mbzsgaSsrKSB7XFxua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzQxPXN0YXRpYyBpbnQgY2hlY2tfY29yZV9yZWxvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cXHRcXHQvKiBmdXR1cmUgcHJvb2Zpbmcgd2hlbiBzaXplb2YoYnBmX2NvcmVfcmVsbykgY2hhbmdlcyAqL1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDA5LVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDEwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE2LSAqIEFuZGkgS2xlZW4gLSBGaXggYSBmZXcgYmFkIGJ1Z3MgYW5kIHJhY2VzLlxcbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxcbmtlcm5lbC9icGYvY29yZS5jLTE4LSAqL1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg2LVxcbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXFxua2VybmVsL2JwZi9jb3JlLmMtMjU4OC17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NDMtXFx0XFx0LypcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjQ0OlxcdFxcdCAqIElmIGVudiBpcyBub3QgTlVMTCwgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBlbmQgb2YgYnBmX2NoZWNrKCksIGF0IHRoaXNcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ1LVxcdFxcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzI2LVxcdCAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjI3Mjc6XFx0KmVyciA9IGJwZl9jaGVja190YWlsX2NhbGwoZnApO1xcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDAwPXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MTUtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQxNjp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKnApXFxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTAtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cXHRcXHRcXHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkwNj1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMTctXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTE4OlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYyMD1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTItXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc1MzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODU9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUwOTktXFx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxMDA6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwMS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3NT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg1LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTM4NjpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDQ2PXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NTQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1NTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoKnVpbmZvKSwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NTYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NjI9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzItXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ3MzpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDc0LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTA1PXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTEzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1MTQ6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MjkwPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYyOTgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjI5OTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHIsIHNpemVvZihhdHRyKSwgc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMwMC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMC1cXHRpZiAoY21kIFxcdTAwMjYgQlBGX0NPTU1PTl9BVFRSUykge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMTE6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyX2NvbW1vbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzEyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyLCBsb2dfdHJ1ZV9zaXplKSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA5Ni1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3OlxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA5OC1cXHRcXHRcXHRcXHQgICAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYzNjpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTk6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk2ND1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc1LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzY6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Ny0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg5OTU9YnRmX2F0dGFjaF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGZ1bmNfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMjktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDMwOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAzMS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NDM1PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDY1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQ2NjpcXHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDY3LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTM1OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjA9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTM0LS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTM1OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNi0gKiBvbmNlIHRoZSBwcm9ncmFtJ3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5NDM9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNTktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDYwOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA2MS1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3NC1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwNzU6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE2Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxNjg6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE2OS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxODA6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE4MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxOTQ6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmM9MjQ0PXN0YXRpYyB2b2lkIHBvcHVsYXRlX3NlY2NvbXBfZGF0YShzdHJ1Y3Qgc2VjY29tcF9kYXRhICpzZClcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmMtMjcwLSAqXFxua2VybmVsL3NlY2NvbXAuYzoyNzE6ICogVGFrZXMgYSBwcmV2aW91c2x5IGNoZWNrZWQgZmlsdGVyIChieSBicGZfY2hlY2tfY2xhc3NpYykgYW5kXFxua2VybmVsL3NlY2NvbXAuYy0yNzItICogcmVkaXJlY3RzIGFsbCBmaWx0ZXIgY29kZSB0aGF0IGxvYWRzIHN0cnVjdCBza19idWZmIGRhdGFcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz04NTQ9c3RhdGljIHZvaWQgKmJwZl9jdHhfaW5pdChjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsIHUzMiBtYXhfc2l6ZSlcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04NjktXFx0aWYgKGRhdGFfaW4pIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6ODcwOlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUihkYXRhX2luKSwgbWF4X3NpemUsIHNpemUpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy04NzEtXFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXFxubmV0L2NvcmUvZmlsdGVyLmM6MTc6ICogS3JpcyBLYXR0ZXJqb2huIC0gQWRkZWQgbWFueSBhZGRpdGlvbmFsIGNoZWNrcyBpbiBicGZfY2hlY2tfY2xhc3NpYygpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTgtICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05ODc9c3RhdGljIGJvb2wgY2hrX2NvZGVfYWxsb3dlZCh1MTYgY29kZV90b19wcm9iZSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTA1MzpzdGF0aWMgYm9vbCBicGZfY2hlY2tfYmFzaWNzX29rKGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDY0LS8qKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNjU6ICpcXHRicGZfY2hlY2tfY2xhc3NpYyAtIHZlcmlmeSBzb2NrZXQgZmlsdGVyIGNvZGVcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDY2LSAqXFx0QGZpbHRlcjogZmlsdGVyIHRvIHZlcmlmeVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA3Ny0gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMDc4OnN0YXRpYyBpbnQgYnBmX2NoZWNrX2NsYXNzaWMoY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA3OS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTMzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJlcGFyZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEzNDItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTM0MzpcXHRlcnIgPSBicGZfY2hlY2tfY2xhc3NpYyhmcC1cXHUwMDNlaW5zbnMsIGZwLVxcdTAwM2VsZW4pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEzNDQtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTM4ND1pbnQgYnBmX3Byb2dfY3JlYXRlKHN0cnVjdCBicGZfcHJvZyAqKnBmcCwgc3RydWN0IHNvY2tfZnByb2dfa2VybiAqZnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMzg5LVxcdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMzkwOlxcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cXHUwMDNlZmlsdGVyLCBmcHJvZy1cXHUwMDNlbGVuKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMzkxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTQyOT1pbnQgYnBmX3Byb2dfY3JlYXRlX2Zyb21fdXNlcihzdHJ1Y3QgYnBmX3Byb2cgKipwZnAsIHN0cnVjdCBzb2NrX2Zwcm9nICpmcHJvZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzYtXFx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjE0Mzc6XFx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVxcdTAwM2VmaWx0ZXIsIGZwcm9nLVxcdTAwM2VsZW4pKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNTA1PXN0cnVjdCBicGZfcHJvZyAqX19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nICpmcHJvZywgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNC1cXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTUxNTpcXHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXFx1MDAzZWZpbHRlciwgZnByb2ctXFx1MDAzZWxlbikpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0yNjM9c3RhdGljIGludCBjb29raWVfdGNwX3JlcXNrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMDI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMy17XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9NDA1PXN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cXHRpZiAoY29va2llX2JwZl9vayhza2IpKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjQyNjpcXHRcXHRyZXEgPSBjb29raWVfYnBmX2NoZWNrKHNrLCBza2IpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02Mzg9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTctXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1ODpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OS17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzIzPWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1MzpcXHRcXHR0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQocHNvY2stXFx1MDAzZXNrX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU0LVxcdH1cXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYz0xMzU9c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDMtXFxubmV0L2lwdjQvdWRwX2JwZi5jOjE0NDpzdGF0aWMgdm9pZCB1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXFxubmV0L2lwdjQvdWRwX2JwZi5jLTE0NS17XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTYzPWludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNzMtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxubmV0L2lwdjQvdWRwX2JwZi5jOjE3NDpcXHRcXHR1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQocHNvY2stXFx1MDAzZXNrX3Byb3RvKTtcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc1LVxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jPTE3ND1zdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xOTItXFx0aWYgKGNvb2tpZV9icGZfb2soc2tiKSkge1xcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XFx0XFx0cmVxID0gY29va2llX2JwZl9jaGVjayhzaywgc2tiKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NDAuMzk5MDQ5NTIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwOTg0MzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllcidzIEFyaXRobWV0aWMgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBjb2RlIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZXNlIGNoYW5nZXMgdG8gdGhlIGBjbnVtMzJfKmAgZnVuY3Rpb25zIGltcGFjdCB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBlbnRyeSBwb2ludCwgb2YgY291cnNlLCBpcyBgYnBmX2NoZWNrYCwgYnV0IEkgd2FudCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcuIExvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0b3VjaGVzIGBjbnVtMzJfc21pbmAsIGBjbnVtMzJfc21heGAsIGBjbnVtMzJfbm9ybWFsaXplYCwgYW5kIGBjbnVtMzJfY29udGFpbnNgLlxuXG5UaGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsLCB1c2VkIGV4dGVuc2l2ZWx5IHdpdGhpbiBgdmVyaWZpZXIuY2AgYnkgZnVuY3Rpb25zIGxpa2UgYGNudW0zMl9pbnRlcnNlY3RgLCBgY251bTMyX2ludGVyc2VjdF93aXRoYCwgYGNudW0zMl9hZGRgLCBgY251bTMyX25lZ2F0ZWAsIGBjbnVtMzJfZnJvbV91cmFuZ2VgLCBgY251bTMyX2Zyb21fc3JhbmdlYCwgYW5kIHNvIG9uLiBUaGF0IGFsb25lIGdpdmVzIG1lIGEgZ29vZCBpZGVhIG9mIHRoZWlyIGltcG9ydGFuY2UuXG5cbkRpZ2dpbmcgZGVlcGVyLCBJIGNhbiBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGluIHRoZSB2ZXJpZmllciB0aGF0IHJlbHkgb24gdGhlc2UgdXBkYXRlZCBgY251bTMyXypgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlOiBgc2NhbGFyMzJfbWluX21heF9hZGRgLCBgc2NhbGFyMzJfbWluX21heF9zdWJgLCBgc2NhbGFyMzJfbWluX21heF9tdWxgLCBgcmVnc19yZWZpbmVfY29uZF9vcGAsIGBkZWR1Y2VfYm91bmRzXzMyX2Zyb21fNjRgLCBgZGVkdWNlX2JvdW5kc182NF9mcm9tXzMyYCwgYF9fdXBkYXRlX3JlZzMyX2JvdW5kc2AsIGFuZCBgcmFuZ2VfYm91bmRzX3Zpb2xhdGlvbmAuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGhvdyB0aGVzZSBrZXkgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgIGFuZCBgc2NhbGFyMzJfbWluX21heF9hZGRgLCB1c2UgdGhlIG1vZGlmaWVkIGBjbnVtMzJfKmAgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHNjb3BlIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0Njo0Ni4wMDg4OTU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzMDI1Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ3NfcmVmaW5lX2NvbmRfb3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE1MTU5PXN0YXRpYyB2b2lkIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MjM1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTIzNjpzdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyMzctXFx0XFx0XFx0XFx0dTggb3Bjb2RlLCBib29sIGlzX2ptcDMyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyMzg9c3RhdGljIHU4IHJldl9vcGNvZGUodTggb3Bjb2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI0MS0gKiBMZWFybiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxpdmUgYnJhbmNoZXMgYnkgc2ltdWxhdGluZyByZWZpbmVtZW50IG9uIGJvdGggYnJhbmNoZXMuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjQyOiAqIHJlZ3NfcmVmaW5lX2NvbmRfb3AoKSBpcyBzb3VuZCwgc28gcHJvZHVjaW5nIGlsbC1mb3JtZWQgcmVnaXN0ZXIgYm91bmRzIGZvciB0aGUgYnJhbmNoIG1lYW5zXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MjQzLSAqIHRoYXQgYnJhbmNoIGlzIGRlYWQuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyNDU9c3RhdGljIGludCBzaW11bGF0ZV9ib3RoX2JyYW5jaGVzX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI0Ny1cXHQvKiBGYWxsdGhyb3VnaCAoRkFMU0UpIGJyYW5jaCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTI0ODpcXHRyZWdzX3JlZmluZV9jb25kX29wKFxcdTAwMjZlbnYtXFx1MDAzZWZhbHNlX3JlZzEsIFxcdTAwMjZlbnYtXFx1MDAzZWZhbHNlX3JlZzIsIHJldl9vcGNvZGUob3Bjb2RlKSwgaXNfam1wMzIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI0OS1cXHRyZWdfYm91bmRzX3N5bmMoXFx1MDAyNmVudi1cXHUwMDNlZmFsc2VfcmVnMSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNTktXFx0LyogSnVtcCAoVFJVRSkgYnJhbmNoICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjYwOlxcdHJlZ3NfcmVmaW5lX2NvbmRfb3AoXFx1MDAyNmVudi1cXHUwMDNldHJ1ZV9yZWcxLCBcXHUwMDI2ZW52LVxcdTAwM2V0cnVlX3JlZzIsIG9wY29kZSwgaXNfam1wMzIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI2MS1cXHRyZWdfYm91bmRzX3N5bmMoXFx1MDAyNmVudi1cXHUwMDNldHJ1ZV9yZWcxKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU0Nz1zdGF0aWMgdTggcmV2X29wY29kZSh1OCBvcGNvZGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU1NjktLyogUmVmaW5lIHJhbmdlIGtub3dsZWRnZSBmb3IgXFx1MDAzY3JlZzFcXHUwMDNlIFxcdTAwM2NvcFxcdTAwM2UgXFx1MDAzY3JlZ1xcdTAwM2UyIGNvbmRpdGlvbmFsIG9wZXJhdGlvbi4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU1NzA6c3RhdGljIHZvaWQgcmVnc19yZWZpbmVfY29uZF9vcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMSwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NTcxLVxcdFxcdFxcdFxcdHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NDcuOTExOTI3MjA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYzNTI5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3M6XG5cbioqUmVmaW5pbmcgT3B0aW1pemF0aW9uIFRhcmdldHMqKlxuXG5BbHJpZ2h0LCAqYHJlZ3NfcmVmaW5lX2NvbmRfb3BgKiBpcyBkZWZpbml0ZWx5IGEgc29saWQgY29udGVuZGVyIGZvciBvcHRpbWl6YXRpb24uIEkndmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhhdCBhcmVhIGZvciBhIHdoaWxlIG5vdy4gVGhlIHBvdGVudGlhbCBnYWlucyB0aGVyZSBhcmUgc2lnbmlmaWNhbnQsIGFuZCBJIGhhdmUgYSBmZXcgc3BlY2lmaWMgaWRlYXMgSSd2ZSBiZWVuIG11bGxpbmcgb3ZlciByZWdhcmRpbmcgaG93IHRvIGltcHJvdmUgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gcHJvY2VzcyBpbiB0aGF0IGNvbnRleHQuIEl0J3MgYSBrZXkgcGllY2UgZm9yIGltcHJvdmluZyBvdmVyYWxsIGNvZGUgZ2VuZXJhdGlvbiBxdWFsaXR5LCBzbyBpdCdzIHdvcnRoIHRoZSBmb2N1cy5cblxuQnV0Li4ud2hhdCBhYm91dCAqYHNjYWxhcjMyX21pbl9tYXhfYWRkYCo/IFRoYXQgZnVuY3Rpb24ncyBiZWVuIG9uIG15IHJhZGFyIHRvby4gSSB3b25kZXIgaWYgdGhlcmUncyBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBjbGV2ZXIgcGVlcGhvbGUgb3B0aW1pemF0aW9uIG9yIGEgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybnMgdGhlcmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBzaW1wbGlmeSBvciBhdm9pZCBzb21lIHVubmVjZXNzYXJ5IG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaG93IGZyZXF1ZW50bHkgdGhvc2UgdHlwZXMgb2YgY2FsY3VsYXRpb25zIHBvcCB1cCBpbiBteSB0YXJnZXQgYXBwbGljYXRpb25zLiBNaWdodCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHNlZSBob3cgaXQgYmVuY2htYXJrcy4gSXQgbWlnaHQgbm90IGJlIGFzIHN0cmF0ZWdpY2FsbHkgY3JpdGljYWwgYXMgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgLCBidXQgc21hbGwgaW1wcm92ZW1lbnRzIHRoZXJlIGNhbiBhY2N1bXVsYXRlIGludG8gc3Vic3RhbnRpYWwgZ2FpbnMgYWNyb3NzIHRoZSBib2FyZC4gVGltZSB0byBjb21wYXJlIHRoZSB0d28gYW5kIGRlY2lkZSB3aGljaCB3b3VsZCBiZSBtb3JlIHdvcnRod2hpbGUgdG8gZm9jdXMgb24gZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTY0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NTEuNDA4Mjg0MzYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NDI3OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjYWxhcjMyX21pbl9tYXhfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTU9c3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE2OnN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNy1zdGF0aWMgdm9pZCBzY2FsYXJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTA2PXN0YXRpYyB2b2lkIGFkZF9zY2FsYXJfdG9fcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzNjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYxMTY6XFx0c2NhbGFyMzJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNmZha2VfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExNy1cXHRzY2FsYXJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNmZha2VfcmVnKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzcxOD1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzOTE2OnN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxNy1cXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyY19yZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2NDQ9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjgwLVxcdGNhc2UgQlBGX0FERDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2ODE6XFx0XFx0c2NhbGFyMzJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNnNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDY4Mi1cXHRcXHRzY2FsYXJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNnNyY19yZWcpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1OTM4PXN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTgzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk4NDpcXHRcXHRcXHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVxcdFxcdFxcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjUzLjA4MzcyMjIyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE5MjgyNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgYXNzZXNzbWVudCBoZXJlIGlzIHRoYXQgYGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYW5hbHlzaXMsIGFuZCBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIGlzIGFsc28gYSBsaWtlbHkgY2FuZGlkYXRlLiBIb3dldmVyLCB0aGUgYmlnIGZpc2ggSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiBpcyBgYnBmX2NoZWNrYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBBaCwgcmlnaHQuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYWx3YXlzIGVuYWJsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5nczsgSSBkb24ndCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBUaGF0IG1lYW5zIEkgY2FuIGFzc3VtZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyB0aGVyZS4gR29vZCwgdGhhdCdzIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aG9zZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0Njo1Ni42MDMwMDkwMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODE5NTE2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NTkuMDg0OTY1MTc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDMxNTQzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkJQRiBWZXJpZmljYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBCUEYgc3lzY2FsbHMuIFRoZSBiaWcgb25lIHRvIGtlZXAgYW4gZXllIG9uLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE5vdywgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBrZXkgdG8gZW5zdXJpbmcgQlBGJ3Mgc2FmZXR5IGFuZCBpbnRlZ3JpdHkgbGllcyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IGJ5IGRpdmluZyBpbnRvIHRoZSBgYnBmX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIExldCdzIHNlZSB3aGF0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgdmVyaWZpZXIgaXMgdXAgdG8sIGFuZCB3aGF0IHByb3RlY3Rpb25zIGl0J3MgcHV0dGluZyBpbiBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NzowMy45MjgxMjMwMDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjM3MzI1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NoZWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzUzIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0xMjg9cmV1c2VzIHRoZSBleGlzdGluZyBgYGZkX2FycmF5YGA6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5J3MgbGVuZ3RoLlxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNi0gICBoYXMgcmVzb2x2ZWQgdGhlIGBgZmRfYXJyYXlgYCBlbnRyaWVzIGludG8gdGhlIHByb2dyYW0ncyBgYHVzZWRfbWFwc2BgLiBUaGVcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTIzMD1UaGlzIGhvb2sgZ2F0ZXMgYWRtaXNzaW9uICoqZm9yIGV2ZXJ5IGxvYWQqKiwgZnJvbSBhIHNpbmdsZSBjYWxsIHNpdGUgaW5zaWRlIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTIzMi1vcHRpb25hbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBzbyB0aGUgdmVyZGljdCBhbmQga2V5cmluZyBmaWVsZHMgYXJlIGZpbmFsIC0gdGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdD02NDc9Z290IGZyb20gYnBmX3Byb2dfY3JlYXRlKCksIGFuZCAnY3R4JyB0aGUgZ2l2ZW4gY29udGV4dCAoZS5nLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0OjY0ODpza2IgcG9pbnRlcikuIEFsbCBjb25zdHJhaW50cyBhbmQgcmVzdHJpY3Rpb25zIGZyb20gYnBmX2NoZWNrX2NsYXNzaWMoKSBhcHBseVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0LTY0OS1iZWZvcmUgYSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgbGF5b3V0IGlzIGJlaW5nIGRvbmUgYmVoaW5kIHRoZSBzY2VuZXMhXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz02PVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjYtXFx0YWRkXFx0eDAsIHg5LCB4MjVcXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyNzpcXHRibFxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTI4LVxcdC8qIEJQRl9SRUdfQVgoeDkpIHdpbGwgYmUgc3RvcmVkIGludG8gY291bnQsIHNvIG1vdmUgcmV0dXJuIHZhbHVlIHRvIGl0LiAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMy0gKlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MTQ6ICogQ2FsbCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIG5vcm1hbCBwb3dlcnBjNjQgQUJJOlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTUtICogXFx0LSByMyA9IHB0ciwgcmV0dXJuIGluIHIzXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIwPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zOC1cXHRhZGQgICAgIHIzLCByMzEsIHIxMlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzk6XFx0YmwgICAgICBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQwLVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTEtICpcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMjogKiBDYWxscyBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIHRoZSBzdGFuZGFyZCBSSVNDLVYgQUJJLCB3aGVyZVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqIHB0ciA9IEJQRl9SRUdfRlAgKHM1KSArIEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MTc9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zMS1cXHRhZGRcXHRhMCwgdDAsIHM1XFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MzI6XFx0Y2FsbFxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMzLVxcdG12XFx0dDAsIGEwXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIyPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zNi1cXHRsYXkgJXIyLDAoJXIxMiwlcjEzKVxcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzc6XFx0YnJhc2wgJXIxNCxicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM4LVxcdGxnciAlcjEyLCVyMlxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTExPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM5LVxcdENBTExfREVQVEhfQUNDT1VOVFxcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo0MDpcXHRjYWxsIGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYz0xODE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYzoxODI6bmZwX2JwZl9jaGVja19tdHUoc3RydWN0IG5mcF9hcHAgKmFwcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTE4My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM9NTIxPWNvbnN0IHN0cnVjdCBuZnBfYXBwX3R5cGUgYXBwX2JwZiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYy01MzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jOjUzMTpcXHQuY2hlY2tfbXR1XFx0PSBuZnBfYnBmX2NoZWNrX210dSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmMtNTMyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0xNjk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6MTcwOm5mcF9icGZfY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTE3MS1cXHRcXHRcXHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTMxMD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzozMTE6bmZwX2JwZl9jaGVja19leGl0KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zMTItXFx0XFx0ICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9MzQyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjM0MzpuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtMzQ0LVxcdFxcdFxcdCAgIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz00NTA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NDUxOm5mcF9icGZfY2hlY2tfcHRyKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDUyLVxcdFxcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggcmVnX25vKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjUtXFx0aWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fU1RBQ0spIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjQ2NjpcXHRcXHRlcnIgPSBuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhuZnBfcHJvZywgbWV0YSwgcmVnLCBlbnYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDY3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTUwMT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MDI6bmZwX2JwZl9jaGVja19zdG9yZShzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLCBzdHJ1Y3QgbmZwX2luc25fbWV0YSAqbWV0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUwMy1cXHRcXHQgICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTIxLWV4aXRfY2hlY2tfcHRyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTIyOlxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVxcdTAwM2VpbnNuLmRzdF9yZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTI1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUyNjpuZnBfYnBmX2NoZWNrX2F0b21pYyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLCBzdHJ1Y3QgbmZwX2luc25fbWV0YSAqbWV0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyNy1cXHRcXHQgICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTU1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjU1MjpcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudiwgbWV0YS1cXHUwMDNlaW5zbi5kc3RfcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTU1My19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTU1NT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1NTY6bmZwX2JwZl9jaGVja19hbHUoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTctXFx0XFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz02MzE9aW50IG5mcF92ZXJpZnlfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Mi1cXHRpZiAoaXNfbWJwZl9oZWxwZXJfY2FsbChtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1MzpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19oZWxwZXJfY2FsbChuZnBfcHJvZywgZW52LCBtZXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1NC1cXHRpZiAobWV0YS1cXHUwMDNlaW5zbi5jb2RlID09IChCUEZfSk1QIHwgQlBGX0VYSVQpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjU1OlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX2V4aXQobmZwX3Byb2csIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTctXFx0aWYgKGlzX21icGZfbG9hZChtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1ODpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1OS1cXHRcXHRcXHRcXHRcXHQgbWV0YS1cXHUwMDNlaW5zbi5zcmNfcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2MC1cXHRpZiAoaXNfbWJwZl9zdG9yZShtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY2MTpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19zdG9yZShuZnBfcHJvZywgbWV0YSwgZW52KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2My1cXHRpZiAoaXNfbWJwZl9hdG9taWMobWV0YSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NjQ6XFx0XFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfYXRvbWljKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY2LVxcdGlmIChpc19tYnBmX2FsdShtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY2NzpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19hbHUobmZwX3Byb2csIG1ldGEsIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMjk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMi1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMzM6aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTM0LVxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTE4MD1zdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMzYwLVxcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX0RFVklDRSkpXFx0XFx0XFx0ICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjM2MTpcXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihhdHlwZSwgbWFqb3IsIG1pbm9yLCBcXFxcXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMzYyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYWNjZXNzLFxcdCAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzA0OT1pbnQgYnBmX2dldF9maWxlX2ZsYWcoaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwNTA6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkciwgc2l6ZV90IGV4cGVjdGVkX3NpemUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUxLVxcdFxcdFxcdCAgICAgc2l6ZV90IGFjdHVhbF9zaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzA1ND1zdHJ1Y3QgYnBmX2xvZ19hdHRyO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1NTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKmZwLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDU2LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTAxPXN0cnVjdCBicGZfZmRfYXJyYXkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MDktLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHNcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjkxMDogKiBvbmUgdmVyaWZpZXJfZW52IHBlciBicGZfY2hlY2soKSBjYWxsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MTEtICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTExNzI9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3VucGFja19rZXkodTY0IGtleSwgdTMyICpvYmpfaWQsIHUzMiAqYnRmX2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTc5LVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4MDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgxLVxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODI6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4My1cXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExODQtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTg1OmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNDM4PWludCBicGZfcHJ1bmVfZGVhZF9icmFuY2hlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE0Mzk6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNDQwLWludCBicGZfY29tcHV0ZV9wb3N0b3JkZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NDA9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY0My0vKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IHRyYW1wb2xpbmUuYyAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY0NDppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQ1LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDYtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjQ3Oi8qIEZ1bmN0aW9ucyBpbiBmaXh1cHMuYywgY2FsbGVkIGZyb20gYnBmX2NoZWNrKCkgKi9cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDgtaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTk2PXU2NCBhcmNoX2JwZl90aW1lZF9tYXlfZ290byh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExOTc6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICopO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5OC1ib29sIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9NzE3PXN0YXRpYyBpbmxpbmUgYm9vbCBjb29raWVfYnBmX29rKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC03MjEtXFxuaW5jbHVkZS9uZXQvdGNwLmg6NzIyOnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcXG5pbmNsdWRlL25ldC90Y3AuaD03MjQ9c3RhdGljIGlubGluZSBib29sIGNvb2tpZV9icGZfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cXG5pbmNsdWRlL25ldC90Y3AuaDo3Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTczMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjIyLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUyMjM6ICogbG9uZyBicGZfY2hlY2tfbXR1KHZvaWQgKmN0eCwgdTMyIGlmaW5kZXgsIHUzMiAqbXR1X2xlbiwgczMyIGxlbl9kaWZmLCB1NjQgZmxhZ3MpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUyMjQtICpcXHREZXNjcmlwdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTc0ODU9c3RydWN0IGJwZl9yZWRpcl9uZWlnaCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzQ5NC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NTovKiBicGZfY2hlY2tfbXR1IGZsYWdzKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NjplbnVtICBicGZfY2hlY2tfbXR1X2ZsYWdzIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzQ5Ny1cXHRCUEZfTVRVX0NIS19TRUdTICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAwKSxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk5LVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTAwOmVudW0gYnBmX2NoZWNrX210dV9yZXQge1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTAxLVxcdEJQRl9NVFVfQ0hLX1JFVF9TVUNDRVNTLCAgICAgIC8qIGNoZWNrIGFuZCBsb29rdXAgc3VjY2Vzc2Z1bCAqL1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTUwND1pbnQgYnBmX2l0ZXJfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNS1cXHRpZiAoIWJwZnB0cl9pc19udWxsKHVsaW5mbykpIHtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIHNpemVvZihsaW5mbyksXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgbGluZm9fbGVuKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Njg1MD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDI3LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMjg6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAyOS1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU2MS0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNTYzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OD1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NjktXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzcwOmludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3MS1cXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy03MC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZ1bmNzOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlxcdFxcdHJldCA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1cmVjb3JkLCBrcmVjX3NpemUsIHVyZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTIxMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbGluZm87IGkrKykge1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MjU0OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1NS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzYtXFx0XFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM3NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3OC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzOS1cXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcXG5rZXJuZWwvYnBmL2NvcmUuYy0xOC0gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI1NzQ9Ym9vbCBicGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTg3OnN0YXRpYyBpbnQgYnBmX2NoZWNrX3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmtlcm5lbC9icGYvY29yZS5jLTI1ODgte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVxcdFxcdC8qXFxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcXHRcXHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXFxua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cXHRcXHQgKiBwb2ludCwgb25seSBpbnNuX2F1eF9kYXRhIGlzIHVzZWQgYWZ0ZXIgZmFpbHVyZSwgc28gaXQgc2hvdWxkIGJlIHJlc3RvcmVkXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjgwPXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cXHQgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNzI3OlxcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzI4LVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDE1LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MTcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkwLSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTItXFx0XFx0XFx0ICAgICBzaXplX3QgZXhwZWN0ZWRfc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE3LVxcdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzExODpcXHRlcnIgPSBicGZfY2hlY2soXFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzExOS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MjA9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzUyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3NTM6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU0LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Z3RfaW5mbyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MDg1PXN0YXRpYyBpbnQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MDk5LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfcHJvZ19pbmZvLCBhdHRhY2hfYnRmX2lkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTAwOlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMDEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUzNzU9c3RhdGljIGludCBicGZfbWFwX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4NS1cXHRsZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX21hcF9pbmZvLCBoYXNoX3NpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUzODY6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTQ0Nj1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NTU6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYyPXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDcyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NzM6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKGluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3NC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTUwNT1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTE0OlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjI5MD1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjk4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYyOTk6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyLCBzaXplb2YoYXR0ciksIHNpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTAtXFx0aWYgKGNtZCBcXHUwMDI2IEJQRl9DT01NT05fQVRUUlMpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzExOlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0cl9jb21tb24sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jb21tb25fYXR0ciwgbG9nX3RydWVfc2l6ZSksXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDg2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA5NzpcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXFx0XFx0XFx0XFx0ICAgICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoYnRmLCBwcm9nLCBpZHNbaV0sIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU3PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NjQ9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3NS0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzctICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4OTk1PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMzEtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQzNT1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQ2NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NjY6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQ2Ny1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTM0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTM2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTIwPXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNC0vKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTkzNTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzYtICogb25jZSB0aGUgcHJvZ3JhbSdzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNjEtXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzQtXFx0LyogJ3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQncyBub3Qgc21hbGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDc1OlxcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzYtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTY4OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mb19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNjktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNzktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTgwOlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxODEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTk0OlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jPTI0ND1zdGF0aWMgdm9pZCBwb3B1bGF0ZV9zZWNjb21wX2RhdGEoc3RydWN0IHNlY2NvbXBfZGF0YSAqc2QpXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jLTI3MC0gKlxcbmtlcm5lbC9zZWNjb21wLmM6MjcxOiAqIFRha2VzIGEgcHJldmlvdXNseSBjaGVja2VkIGZpbHRlciAoYnkgYnBmX2NoZWNrX2NsYXNzaWMpIGFuZFxcbmtlcm5lbC9zZWNjb21wLmMtMjcyLSAqIHJlZGlyZWN0cyBhbGwgZmlsdGVyIGNvZGUgdGhhdCBsb2FkcyBzdHJ1Y3Qgc2tfYnVmZiBkYXRhXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9ODU0PXN0YXRpYyB2b2lkICpicGZfY3R4X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgbWF4X3NpemUpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODY5LVxcdGlmIChkYXRhX2luKSB7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjg3MDpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIoZGF0YV9pbiksIG1heF9zaXplLCBzaXplKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODcxLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE2LSAqIEFuZGkgS2xlZW4gLSBGaXggYSBmZXcgYmFkIGJ1Z3MgYW5kIHJhY2VzLlxcbm5ldC9jb3JlL2ZpbHRlci5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE4LSAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTg3PXN0YXRpYyBib29sIGNoa19jb2RlX2FsbG93ZWQodTE2IGNvZGVfdG9fcHJvYmUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNTM6c3RhdGljIGJvb2wgYnBmX2NoZWNrX2Jhc2ljc19vayhjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlcixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU0LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA2NC0vKipcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDY1OiAqXFx0YnBmX2NoZWNrX2NsYXNzaWMgLSB2ZXJpZnkgc29ja2V0IGZpbHRlciBjb2RlXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA2Ni0gKlxcdEBmaWx0ZXI6IGZpbHRlciB0byB2ZXJpZnlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzctICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTA3ODpzdGF0aWMgaW50IGJwZl9jaGVja19jbGFzc2ljKGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzktXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgZmxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEzMzU9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3ByZXBhcmVfZmlsdGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEzNDM6XFx0ZXJyID0gYnBmX2NoZWNrX2NsYXNzaWMoZnAtXFx1MDAzZWluc25zLCBmcC1cXHUwMDNlbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQ0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEzODQ9aW50IGJwZl9wcm9nX2NyZWF0ZShzdHJ1Y3QgYnBmX3Byb2cgKipwZnAsIHN0cnVjdCBzb2NrX2Zwcm9nX2tlcm4gKmZwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTM4OS1cXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTM5MDpcXHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXFx1MDAzZWZpbHRlciwgZnByb2ctXFx1MDAzZWxlbikpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTM5MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTE0Mjk9aW50IGJwZl9wcm9nX2NyZWF0ZV9mcm9tX3VzZXIoc3RydWN0IGJwZl9wcm9nICoqcGZwLCBzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2csXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNDM2LVxcdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxNDM3OlxcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cXHUwMDNlZmlsdGVyLCBmcHJvZy1cXHUwMDNlbGVuKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xNDM4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTUwNT1zdHJ1Y3QgYnBmX3Byb2cgKl9fZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2csIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MTQtXFx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjE1MTU6XFx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVxcdTAwM2VmaWx0ZXIsIGZwcm9nLVxcdTAwM2VsZW4pKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MTYtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjYzPXN0YXRpYyBpbnQgY29va2llX3RjcF9yZXFza19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRilcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzAyOnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDMte1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjUtXFx0aWYgKGNvb2tpZV9icGZfb2soc2tiKSkge1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzo0MjY6XFx0XFx0cmVxID0gY29va2llX2JwZl9jaGVjayhzaywgc2tiKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI3LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTg6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyMz1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTM6XFx0XFx0dGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1NC1cXHR9XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTM1PXN0YXRpYyB2b2lkIHVkcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICpwcm90LCBjb25zdCBzdHJ1Y3QgcHJvdG8gKmJhc2UpXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNDQ6c3RhdGljIHZvaWQgdWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDUte1xcbi0tXFxubmV0L2lwdjQvdWRwX2JwZi5jPTE2Mz1pbnQgdWRwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XFx0XFx0dWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE3NS1cXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTkyLVxcdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTkzOlxcdFxcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ3OjA2LjM1MTg2MzYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzODU4NDY1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZ2V0dGluZyBzdGFydGVkIHdpdGggdGhpcyBCUEYgdmVyaWZpY2F0aW9uIGFuYWx5c2lzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnBmX2NoZWNrYC4gSXQncyB0aGUgbmF0dXJhbCBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AsIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AsIGFuZCBgcmVnc19yZWZpbmVfY29uZF9vcGAuIFRoZXkgYXJlIGFsbCBsaWtlbHkgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgYGJwZl9jaGVja2AgaXMgaW50ZXJuYWwgb3IgZXhwb3NlZC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHllcCwgaXQncyBhIHJlZ3VsYXIgZnVuY3Rpb24gZGVjbGFyYXRpb246XG5cbmBgYGNcbmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbmBgYFxuXG5BbmQgaXQncyBub3QgYHN0YXRpY2AsIHNvIGl0J3MgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodHMuIEkndmUgc2VlbiBpdCB1c2VkIGluIGBzeXNjYWxsLmNgLCBzbyBJIGtub3cgdGhhdCdzIGFjY3VyYXRlLlxuXG5TbywgaGVyZSdzIG15IHVwZGF0ZWQgZm9jdXM6XG5cbiogICBgYnBmX2NoZWNrYFxuKiAgIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2BcbiogICBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgXG4qICAgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsIGhlcmUuIFRoYXQncyBhIGdpdmVuLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyBhcyB3ZWxsLCBvZiBjb3Vyc2UuXG5cblRoZSByZWxldmFudCBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGtlcm5lbC9icGYvY251bV9kZWZzLmhgLiBUaGlzIGlzIGluY2x1ZGVkIGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBNYWtlZmlsZSB0byBiZSBzdXJlLiBJIHdpbGwgYW5hbHl6ZSB0aGUgTWFrZWZpbGUgZm9yIGBrZXJuZWwvYnBmL2NudW0uY2AgdG8gaWRlbnRpZnkgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTcxMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NzoxNS43Mzc3MTQxOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTA4MTk2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY251bS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDc6MTguMzg4NTQ0NjM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODg5MDc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBjbnVtLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLiBCdXQgdGhlIG1lYXQgb2YgdGhlIG1hdHRlciBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGNpcmN1bGFyIG51bWJlcnMgKGBjbnVtYCkgZm9yIHJlZ2lzdGVyIGJvdW5kcy4gVGhpcyBpcyBhICpjb3JlKiBwYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHJpZ2h0PyBTaW1wbGlmaWNhdGlvbiBvZiBgc21pbmAsIGBzbWF4YCwgYG5vcm1hbGl6ZWAsIGFuZCBgY29udGFpbnNgIOKAkyB0aG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgZm9yIG1hbmFnaW5nIGFuZCBjb21wYXJpbmcgdGhlc2UgYm91bmRzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBub3QganVzdCBhIHJlZmFjdG9yaW5nOyBpdCdzIGFsdGVyaW5nIGhvdyB0aGUgdmVyaWZpZXIgKnRoaW5rcyogYWJvdXQgcmVnaXN0ZXIgYm91bmRzLiBUaGlzIG1lYW5zIGl0IGNvdWxkIHN1YnRseSBhbHRlciB3aGljaCBCUEYgcHJvZ3JhbXMgcGFzcyB2ZXJpZmljYXRpb24gb3IsIGNvbnZlcnNlbHksIHdoaWNoIG9uZXMgYXJlIHJlamVjdGVkLiBJdCBjb3VsZCBhbHNvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIG9yIGFjY3VyYWN5IG9mIHRoZSB0cmFja2VkIGJvdW5kcywgd2hpY2ggaGFzIHNlcmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBkZWVwIGRpdmUgd2l0aCBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZSB2ZXJpZmllciwgcGFydGljdWxhcmx5IGFyb3VuZCBib3VuZCB0cmFja2luZywgaXMgd29ydGggZXhwbG9yaW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Gcm9tIGEgZm9jdXMgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfY2hlY2tgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQsIG5hdHVyYWxseTsgYGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzYCBhbmQgYGFkanVzdF9wdHJfbWluX21heF92YWxzYCAtIHRoZXkncmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5IGFyZSB0aGUgb25lcyBhY3R1YWxseSBjaGFuZ2luZyB0aGUgYm91bmRzIGFuZCB0aGUgYWRqdXN0bWVudCB0byB0aGVtOyBhbmQgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgIC0gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNvbmRpdGlvbmFsIG9wZXJhdGlvbnMgYW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBicmFuY2hpbmcsIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgYGNudW1gIGJvdW5kcyBjb21lIGludG8gcGxheS5cblxuTXkgcmVhc29uaW5nPyBUaGUgcGF0Y2ggbWVzc2VzIHdpdGggdGhlIGZ1bmRhbWVudGFsIGxvZ2ljIG9mIEJQRiB2ZXJpZmllcidzIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzLiBJdCdzIGEgc2ltcGxpZmljYXRpb24gaW4gdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiwgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGFmZmVjdHMgaG93IHRoZSB2ZXJpZmllciBkb2VzIGl0cyBqb2IsIHdoaWNoIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgYm91bmRhcnkuIEZ1enppbmcgaGFzIHRvIGNvbmNlbnRyYXRlIG9uIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludHMsIGFuZCB0aGVzZSBmdW5jdGlvbnM6IGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AsIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AsIGFuZCBgcmVnc19yZWZpbmVfY29uZF9vcGAuXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYHNldC1yZXN1bHRzYCBydW5uaW5nIGFuZCBzdGFydCBnZW5lcmF0aW5nIHNvbWUgZnV6eiB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYyOSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDc6MjUuOTc3NDU1MjA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTE4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNcIixcbiAgICBcImFkanVzdF9wdHJfbWluX21heF92YWxzXCIsXG4gICAgXCJyZWdzX3JlZmluZV9jb25kX29wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIEJQRiB2ZXJpZmllciBmb3IgdHJhY2tpbmcgcmVnaXN0ZXIgYm91bmRzIHVzaW5nIGNpcmN1bGFyIG51bWJlcnMgKGNudW0pLiBJdCBzaW1wbGlmaWVzIHRoZSBzbWluLCBzbWF4LCBub3JtYWxpemUsIGFuZCBjb250YWlucyBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyBhbmQgdmFsaWRhdGVzIHJlZ2lzdGVyIHZhbHVlcyBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHZlcmlmaWVyIGVudHJ5IHBvaW50cyBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gYm91bmRzIGFkanVzdG1lbnRzIGFuZCBjb25kaXRpb25hbCBicmFuY2ggcmVmaW5lbWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImFkanVzdF9zY2FsYXJfbWluX21heF92YWxzXCIsXG4gICAgXCJhZGp1c3RfcHRyX21pbl9tYXhfdmFsc1wiLFxuICAgIFwicmVnc19yZWZpbmVfY29uZF9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 23:18:42 +0000 UTC FinishedAt: 2026-07-31 23:47:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "8b8a18d8-e83f-4d82-b847-00753dc436b3" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "adjust_scalar_min_max_vals", "adjust_ptr_min_max_vals", "regs_refine_cond_op" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2FkanVzdF9zY2FsYXJfbWluX21heF92YWxzJiMzNDssCiAgICAmIzM0O2FkanVzdF9wdHJfbWluX21heF92YWxzJiMzNDssCiAgICAmIzM0O3JlZ3NfcmVmaW5lX2NvbmRfb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIEJQRiB2ZXJpZmllciBmb3IgdHJhY2tpbmcgcmVnaXN0ZXIgYm91bmRzIHVzaW5nIGNpcmN1bGFyIG51bWJlcnMgKGNudW0pLiBJdCBzaW1wbGlmaWVzIHRoZSBzbWluLCBzbWF4LCBub3JtYWxpemUsIGFuZCBjb250YWlucyBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyBhbmQgdmFsaWRhdGVzIHJlZ2lzdGVyIHZhbHVlcyBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHZlcmlmaWVyIGVudHJ5IHBvaW50cyBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gYm91bmRzIGFkanVzdG1lbnRzIGFuZCBjb25kaXRpb25hbCBicmFuY2ggcmVmaW5lbWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzY2QwOGRlN2E4NWZjNDYyY2UxNDFlNTc1NTFiOTllYmE4ZWRiOTIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjM6NDY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jbnVtX2RlZnMuaCBiL2tlcm5lbC9icGYvY251bV9kZWZzLmhcbmluZGV4IGE5MGUzMTdlMzU3ODAuLjMwNjg1ZTQzZGUwNDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NudW1fZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NudW1fZGVmcy5oXG5AQCAtMzMsNyAmIzQzOzMzLDEyIEBAIHN0cnVjdCBjbnVtX3QgRk4oZnJvbV9zcmFuZ2UpKHN0IG1pbiwgc3QgbWF4KVxuIFx0cmV0dXJuIChzdHJ1Y3QgY251bV90KXsgLmJhc2UgPSBiYXNlLCAuc2l6ZSA9IHNpemUgfTtcbiB9XG4gXG4tLyogVHJ1ZSBpZiB0aGlzIGNudW0gcmVwcmVzZW50cyB0d28gdW5zaWduZWQgcmFuZ2VzLiAqL1xuJiM0MzsvKlxuJiM0MzsgKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byB1bnNpZ25lZCByYW5nZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXG4mIzQzOyAqIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBGTih1cmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB7XG4gXHQvKiBTYW1lIGFzIGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUgXHUwMDNlIFVUX01BWCBidXQgYXZvaWRzIG92ZXJmbG93ICovXG5AQCAtNDQsNiAmIzQzOzQ5LDkgQEAgc3RhdGljIGlubGluZSBib29sIEZOKHVyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKVxuICAqIGNudW17VH1fdW1pbiAvIGNudW17VH1fdW1heCBxdWVyeSBhbiB1bnNpZ25lZCByYW5nZSByZXByZXNlbnRlZCBieSB0aGlzIGNudW0uXG4gICogSWYgY251bSByZXByZXNlbnRzIGEgcmFuZ2UgY3Jvc3NpbmcgdGhlIFVUX01BWC8wIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxuICAqIFswLi5VVF9NQVhdIGlzIHJldHVybmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xuJiM0MzsgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXguXG4gICovXG4gdXQgRk4odW1pbikoc3RydWN0IGNudW1fdCBjbnVtKVxuIHtcbkBAIC01Nyw3ICYjNDM7NjUsMTIgQEAgdXQgRk4odW1heCkoc3RydWN0IGNudW1fdCBjbnVtKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChGTih1bWF4KSk7XG4gXG4tLyogVHJ1ZSBpZiB0aGlzIGNudW0gcmVwcmVzZW50cyB0d28gc2lnbmVkIHJhbmdlcy4gKi9cbiYjNDM7LypcbiYjNDM7ICogVHJ1ZSBpZiB0aGlzIGNudW0gcmVwcmVzZW50cyB0d28gc2lnbmVkIHJhbmdlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmdcbiYjNDM7ICogdGhpcyBmdW5jdGlvbi5cbiYjNDM7ICovXG4gc3RhdGljIGlubGluZSBib29sIEZOKHNyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKVxuIHtcbiBcdHJldHVybiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01BWCkgXHUwMDI2XHUwMDI2IEZOKGNvbnRhaW5zKShjbnVtLCAodXQpU1RfTUlOKTtcbkBAIC02NywxOSAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiAgKiBjbnVte1R9X3NtaW4gLyBjbnVte1R9X3NtYXggcXVlcnkgYSBzaWduZWQgcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbnVtLlxuICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBTVF9NQVgvU1RfTUlOIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxuICAqIFtTVF9NSU4uLlNUX01BWF0gaXMgcmV0dXJuZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXG4mIzQzOyAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heC5cbiAgKi9cbiBzdCBGTihzbWluKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0cmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSlcbi1cdCAgICAgICA/IFNUX01JTlxuLVx0ICAgICAgIDogbWluKChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZSkpO1xuJiM0MztcdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pID8gU1RfTUlOIDogKHN0KWNudW0uYmFzZTtcbiB9XG4gXG4gc3QgRk4oc21heCkoc3RydWN0IGNudW1fdCBjbnVtKVxuIHtcbi1cdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pXG4tXHQgICAgICAgPyBTVF9NQVhcbi1cdCAgICAgICA6IG1heCgoc3QpY251bS5iYXNlLCAoc3QpKGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUpKTtcbiYjNDM7XHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01BWCA6IChzdCkoY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZSk7XG4gfVxuIFxuIC8qXG5AQCAtMTgxLDcgJiM0MzsxOTMsNyBAQCB2b2lkIEZOKGludGVyc2VjdF93aXRoX3NyYW5nZSkoc3RydWN0IGNudW1fdCAqZHN0LCBzdCBtaW4sIHN0IG1heClcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbnVtX3QgRk4obm9ybWFsaXplKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0aWYgKGNudW0uc2l6ZSA9PSBVVF9NQVggXHUwMDI2XHUwMDI2IGNudW0uYmFzZSAhPSAwIFx1MDAyNlx1MDAyNiBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWClcbiYjNDM7XHRpZiAoY251bS5zaXplID09IFVUX01BWClcbiBcdFx0Y251bS5iYXNlID0gMDtcbiBcdHJldHVybiBjbnVtO1xuIH1cbkBAIC0yMTAsMTIgJiM0MzsyMjIsNyBAQCBib29sIEZOKGlzX2VtcHR5KShzdHJ1Y3QgY251bV90IGNudW0pXG4gXG4gYm9vbCBGTihjb250YWlucykoc3RydWN0IGNudW1fdCBjbnVtLCB1dCB2KVxuIHtcbi1cdGlmIChGTihpc19lbXB0eSkoY251bSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChGTih1cmFuZ2Vfb3ZlcmZsb3cpKGNudW0pKVxuLVx0XHRyZXR1cm4gdiBcdTAwM2U9IGNudW0uYmFzZSB8fCB2IFx1MDAzYz0gKHV0KWNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemU7XG4tXHRlbHNlXG4tXHRcdHJldHVybiB2IFx1MDAzZT0gY251bS5iYXNlIFx1MDAyNlx1MDAyNiB2IFx1MDAzYz0gKHV0KWNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemU7XG4mIzQzO1x0cmV0dXJuICFGTihpc19lbXB0eSkoY251bSkgXHUwMDI2XHUwMDI2IHYgLSBjbnVtLmJhc2UgXHUwMDNjPSBjbnVtLnNpemU7XG4gfVxuIFxuIGJvb2wgRk4oaXNfY29uc3QpKHN0cnVjdCBjbnVtX3QgY251bSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7YWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMmIzM0OywKICAgICYjMzQ7cmVnc19yZWZpbmVfY29uZF9vcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgQlBGIHZlcmlmaWVyIGZvciB0cmFja2luZyByZWdpc3RlciBib3VuZHMgdXNpbmcgY2lyY3VsYXIgbnVtYmVycyAoY251bSkuIEl0IHNpbXBsaWZpZXMgdGhlIHNtaW4sIHNtYXgsIG5vcm1hbGl6ZSwgYW5kIGNvbnRhaW5zIG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIGFuZCB2YWxpZGF0ZXMgcmVnaXN0ZXIgdmFsdWVzIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24sIHdoaWNoIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgYm91bmRhcnkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgdmVyaWZpZXIgZW50cnkgcG9pbnRzIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBib3VuZHMgYWRqdXN0bWVudHMgYW5kIGNvbmRpdGlvbmFsIGJyYW5jaCByZWZpbmVtZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjZDA4ZGU3YTg1ZmM0NjJjZTE0MWU1NzU1MWI5OWViYThlZGI5MjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo0NjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY251bV9kZWZzLmggYi9rZXJuZWwvYnBmL2NudW1fZGVmcy5oCmluZGV4IGE5MGUzMTdlMzU3ODAuLjMwNjg1ZTQzZGUwNDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY251bV9kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jbnVtX2RlZnMuaApAQCAtMzMsNyAmIzQzOzMzLDEyIEBAIHN0cnVjdCBjbnVtX3QgRk4oZnJvbV9zcmFuZ2UpKHN0IG1pbiwgc3QgbWF4KQogCXJldHVybiAoc3RydWN0IGNudW1fdCl7IC5iYXNlID0gYmFzZSwgLnNpemUgPSBzaXplIH07CiB9CiAKLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy4gKi8KJiM0MzsvKgomIzQzOyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy4KJiM0MzsgKgomIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nCiYjNDM7ICogdGhpcyBmdW5jdGlvbi4KJiM0MzsgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBGTih1cmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSkKIHsKIAkvKiBTYW1lIGFzIGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUgJmd0OyBVVF9NQVggYnV0IGF2b2lkcyBvdmVyZmxvdyAqLwpAQCAtNDQsNiAmIzQzOzQ5LDkgQEAgc3RhdGljIGlubGluZSBib29sIEZOKHVyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKQogICogY251bXtUfV91bWluIC8gY251bXtUfV91bWF4IHF1ZXJ5IGFuIHVuc2lnbmVkIHJhbmdlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY251bS4KICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBVVF9NQVgvMCBib3VuZGFyeSwgdGhlIHVuYm91bmQgcmFuZ2UKICAqIFswLi5VVF9NQVhdIGlzIHJldHVybmVkLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmcKJiM0MzsgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXguCiAgKi8KIHV0IEZOKHVtaW4pKHN0cnVjdCBjbnVtX3QgY251bSkKIHsKQEAgLTU3LDcgJiM0Mzs2NSwxMiBAQCB1dCBGTih1bWF4KShzdHJ1Y3QgY251bV90IGNudW0pCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChGTih1bWF4KSk7CiAKLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuICovCiYjNDM7LyoKJiM0MzsgKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byBzaWduZWQgcmFuZ2VzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmcKJiM0MzsgKiB0aGlzIGZ1bmN0aW9uLgomIzQzOyAqLwogc3RhdGljIGlubGluZSBib29sIEZOKHNyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKQogewogCXJldHVybiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01BWCkgJmFtcDsmYW1wOyBGTihjb250YWlucykoY251bSwgKHV0KVNUX01JTik7CkBAIC02NywxOSAmIzQzOzgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSkKICAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heCBxdWVyeSBhIHNpZ25lZCByYW5nZSByZXByZXNlbnRlZCBieSB0aGlzIGNudW0uCiAgKiBJZiBjbnVtIHJlcHJlc2VudHMgYSByYW5nZSBjcm9zc2luZyB0aGUgU1RfTUFYL1NUX01JTiBib3VuZGFyeSwgdGhlIHVuYm91bmQgcmFuZ2UKICAqIFtTVF9NSU4uLlNUX01BWF0gaXMgcmV0dXJuZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZwomIzQzOyAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heC4KICAqLwogc3QgRk4oc21pbikoc3RydWN0IGNudW1fdCBjbnVtKQogewotCXJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pCi0JICAgICAgID8gU1RfTUlOCi0JICAgICAgIDogbWluKChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZSkpOwomIzQzOwlyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01JTiA6IChzdCljbnVtLmJhc2U7CiB9CiAKIHN0IEZOKHNtYXgpKHN0cnVjdCBjbnVtX3QgY251bSkKIHsKLQlyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKQotCSAgICAgICA/IFNUX01BWAotCSAgICAgICA6IG1heCgoc3QpY251bS5iYXNlLCAoc3QpKGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUpKTsKJiM0MzsJcmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSkgPyBTVF9NQVggOiAoc3QpKGNudW0uYmFzZSAmIzQzOyBjbnVtLnNpemUpOwogfQogCiAvKgpAQCAtMTgxLDcgJiM0MzsxOTMsNyBAQCB2b2lkIEZOKGludGVyc2VjdF93aXRoX3NyYW5nZSkoc3RydWN0IGNudW1fdCAqZHN0LCBzdCBtaW4sIHN0IG1heCkKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY251bV90IEZOKG5vcm1hbGl6ZSkoc3RydWN0IGNudW1fdCBjbnVtKQogewotCWlmIChjbnVtLnNpemUgPT0gVVRfTUFYICZhbXA7JmFtcDsgY251bS5iYXNlICE9IDAgJmFtcDsmYW1wOyBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWCkKJiM0MzsJaWYgKGNudW0uc2l6ZSA9PSBVVF9NQVgpCiAJCWNudW0uYmFzZSA9IDA7CiAJcmV0dXJuIGNudW07CiB9CkBAIC0yMTAsMTIgJiM0MzsyMjIsNyBAQCBib29sIEZOKGlzX2VtcHR5KShzdHJ1Y3QgY251bV90IGNudW0pCiAKIGJvb2wgRk4oY29udGFpbnMpKHN0cnVjdCBjbnVtX3QgY251bSwgdXQgdikKIHsKLQlpZiAoRk4oaXNfZW1wdHkpKGNudW0pKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKEZOKHVyYW5nZV9vdmVyZmxvdykoY251bSkpCi0JCXJldHVybiB2ICZndDs9IGNudW0uYmFzZSB8fCB2ICZsdDs9ICh1dCljbnVtLmJhc2UgJiM0MzsgY251bS5zaXplOwotCWVsc2UKLQkJcmV0dXJuIHYgJmd0Oz0gY251bS5iYXNlICZhbXA7JmFtcDsgdiAmbHQ7PSAodXQpY251bS5iYXNlICYjNDM7IGNudW0uc2l6ZTsKJiM0MzsJcmV0dXJuICFGTihpc19lbXB0eSkoY251bSkgJmFtcDsmYW1wOyB2IC0gY251bS5iYXNlICZsdDs9IGNudW0uc2l6ZTsKIH0KIAogYm9vbCBGTihpc19jb25zdCkoc3RydWN0IGNudW1fdCBjbnVtKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgUGF0Y2g6IGNudW1fZGVmcy5oIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBga2VybmVsL2JwZi9jbnVtX2RlZnMuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIEJQRiB2ZXJpZmllciwgbGlrZWx5IGRlYWxpbmcgd2l0aCBjaXJjdWxhciBudW1iZXIgcmVwcmVzZW50YXRpb25zIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdWRnaW5nIGJ5IHRoZSBmdW5jdGlvbiBuYW1lcy4gV2UmIzM5O3ZlIGdvdCBjaGFuZ2VzIHRvIGZvdXIgZnVuY3Rpb25zOiBgRk4oc21pbilgLCBgRk4oc21heClgLCBgRk4obm9ybWFsaXplKWAsIGFuZCBgRk4oY29udGFpbnMpYC4gTGV0JiMzOTtzIGJyZWFrIHRoZXNlIGRvd24gcXVpY2tseS4KCkZpcnN0LCBgRk4oc21pbilgIGFuZCBgRk4oc21heClgIGFyZSBzaW1wbGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBwb3RlbnRpYWxseSBoYWQgcmVkdW5kYW50IGBtaW5gIGFuZCBgbWF4YCBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGlzIGNvbXBsZXhpdHkuIFNwZWNpZmljYWxseSwgaW4gdGhlIGBzbWluYCBmdW5jdGlvbiBpdCB3YXMgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gYnkgdXNpbmcgdGhlIGBtaW5gIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggbm93IHNpbXBseSByZXR1cm5zIHRoZSBgY251bS5iYXNlYCB2YWx1ZSBpZiB0aGVyZSBpcyBubyBvdmVyZmxvdy4gU2ltaWxhcmx5LCBgRk4oc21heClgIHdhcyB1c2luZyBgbWF4YCBidXQgbm93IHNpbXBseSByZXR1cm5zIGBjbnVtLmJhc2UgJiM0MzsgY251bS5zaXplYC4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgb2JzZXJ2YXRpb24uIEl0IHByb2JhYmx5IGltcGxpZXMgdGhhdCB0aGUgb3ZlcmZsb3cgY2FzZSB3aWxsIGFsd2F5cyByZXN1bHQgaW4gYSBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgYmFzZSBwbHVzIHNpemUgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgbWF4IGluIHRoZSBub24tb3ZlcmZsb3cgY2FzZS4KClRoZW4sIGBGTihub3JtYWxpemUpYCBpcyBjbGVhbmVkIHVwLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYW4gZXh0cmEgY29uZGl0aW9uYWwgY2hlY2suIEl0IHNlZW1zIHRoZSB1cGRhdGVkIGxvZ2ljIHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgY251bS5iYXNlICE9IDAgJmFtcDsmYW1wOyBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWGAsIHNpbXBsaWZ5aW5nIHRoZSBvdmVyZmxvdyBoYW5kbGluZy4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSwgYnV0IGl0JiMzOTtzIGNsZWFybHkgYSByZWR1Y3Rpb24gaW4gY29kZSBjb21wbGV4aXR5LgoKRmluYWxseSwgYEZOKGNvbnRhaW5zKWAgaGFzIGJlZW4gc2lnbmlmaWNhbnRseSByZXdvcmtlZC4gVGhlIG9yaWdpbmFsIHZlcnNpb24gaGFkIHR3byBkaWZmZXJlbnQgcGF0aHMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlIHdhcyBhbiBvdmVyZmxvdyBpbiB0aGUgcmFuZ2UgY2FsY3VsYXRpb24uIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBjb25kaXRpb25hbCBhbmQgaW5zdGVhZCBjaGVja3MgYHYgLSBjbnVtLmJhc2UgJmx0Oz0gY251bS5zaXplYC4gU2VlbXMgbGlrZSB0aGlzIGlzIG9wdGltaXppbmcgZm9yIGEgc2ltcGxlciBhbmQgbW9yZSBwZXJmb3JtYW50IGNoZWNrIHRoYXQgY292ZXJzIGJvdGggb3ZlcmZsb3cgYW5kIG5vcm1hbCBjYXNlcy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSBtb3JlIGNvbXBsZXggdGhhbiBuZWNlc3NhcnkuCgpPdmVyYWxsLCB0aGVzZSBsb29rIGxpa2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFpbWVkIGF0IHNpbXBsaWZ5aW5nIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVsYXRlZCB0byBudW1iZXIgcmFuZ2VzLiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIHVzZXMgb2YgYGNudW1fZGVmcy5oYCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgcmlwcGxlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NudW1fZGVmcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY251bS5jLTYtI2RlZmluZSBUIDMyXG5rZXJuZWwvYnBmL2NudW0uYzo3OiNpbmNsdWRlIFwmIzM0O2NudW1fZGVmcy5oXCYjMzQ7XG5rZXJuZWwvYnBmL2NudW0uYy04LSN1bmRlZiBUXG4tLVxua2VybmVsL2JwZi9jbnVtLmMtMTAtI2RlZmluZSBUIDY0XG5rZXJuZWwvYnBmL2NudW0uYzoxMTojaW5jbHVkZSBcJiMzNDtjbnVtX2RlZnMuaFwmIzM0O1xua2VybmVsL2JwZi9jbnVtLmMtMTItI3VuZGVmIFRcbi0tXG5rZXJuZWwvYnBmL2NudW1fZGVmcy5oLTQtI2lmbmRlZiBUXG5rZXJuZWwvYnBmL2NudW1fZGVmcy5oOjU6I2Vycm9yIFwmIzM0O0RlZmluZSBUIChiaXQgd2lkdGg6IDMyLCA2NCkgYmVmb3JlIGluY2x1ZGluZyBjbnVtX2RlZnMuaFwmIzM0O1xua2VybmVsL2JwZi9jbnVtX2RlZnMuaC02LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYnBmL2NudW0gSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkgc2VlIGBjbnVtX2RlZnMuaGAgaXMgZ2V0dGluZyBpbmNsdWRlZCB3aXRoaW4gYGtlcm5lbC9icGYvY251bS5jYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2V0dXAgZm9yIGRlZmluaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyAoMzItYml0IGFuZCA2NC1iaXQgaW4gdGhpcyBjYXNlKSBpbXBsZW1lbnRhdGlvbnMgb2Ygc29tZSBjcml0aWNhbCBudW1lcmljYWwgZnVuY3Rpb25zLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvY251bS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmV4cG9ydGVkKiBmcm9tIHRoYXQgbW9kdWxlLCBhbmQgbW9yZSBjcml0aWNhbGx5LCB3aGF0IGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKnVzZWQqIHdpdGhpbiBpdC4gSWRlbnRpZnlpbmcgdGhlIGNhbGwgZ3JhcGggZnJvbSB0aGF0IHBvaW50IHdpbGwgYWxsb3cgYSBjbGVhbiB2aWV3IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aG9zZSBiaXQgd2lkdGhzIGFuZCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBObyBwb2ludCBnb2luZyBmdXJ0aGVyIHdpdGhvdXQgYSBzb2xpZCBtYXAgb2YgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y251bTMyXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE5ND1zdGF0aWMgaW5saW5lIHMzMiByZWdfczMyX21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xOTUte1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxOTY6XHRyZXR1cm4gY251bTMyX3NtaW4ocmVnLVx1MDAzZXIzMik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE5Ny19XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xOTk9c3RhdGljIGlubGluZSBzMzIgcmVnX3MzMl9tYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjAwLXtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjAxOlx0cmV0dXJuIGNudW0zMl9zbWF4KHJlZy1cdTAwM2VyMzIpO1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMDItfVxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MjA0PXN0YXRpYyBpbmxpbmUgdTMyIHJlZ191MzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIwNS17XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjIwNjpcdHJldHVybiBjbnVtMzJfdW1pbihyZWctXHUwMDNlcjMyKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjA3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTIwOT1zdGF0aWMgaW5saW5lIHUzMiByZWdfdTMyX21heChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTAte1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoyMTE6XHRyZXR1cm4gY251bTMyX3VtYXgocmVnLVx1MDAzZXIzMik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIxMi19XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0yMTQ9c3RhdGljIGlubGluZSB2b2lkIHJlZ19zZXRfc3JhbmdlMzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgczMyIHNtaW4sIHMzMiBzbWF4KVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTUte1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoyMTY6XHRyZWctXHUwMDNlcjMyID0gY251bTMyX2Zyb21fc3JhbmdlKHNtaW4sIHNtYXgpO1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTctfVxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MjE5PXN0YXRpYyBpbmxpbmUgdm9pZCByZWdfc2V0X3VyYW5nZTMyKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHUzMiB1bWluLCB1MzIgdW1heClcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjIwLXtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjIxOlx0cmVnLVx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSh1bWluLCB1bWF4KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjIyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2NudW0uaD0yOD1zdHJ1Y3QgY251bTMyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NudW0uaC0zNS1cbmluY2x1ZGUvbGludXgvY251bS5oOjM2OnN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fdXJhbmdlKHUzMiBtaW4sIHUzMiBtYXgpO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzc6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV9zcmFuZ2UoczMyIG1pbiwgczMyIG1heCk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDozODp1MzIgY251bTMyX3VtaW4oc3RydWN0IGNudW0zMiBjbnVtKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjM5OnUzMiBjbnVtMzJfdW1heChzdHJ1Y3QgY251bTMyIGNudW0pO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NDA6czMyIGNudW0zMl9zbWluKHN0cnVjdCBjbnVtMzIgY251bSk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0MTpzMzIgY251bTMyX3NtYXgoc3RydWN0IGNudW0zMiBjbnVtKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjQyOnN0cnVjdCBjbnVtMzIgY251bTMyX2ludGVyc2VjdChzdHJ1Y3QgY251bTMyIGEsIHN0cnVjdCBjbnVtMzIgYik7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Mzp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aChzdHJ1Y3QgY251bTMyICpkc3QsIHN0cnVjdCBjbnVtMzIgc3JjKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjQ0OnZvaWQgY251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShzdHJ1Y3QgY251bTMyICpkc3QsIHUzMiBtaW4sIHUzMiBtYXgpO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NDU6dm9pZCBjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKHN0cnVjdCBjbnVtMzIgKmRzdCwgczMyIG1pbiwgczMyIG1heCk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Njpib29sIGNudW0zMl9jb250YWlucyhzdHJ1Y3QgY251bTMyIGNudW0sIHUzMiB2KTtcbmluY2x1ZGUvbGludXgvY251bS5oOjQ3OmJvb2wgY251bTMyX2lzX2NvbnN0KHN0cnVjdCBjbnVtMzIgY251bSk7XG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0ODpib29sIGNudW0zMl9pc19lbXB0eShzdHJ1Y3QgY251bTMyIGNudW0pO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NDk6c3RydWN0IGNudW0zMiBjbnVtMzJfYWRkKHN0cnVjdCBjbnVtMzIgYSwgc3RydWN0IGNudW0zMiBiKTtcbmluY2x1ZGUvbGludXgvY251bS5oOjUwOnN0cnVjdCBjbnVtMzIgY251bTMyX25lZ2F0ZShzdHJ1Y3QgY251bTMyIGEpO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6NTE6Ym9vbCBjbnVtMzJfaXNfc3Vic2V0KHN0cnVjdCBjbnVtMzIgb3V0ZXIsIHN0cnVjdCBjbnVtMzIgaW5uZXIpO1xuaW5jbHVkZS9saW51eC9jbnVtLmgtNTItXG4tLVxuaW5jbHVkZS9saW51eC9jbnVtLmg9Nzc9Ym9vbCBjbnVtNjRfaXNfc3Vic2V0KHN0cnVjdCBjbnVtNjQgb3V0ZXIsIHN0cnVjdCBjbnVtNjQgaW5uZXIpO1xuaW5jbHVkZS9saW51eC9jbnVtLmgtNzgtXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo3OTpzdHJ1Y3QgY251bTMyIGNudW0zMl9mcm9tX2NudW02NChzdHJ1Y3QgY251bTY0IGNudW0pO1xuaW5jbHVkZS9saW51eC9jbnVtLmg6ODA6c3RydWN0IGNudW02NCBjbnVtNjRfY251bTMyX2ludGVyc2VjdChzdHJ1Y3QgY251bTY0IGEsIHN0cnVjdCBjbnVtMzIgYik7XG5pbmNsdWRlL2xpbnV4L2NudW0uaC04MS1cbi0tXG5rZXJuZWwvYnBmL2NudW0uYy0xMy1cbmtlcm5lbC9icGYvY251bS5jOjE0OnN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fY251bTY0KHN0cnVjdCBjbnVtNjQgY251bSlcbmtlcm5lbC9icGYvY251bS5jLTE1LXtcbi0tXG5rZXJuZWwvYnBmL2NudW0uYy00MC0gKi9cbmtlcm5lbC9icGYvY251bS5jOjQxOnN0cnVjdCBjbnVtNjQgY251bTY0X2NudW0zMl9pbnRlcnNlY3Qoc3RydWN0IGNudW02NCBhLCBzdHJ1Y3QgY251bTMyIGIpXG5rZXJuZWwvYnBmL2NudW0uYy00Mi17XG4tLVxua2VybmVsL2JwZi9jbnVtLmMtNTAtXG5rZXJuZWwvYnBmL2NudW0uYzo1MTpcdGlmIChjbnVtNjRfaXNfZW1wdHkoYSkgfHwgY251bTMyX2lzX2VtcHR5KGIpKVxua2VybmVsL2JwZi9jbnVtLmMtNTItXHRcdHJldHVybiBDTlVNNjRfRU1QVFk7XG5rZXJuZWwvYnBmL2NudW0uYy01My1cbmtlcm5lbC9icGYvY251bS5jOjU0Olx0aWYgKGNudW0zMl91cmFuZ2Vfb3ZlcmZsb3coYjEpKSB7XG5rZXJuZWwvYnBmL2NudW0uYy01NS1cdFx0YjFfbWF4ID0gKHUzMiliMS5iYXNlICYjNDM7ICh1MzIpYjEuc2l6ZTsgLyogb3ZlcmZsb3cgaGVyZSBpcyBmaW5lIGFuZCBuZWNlc3NhcnkgKi9cbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTMwMj1zdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNS1cdHJldHVybiBjbnVtNjRfaXNfc3Vic2V0KG9sZC1cdTAwM2VyNjQsIGN1ci1cdTAwM2VyNjQpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzozMDY6XHQgICAgICAgY251bTMyX2lzX3N1YnNldChvbGQtXHUwMDNlcjMyLCBjdXItXHUwMDNlcjMyKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzA3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5MT1zdGF0aWMgdm9pZCBfX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk0LVx0cmVnLVx1MDAzZXI2NCA9IGNudW02NF9mcm9tX3VyYW5nZShpbW0sIGltbSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NTpcdHJlZy1cdTAwM2VyMzIgPSBjbnVtMzJfZnJvbV91cmFuZ2UoKHUzMilpbW0sICh1MzIpaW1tKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgxMT1zdGF0aWMgdm9pZCBfX21hcmtfcmVnMzJfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMy1cdHJlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9jb25zdF9zdWJyZWcocmVnLVx1MDAzZXZhcl9vZmYsIGltbSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDpcdHJlZy1cdTAwM2VyMzIgPSBjbnVtMzJfZnJvbV91cmFuZ2UoKHUzMilpbW0sICh1MzIpaW1tKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE1LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk0OT1zdGF0aWMgdm9pZCByZXNldF9yZWczMl9hbmRfdG51bShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTU6c3RhdGljIHN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fdG51bShzdHJ1Y3QgdG51bSB0bnVtKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwLVx0XHQvKiBtYXggc2lnbmVkIGlzIG1pbihzaWduIGJpdCkgfCBtYXgob3RoZXIgYml0cykgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYxOlx0XHRyZXR1cm4gY251bTMyX2Zyb21fc3JhbmdlKHRudW0udmFsdWUgfCAodG51bS5tYXNrIFx1MDAyNiBTMzJfTUlOKSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyLVx0XHRcdFx0XHQgIHRudW0udmFsdWUgfCAodG51bS5tYXNrIFx1MDAyNiBTMzJfTUFYKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2My1cdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY0Olx0XHRyZXR1cm4gY251bTMyX2Zyb21fdXJhbmdlKHRudW0udmFsdWUsICh0bnVtLnZhbHVlIHwgdG51bS5tYXNrKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Nzg9c3RhdGljIHZvaWQgX191cGRhdGVfcmVnMzJfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3OS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4MDpcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcdTAwMjZyZWctXHUwMDNlcjMyLCBjbnVtMzJfZnJvbV90bnVtKHJlZy1cdTAwM2V2YXJfb2ZmKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4MS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjQ9c3RhdGljIHZvaWQgZGVkdWNlX2JvdW5kc18zMl9mcm9tXzY0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyNjpcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcdTAwMjZyZWctXHUwMDNlcjMyLCBjbnVtMzJfZnJvbV9jbnVtNjQocmVnLVx1MDAzZXI2NCkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDI5PXN0YXRpYyB2b2lkIGRlZHVjZV9ib3VuZHNfNjRfZnJvbV8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzAte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzE6XHRyZWctXHUwMDNlcjY0ID0gY251bTY0X2NudW0zMl9pbnRlcnNlY3QocmVnLVx1MDAzZXI2NCwgcmVnLVx1MDAzZXIzMik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODI9c3RhdGljIGJvb2wgY29uc3RfdG51bV9yYW5nZV9taXNtYXRjaF8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODc6XHRyZXR1cm4gIWNudW0zMl9pc19jb25zdChyZWctXHUwMDNlcjMyKSB8fCByZWctXHUwMDNlcjMyLmJhc2UgIT0gdG51bV9zdWJyZWcocmVnLVx1MDAzZXZhcl9vZmYpLnZhbHVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODgtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDkwPXN0YXRpYyBib29sIHJhbmdlX2JvdW5kc192aW9sYXRpb24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDkxLXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDkyOlx0cmV0dXJuIGNudW0zMl9pc19lbXB0eShyZWctXHUwMDNlcjMyKSB8fCBjbnVtNjRfaXNfZW1wdHkocmVnLVx1MDAzZXI2NCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5My19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU0ODk9c3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplX3N4KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTA2LVx0XHRyZWctXHUwMDNlcjY0ID0gY251bTY0X2Zyb21fdXJhbmdlKHU2NF9jdmFsLCB1NjRfY3ZhbCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTUwNzpcdFx0cmVnLVx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSgodTMyKXU2NF9jdmFsLCAodTMyKXU2NF9jdmFsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTA4LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTE2PXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxOC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5MTk6XHRkc3RfcmVnLVx1MDAzZXIzMiA9IGNudW0zMl9hZGQoZHN0X3JlZy1cdTAwM2VyMzIsIHNyY19yZWctXHUwMDNlcjMyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkyMC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTI4PXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfc3ViKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkzMC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5MzE6XHRkc3RfcmVnLVx1MDAzZXIzMiA9IGNudW0zMl9hZGQoZHN0X3JlZy1cdTAwM2VyMzIsIGNudW0zMl9uZWdhdGUoc3JjX3JlZy1cdTAwM2VyMzIpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkzMi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTQwPXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfbXVsKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzk2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzk2NzpcdGRzdF9yZWctXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChjbnVtMzJfZnJvbV91cmFuZ2UodW1pbiwgdW1heCksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5Njg6XHRcdFx0XHRcdGNudW0zMl9mcm9tX3NyYW5nZShzbWluLCBzbWF4KSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5NjktfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU3MD1zdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU1OTEtXHRcdGlmIChpc19qbXAzMikge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NTkyOlx0XHRcdHJlZzEtXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChyZWcxLVx1MDAzZXIzMiwgcmVnMi1cdTAwM2VyMzIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NTkzLVx0XHRcdHJlZzItXHUwMDNlcjMyID0gcmVnMS1cdTAwM2VyMzI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjE3LVx0XHRcdC8qIENvbXBsZW1lbnQgb2YgdGhlIHJhbmdlIFt2YWwsIHZhbF0gYXMgY251bTMyLiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NjE4Olx0XHRcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcdTAwMjZyZWcxLVx1MDAzZXIzMiwgKHN0cnVjdCBjbnVtMzIpeyB2YWwgJiM0MzsgMSwgVTMyX01BWCAtIDEgfSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2MTktXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjY3LVx0XHRpZiAoaXNfam1wMzIpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY2ODpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFx1MDAyNnJlZzEtXHUwMDNlcjMyLCAwLCByZWdfdTMyX21heChyZWcyKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2Njk6XHRcdFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShcdTAwMjZyZWcyLVx1MDAzZXIzMiwgcmVnX3UzMl9taW4ocmVnMSksIFUzMl9NQVgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjcwLVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY3Ni1cdFx0aWYgKGlzX2ptcDMyKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2Nzc6XHRcdFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShcdTAwMjZyZWcxLVx1MDAzZXIzMiwgMCwgcmVnX3UzMl9tYXgocmVnMikgLSAxKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY3ODpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFx1MDAyNnJlZzItXHUwMDNlcjMyLCByZWdfdTMyX21pbihyZWcxKSAmIzQzOyAxLCBVMzJfTUFYKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY3OS1cdFx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODUtXHRcdGlmIChpc19qbXAzMikge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Njg2Olx0XHRcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2UoXHUwMDI2cmVnMS1cdTAwM2VyMzIsIFMzMl9NSU4sIHJlZ19zMzJfbWF4KHJlZzIpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY4NzpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFx1MDAyNnJlZzItXHUwMDNlcjMyLCByZWdfczMyX21pbihyZWcxKSwgUzMyX01BWCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODgtXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njk0LVx0XHRpZiAoaXNfam1wMzIpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY5NTpcdFx0XHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFx1MDAyNnJlZzEtXHUwMDNlcjMyLCBTMzJfTUlOLCByZWdfczMyX21heChyZWcyKSAtIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Njk2Olx0XHRcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2UoXHUwMDI2cmVnMi1cdTAwM2VyMzIsIHJlZ19zMzJfbWluKHJlZzEpICYjNDM7IDEsIFMzMl9NQVgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njk3LVx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvY251bV9kZWZzLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgc29tZXRoaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGZpbGUmIzM5O3MgaW5jbHVzaW9uIGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIFRoZSBgY251bTMyXypgIGFuZCBgY251bTY0XypgIGZ1bmN0aW9ucyBkZWZpbmVkIHRoZXJlIGFyZSBjcml0aWNhbDsgdGhlIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHVzZXMgdGhlbSBleHRlbnNpdmVseS4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGF0IHRoZSBoZWFydCBvZiBob3cgdGhlIEJQRiB2ZXJpZmllciB0cmFja3MgcmVnaXN0ZXIgYm91bmRzIOKAkyB0aGUgbWluL21heCB2YWx1ZXMgaXQgdXNlcyB0byBlbnN1cmUgcHJvZ3JhbXMgYXJlIHNhZmUuIENoYW5naW5nIHRoaXMgKmRlZmluaXRlbHkqIG1lYW5zIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhhdCBtZWFucyBmdXp6aW5nIGlzIGNydWNpYWwuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgdmFsdWUgdHJhY2tpbmcgbG9naWMuCgpTbywgdGhlIG5leHQgc3RlcCBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb3JlIGJvdW5kIGZ1bmN0aW9ucyBhbmQgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyByZWxpYW5jZSBvbiB0aGVzZSB2YWx1ZXMsIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGFyZSBsaWtlbHkgdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgdGhlbXNlbHZlcywgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqZGlyZWN0bHkqIHVzaW5nIHRoZXNlIGJvdW5kcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGFrZSBhIGxvb2sgZm9yIGNhbmRpZGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NTMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTEyOD1yZXVzZXMgdGhlIGV4aXN0aW5nIGBgZmRfYXJyYXlgYDpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5JiMzOTtzIGxlbmd0aC5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM2LSAgIGhhcyByZXNvbHZlZCB0aGUgYGBmZF9hcnJheWBgIGVudHJpZXMgaW50byB0aGUgcHJvZ3JhbSYjMzk7cyBgYHVzZWRfbWFwc2BgLiBUaGVcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0yMzA9VGhpcyBob29rIGdhdGVzIGFkbWlzc2lvbiAqKmZvciBldmVyeSBsb2FkKiosIGZyb20gYSBzaW5nbGUgY2FsbCBzaXRlIGluc2lkZSB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMjMyLW9wdGlvbmFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIHNvIHRoZSB2ZXJkaWN0IGFuZCBrZXlyaW5nIGZpZWxkcyBhcmUgZmluYWwgLSB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdD02NDc9Z290IGZyb20gYnBmX3Byb2dfY3JlYXRlKCksIGFuZCAmIzM5O2N0eCYjMzk7IHRoZSBnaXZlbiBjb250ZXh0IChlLmcuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdDo2NDg6c2tiIHBvaW50ZXIpLiBBbGwgY29uc3RyYWludHMgYW5kIHJlc3RyaWN0aW9ucyBmcm9tIGJwZl9jaGVja19jbGFzc2ljKCkgYXBwbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0LTY0OS1iZWZvcmUgYSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgbGF5b3V0IGlzIGJlaW5nIGRvbmUgYmVoaW5kIHRoZSBzY2VuZXMhXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9Nj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yNi1cdGFkZFx0eDAsIHg5LCB4MjVcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjI3Olx0YmxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjgtXHQvKiBCUEZfUkVHX0FYKHg5KSB3aWxsIGJlIHN0b3JlZCBpbnRvIGNvdW50LCBzbyBtb3ZlIHJldHVybiB2YWx1ZSB0byBpdC4gKi9cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjE0OiAqIENhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCBub3JtYWwgcG93ZXJwYzY0IEFCSTpcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTUtICogXHQtIHIzID0gcHRyLCByZXR1cm4gaW4gcjNcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIwPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzgtXHRhZGQgICAgIHIzLCByMzEsIHIxMlxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozOTpcdGJsICAgICAgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQwLVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTExLSAqXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMjogKiBDYWxscyBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIHRoZSBzdGFuZGFyZCBSSVNDLVYgQUJJLCB3aGVyZVxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTMtICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTE3PVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMxLVx0YWRkXHRhMCwgdDAsIHM1XG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozMjpcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzMtXHRtdlx0dDAsIGEwXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0yMj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM2LVx0bGF5ICVyMiwwKCVyMTIsJXIxMylcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzc6XHRicmFzbCAlcjE0LGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zOC1cdGxnciAlcjEyLCVyMlxuLS1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0xMT1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXHRDQUxMX0RFUFRIX0FDQ09VTlRcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo0MDpcdGNhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTE4MT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM6MTgyOm5mcF9icGZfY2hlY2tfbXR1KHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTE4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTUyMT1jb25zdCBzdHJ1Y3QgbmZwX2FwcF90eXBlIGFwcF9icGYgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYzo1MzE6XHQuY2hlY2tfbXR1XHQ9IG5mcF9icGZfY2hlY2tfbXR1LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTE2OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjE3MDpuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTE3MS1cdFx0XHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0zMTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzozMTE6bmZwX2JwZl9jaGVja19leGl0KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTMxMi1cdFx0ICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTM0Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjM0MzpuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zNDQtXHRcdFx0ICAgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz00NTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo0NTE6bmZwX2JwZl9jaGVja19wdHIoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTQ1Mi1cdFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCByZWdfbm8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjUtXHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjQ2NjpcdFx0ZXJyID0gbmZwX2JwZl9jaGVja19zdGFja19hY2Nlc3MobmZwX3Byb2csIG1ldGEsIHJlZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDY3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTAxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTAyOm5mcF9icGZfY2hlY2tfc3RvcmUoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUwMy1cdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjEtZXhpdF9jaGVja19wdHI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUyMjpcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVx1MDAzZWluc24uZHN0X3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz01MjU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MjY6bmZwX2JwZl9jaGVja19hdG9taWMoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyNy1cdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1NTI6XHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudiwgbWV0YS1cdTAwM2VpbnNuLmRzdF9yZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTU2Om5mcF9icGZfY2hlY2tfYWx1KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTctXHRcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTYzMT1pbnQgbmZwX3ZlcmlmeV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Mi1cdGlmIChpc19tYnBmX2hlbHBlcl9jYWxsKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTM6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKG5mcF9wcm9nLCBlbnYsIG1ldGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTQtXHRpZiAobWV0YS1cdTAwM2VpbnNuLmNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1NTpcdFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfZXhpdChuZnBfcHJvZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTctXHRpZiAoaXNfbWJwZl9sb2FkKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTg6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTktXHRcdFx0XHRcdCBtZXRhLVx1MDAzZWluc24uc3JjX3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2MC1cdGlmIChpc19tYnBmX3N0b3JlKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NjE6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3N0b3JlKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2My1cdGlmIChpc19tYnBmX2F0b21pYyhtZXRhKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjY0Olx0XHRyZXR1cm4gbmZwX2JwZl9jaGVja19hdG9taWMobmZwX3Byb2csIG1ldGEsIGVudik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY2LVx0aWYgKGlzX21icGZfYWx1KG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2Njc6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2FsdShuZnBfcHJvZywgbWV0YSwgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY4LVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMi1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzMzppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzNC1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjAtXHRpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9ERVZJQ0UpKVx0XHRcdCAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDozNjE6XHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKGF0eXBlLCBtYWpvciwgbWlub3IsIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjItXHRcdFx0XHRcdFx0XHQgIGFjY2VzcyxcdCAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zMDQ5PWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDozMDUwOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsIHNpemVfdCBleHBlY3RlZF9zaXplLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUxLVx0XHRcdCAgICAgc2l6ZV90IGFjdHVhbF9zaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwNTQ9c3RydWN0IGJwZl9sb2dfYXR0cjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1NTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKmZwLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTYtXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD05MDE9c3RydWN0IGJwZl9mZF9hcnJheSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MDktLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHNcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTEwOiAqIG9uZSB2ZXJpZmllcl9lbnYgcGVyIGJwZl9jaGVjaygpIGNhbGxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTExLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleSh1NjQga2V5LCB1MzIgKm9ial9pZCwgdTMyICpidGZfaWQpXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTc5LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTgwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4MS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODI6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgzLVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4NC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4NTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTQzOD1pbnQgYnBmX3BydW5lX2RlYWRfYnJhbmNoZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE0Mzk6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE0NDAtaW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NDA9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDMtLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSB0cmFtcG9saW5lLmMgKi9cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY0NDppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDUtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDYtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NDc6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQ4LWludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExOTY9dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMTk3OnU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5OC1ib29sIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTcxNz1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC90Y3AuaC03MzAtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjIyLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTIyMzogKiBsb25nIGJwZl9jaGVja19tdHUodm9pZCAqY3R4LCB1MzIgaWZpbmRleCwgdTMyICptdHVfbGVuLCBzMzIgbGVuX2RpZmYsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjI0LSAqXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD03NDg1PXN0cnVjdCBicGZfcmVkaXJfbmVpZ2gge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk0LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc0OTU6LyogYnBmX2NoZWNrX210dSBmbGFncyovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NjplbnVtICBicGZfY2hlY2tfbXR1X2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk3LVx0QlBGX01UVV9DSEtfU0VHUyAgPSAoMVUgXHUwMDNjXHUwMDNjIDApLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk5LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc1MDA6ZW51bSBicGZfY2hlY2tfbXR1X3JldCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwMS1cdEJQRl9NVFVfQ0hLX1JFVF9TVUNDRVNTLCAgICAgIC8qIGNoZWNrIGFuZCBsb29rdXAgc3VjY2Vzc2Z1bCAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI5LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01NjEtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01NjMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OD1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc2OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3MDppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3MS1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlx0XHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cdFx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2xpbmZvOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cdFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVx0XHQvKlxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcdFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cdFx0ICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjcyNzpcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNS1cbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzExNy1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTE4Olx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjIwPXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzUzOlx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1NC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODU9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MDk5LVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTEwMDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwMS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3NT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4NS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1Mzg2Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDQ2PXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1NTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYyPXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3Mi1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NzM6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzQtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MDU9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTEzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUxNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE1LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MjkwPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjk4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjI5OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTAtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzExOlx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMi1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM2Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NjQ9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzUtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Ny0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4OTk1PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAzMS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQzNT1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NjY6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjctXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTUzNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzYtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjA9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTM1OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTM2LSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA2MS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3NC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDc1Olx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDc2LVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTY4Olx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxODA6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxODEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL3NlY2NvbXAuYz0yNDQ9c3RhdGljIHZvaWQgcG9wdWxhdGVfc2VjY29tcF9kYXRhKHN0cnVjdCBzZWNjb21wX2RhdGEgKnNkKVxuLS1cbmtlcm5lbC9zZWNjb21wLmMtMjcwLSAqXG5rZXJuZWwvc2VjY29tcC5jOjI3MTogKiBUYWtlcyBhIHByZXZpb3VzbHkgY2hlY2tlZCBmaWx0ZXIgKGJ5IGJwZl9jaGVja19jbGFzc2ljKSBhbmRcbmtlcm5lbC9zZWNjb21wLmMtMjcyLSAqIHJlZGlyZWN0cyBhbGwgZmlsdGVyIGNvZGUgdGhhdCBsb2FkcyBzdHJ1Y3Qgc2tfYnVmZiBkYXRhXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTg1ND1zdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy04NjktXHRpZiAoZGF0YV9pbikge1xubmV0L2JwZi90ZXN0X3J1bi5jOjg3MDpcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKGRhdGFfaW4pLCBtYXhfc2l6ZSwgc2l6ZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtODcxLVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXG5uZXQvY29yZS9maWx0ZXIuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcbm5ldC9jb3JlL2ZpbHRlci5jLTE4LSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk4Nz1zdGF0aWMgYm9vbCBjaGtfY29kZV9hbGxvd2VkKHUxNiBjb2RlX3RvX3Byb2JlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMDUzOnN0YXRpYyBib29sIGJwZl9jaGVja19iYXNpY3Nfb2soY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU0LVx0XHRcdFx0dW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2NC0vKipcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNjU6ICpcdGJwZl9jaGVja19jbGFzc2ljIC0gdmVyaWZ5IHNvY2tldCBmaWx0ZXIgY29kZVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2Ni0gKlx0QGZpbHRlcjogZmlsdGVyIHRvIHZlcmlmeVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzctICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMDc4OnN0YXRpYyBpbnQgYnBmX2NoZWNrX2NsYXNzaWMoY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDc5LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTMzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJlcGFyZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTM0MzpcdGVyciA9IGJwZl9jaGVja19jbGFzc2ljKGZwLVx1MDAzZWluc25zLCBmcC1cdTAwM2VsZW4pO1xubmV0L2NvcmUvZmlsdGVyLmMtMTM0NC1cdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMzg0PWludCBicGZfcHJvZ19jcmVhdGUoc3RydWN0IGJwZl9wcm9nICoqcGZwLCBzdHJ1Y3Qgc29ja19mcHJvZ19rZXJuICpmcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzg5LVx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTM5MDpcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cdTAwM2VmaWx0ZXIsIGZwcm9nLVx1MDAzZWxlbikpXG5uZXQvY29yZS9maWx0ZXIuYy0xMzkxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xNDI5PWludCBicGZfcHJvZ19jcmVhdGVfZnJvbV91c2VyKHN0cnVjdCBicGZfcHJvZyAqKnBmcCwgc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzYtXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXG5uZXQvY29yZS9maWx0ZXIuYzoxNDM3Olx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVx1MDAzZWZpbHRlciwgZnByb2ctXHUwMDNlbGVuKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTE1MDU9c3RydWN0IGJwZl9wcm9nICpfX2dldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNC1cdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjE1MTU6XHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXHUwMDNlZmlsdGVyLCBmcHJvZy1cdTAwM2VsZW4pKVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTI2Mz1zdGF0aWMgaW50IGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMwMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDMte1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz00MDU9c3RydWN0IHNvY2sgKmNvb2tpZV92NF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzo0MjY6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI3LVx0fSBlbHNlIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NTg6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyMz1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTM6XHRcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU0LVx0fVxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0xMzU9c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxubmV0L2lwdjQvdWRwX2JwZi5jOjE0NDpzdGF0aWMgdm9pZCB1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQ1LXtcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTYzPWludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XHRcdHVkcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc1LVxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE5Mi1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE1MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciYjMzk7cyBBcml0aG1ldGljIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBjb2RlIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZXNlIGNoYW5nZXMgdG8gdGhlIGBjbnVtMzJfKmAgZnVuY3Rpb25zIGltcGFjdCB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBlbnRyeSBwb2ludCwgb2YgY291cnNlLCBpcyBgYnBmX2NoZWNrYCwgYnV0IEkgd2FudCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcuIExvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0b3VjaGVzIGBjbnVtMzJfc21pbmAsIGBjbnVtMzJfc21heGAsIGBjbnVtMzJfbm9ybWFsaXplYCwgYW5kIGBjbnVtMzJfY29udGFpbnNgLgoKVGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCwgdXNlZCBleHRlbnNpdmVseSB3aXRoaW4gYHZlcmlmaWVyLmNgIGJ5IGZ1bmN0aW9ucyBsaWtlIGBjbnVtMzJfaW50ZXJzZWN0YCwgYGNudW0zMl9pbnRlcnNlY3Rfd2l0aGAsIGBjbnVtMzJfYWRkYCwgYGNudW0zMl9uZWdhdGVgLCBgY251bTMyX2Zyb21fdXJhbmdlYCwgYGNudW0zMl9mcm9tX3NyYW5nZWAsIGFuZCBzbyBvbi4gVGhhdCBhbG9uZSBnaXZlcyBtZSBhIGdvb2QgaWRlYSBvZiB0aGVpciBpbXBvcnRhbmNlLgoKRGlnZ2luZyBkZWVwZXIsIEkgY2FuIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW4gdGhlIHZlcmlmaWVyIHRoYXQgcmVseSBvbiB0aGVzZSB1cGRhdGVkIGBjbnVtMzJfKmAgZnVuY3Rpb25zLiBUaGVzZSBhcmU6IGBzY2FsYXIzMl9taW5fbWF4X2FkZGAsIGBzY2FsYXIzMl9taW5fbWF4X3N1YmAsIGBzY2FsYXIzMl9taW5fbWF4X211bGAsIGByZWdzX3JlZmluZV9jb25kX29wYCwgYGRlZHVjZV9ib3VuZHNfMzJfZnJvbV82NGAsIGBkZWR1Y2VfYm91bmRzXzY0X2Zyb21fMzJgLCBgX191cGRhdGVfcmVnMzJfYm91bmRzYCwgYW5kIGByYW5nZV9ib3VuZHNfdmlvbGF0aW9uYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IHRoZXNlIGtleSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBgcmVnc19yZWZpbmVfY29uZF9vcGAgYW5kIGBzY2FsYXIzMl9taW5fbWF4X2FkZGAsIHVzZSB0aGUgbW9kaWZpZWQgYGNudW0zMl8qYCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgc2NvcGUgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3NfcmVmaW5lX2NvbmRfb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE1MTU5PXN0YXRpYyB2b2lkIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTIzNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTIzNjpzdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTIzNy1cdFx0XHRcdHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyMzg9c3RhdGljIHU4IHJldl9vcGNvZGUodTggb3Bjb2RlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNDEtICogTGVhcm4gbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsaXZlIGJyYW5jaGVzIGJ5IHNpbXVsYXRpbmcgcmVmaW5lbWVudCBvbiBib3RoIGJyYW5jaGVzLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjQyOiAqIHJlZ3NfcmVmaW5lX2NvbmRfb3AoKSBpcyBzb3VuZCwgc28gcHJvZHVjaW5nIGlsbC1mb3JtZWQgcmVnaXN0ZXIgYm91bmRzIGZvciB0aGUgYnJhbmNoIG1lYW5zXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNDMtICogdGhhdCBicmFuY2ggaXMgZGVhZC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyNDU9c3RhdGljIGludCBzaW11bGF0ZV9ib3RoX2JyYW5jaGVzX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNDctXHQvKiBGYWxsdGhyb3VnaCAoRkFMU0UpIGJyYW5jaCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjQ4Olx0cmVnc19yZWZpbmVfY29uZF9vcChcdTAwMjZlbnYtXHUwMDNlZmFsc2VfcmVnMSwgXHUwMDI2ZW52LVx1MDAzZWZhbHNlX3JlZzIsIHJldl9vcGNvZGUob3Bjb2RlKSwgaXNfam1wMzIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MjQ5LVx0cmVnX2JvdW5kc19zeW5jKFx1MDAyNmVudi1cdTAwM2VmYWxzZV9yZWcxKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNTktXHQvKiBKdW1wIChUUlVFKSBicmFuY2ggKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTI2MDpcdHJlZ3NfcmVmaW5lX2NvbmRfb3AoXHUwMDI2ZW52LVx1MDAzZXRydWVfcmVnMSwgXHUwMDI2ZW52LVx1MDAzZXRydWVfcmVnMiwgb3Bjb2RlLCBpc19qbXAzMik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNjEtXHRyZWdfYm91bmRzX3N5bmMoXHUwMDI2ZW52LVx1MDAzZXRydWVfcmVnMSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NTQ3PXN0YXRpYyB1OCByZXZfb3Bjb2RlKHU4IG9wY29kZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU1NjktLyogUmVmaW5lIHJhbmdlIGtub3dsZWRnZSBmb3IgXHUwMDNjcmVnMVx1MDAzZSBcdTAwM2NvcFx1MDAzZSBcdTAwM2NyZWdcdTAwM2UyIGNvbmRpdGlvbmFsIG9wZXJhdGlvbi4gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTU3MDpzdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTU3MS1cdFx0XHRcdHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NjQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3M6CgoqKlJlZmluaW5nIE9wdGltaXphdGlvbiBUYXJnZXRzKioKCkFscmlnaHQsICpgcmVnc19yZWZpbmVfY29uZF9vcGAqIGlzIGRlZmluaXRlbHkgYSBzb2xpZCBjb250ZW5kZXIgZm9yIG9wdGltaXphdGlvbi4gSSYjMzk7dmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhhdCBhcmVhIGZvciBhIHdoaWxlIG5vdy4gVGhlIHBvdGVudGlhbCBnYWlucyB0aGVyZSBhcmUgc2lnbmlmaWNhbnQsIGFuZCBJIGhhdmUgYSBmZXcgc3BlY2lmaWMgaWRlYXMgSSYjMzk7dmUgYmVlbiBtdWxsaW5nIG92ZXIgcmVnYXJkaW5nIGhvdyB0byBpbXByb3ZlIHRoZSByZWdpc3RlciBhbGxvY2F0aW9uIHByb2Nlc3MgaW4gdGhhdCBjb250ZXh0LiBJdCYjMzk7cyBhIGtleSBwaWVjZSBmb3IgaW1wcm92aW5nIG92ZXJhbGwgY29kZSBnZW5lcmF0aW9uIHF1YWxpdHksIHNvIGl0JiMzOTtzIHdvcnRoIHRoZSBmb2N1cy4KCkJ1dC4uLndoYXQgYWJvdXQgKmBzY2FsYXIzMl9taW5fbWF4X2FkZGAqPyBUaGF0IGZ1bmN0aW9uJiMzOTtzIGJlZW4gb24gbXkgcmFkYXIgdG9vLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBjbGV2ZXIgcGVlcGhvbGUgb3B0aW1pemF0aW9uIG9yIGEgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybnMgdGhlcmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBzaW1wbGlmeSBvciBhdm9pZCBzb21lIHVubmVjZXNzYXJ5IG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaG93IGZyZXF1ZW50bHkgdGhvc2UgdHlwZXMgb2YgY2FsY3VsYXRpb25zIHBvcCB1cCBpbiBteSB0YXJnZXQgYXBwbGljYXRpb25zLiBNaWdodCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHNlZSBob3cgaXQgYmVuY2htYXJrcy4gSXQgbWlnaHQgbm90IGJlIGFzIHN0cmF0ZWdpY2FsbHkgY3JpdGljYWwgYXMgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgLCBidXQgc21hbGwgaW1wcm92ZW1lbnRzIHRoZXJlIGNhbiBhY2N1bXVsYXRlIGludG8gc3Vic3RhbnRpYWwgZ2FpbnMgYWNyb3NzIHRoZSBib2FyZC4gVGltZSB0byBjb21wYXJlIHRoZSB0d28gYW5kIGRlY2lkZSB3aGljaCB3b3VsZCBiZSBtb3JlIHdvcnRod2hpbGUgdG8gZm9jdXMgb24gZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjYWxhcjMyX21pbl9tYXhfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTU9c3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTY6c3RhdGljIHZvaWQgc2NhbGFyMzJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTctc3RhdGljIHZvaWQgc2NhbGFyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxMDY9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjExNjpcdHNjYWxhcjMyX21pbl9tYXhfYWRkKGRzdF9yZWcsIFx1MDAyNmZha2VfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTE3LVx0c2NhbGFyX21pbl9tYXhfYWRkKGRzdF9yZWcsIFx1MDAyNmZha2VfcmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3MTg9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkxNjpzdGF0aWMgdm9pZCBzY2FsYXIzMl9taW5fbWF4X2FkZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxNy1cdFx0XHRcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2NDQ9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDY4MC1cdGNhc2UgQlBGX0FERDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDY4MTpcdFx0c2NhbGFyMzJfbWluX21heF9hZGQoZHN0X3JlZywgXHUwMDI2c3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2ODItXHRcdHNjYWxhcl9taW5fbWF4X2FkZChkc3RfcmVnLCBcdTAwMjZzcmNfcmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5Mzg9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTgzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0Olx0XHRcdHNjYWxhcjMyX21pbl9tYXhfYWRkKHJlZywgXHUwMDI2ZmFrZV9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVx0XHRcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFx1MDAyNmZha2VfcmVnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaXMgdGhhdCBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhbmFseXNpcywgYW5kIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AgaXMgYWxzbyBhIGxpa2VseSBjYW5kaWRhdGUuIEhvd2V2ZXIsIHRoZSBiaWcgZmlzaCBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIGlzIGBicGZfY2hlY2tgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEFoLCByaWdodC4gVGhlIEJQRiB2ZXJpZmllciBpcyBhbHdheXMgZW5hYmxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBJIGRvbiYjMzk7dCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBUaGF0IG1lYW5zIEkgY2FuIGFzc3VtZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyB0aGVyZS4gR29vZCwgdGhhdCYjMzk7cyBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQlBGIFZlcmlmaWNhdGlvbjogQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgQlBGIHN5c2NhbGxzLiBUaGUgYmlnIG9uZSB0byBrZWVwIGFuIGV5ZSBvbiwgb2YgY291cnNlLCBpcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGtleSB0byBlbnN1cmluZyBCUEYmIzM5O3Mgc2FmZXR5IGFuZCBpbnRlZ3JpdHkgbGllcyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBieSBkaXZpbmcgaW50byB0aGUgYGJwZl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIHJlc2lkZXMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSB2ZXJpZmllciBpcyB1cCB0bywgYW5kIHdoYXQgcHJvdGVjdGlvbnMgaXQmIzM5O3MgcHV0dGluZyBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NTMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTEyOD1yZXVzZXMgdGhlIGV4aXN0aW5nIGBgZmRfYXJyYXlgYDpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5JiMzOTtzIGxlbmd0aC5cbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM2LSAgIGhhcyByZXNvbHZlZCB0aGUgYGBmZF9hcnJheWBgIGVudHJpZXMgaW50byB0aGUgcHJvZ3JhbSYjMzk7cyBgYHVzZWRfbWFwc2BgLiBUaGVcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0yMzA9VGhpcyBob29rIGdhdGVzIGFkbWlzc2lvbiAqKmZvciBldmVyeSBsb2FkKiosIGZyb20gYSBzaW5nbGUgY2FsbCBzaXRlIGluc2lkZSB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMjMyLW9wdGlvbmFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIHNvIHRoZSB2ZXJkaWN0IGFuZCBrZXlyaW5nIGZpZWxkcyBhcmUgZmluYWwgLSB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdD02NDc9Z290IGZyb20gYnBmX3Byb2dfY3JlYXRlKCksIGFuZCAmIzM5O2N0eCYjMzk7IHRoZSBnaXZlbiBjb250ZXh0IChlLmcuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdDo2NDg6c2tiIHBvaW50ZXIpLiBBbGwgY29uc3RyYWludHMgYW5kIHJlc3RyaWN0aW9ucyBmcm9tIGJwZl9jaGVja19jbGFzc2ljKCkgYXBwbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0LTY0OS1iZWZvcmUgYSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgbGF5b3V0IGlzIGJlaW5nIGRvbmUgYmVoaW5kIHRoZSBzY2VuZXMhXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9Nj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yNi1cdGFkZFx0eDAsIHg5LCB4MjVcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjI3Olx0YmxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjgtXHQvKiBCUEZfUkVHX0FYKHg5KSB3aWxsIGJlIHN0b3JlZCBpbnRvIGNvdW50LCBzbyBtb3ZlIHJldHVybiB2YWx1ZSB0byBpdC4gKi9cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjE0OiAqIENhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCBub3JtYWwgcG93ZXJwYzY0IEFCSTpcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTUtICogXHQtIHIzID0gcHRyLCByZXR1cm4gaW4gcjNcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIwPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzgtXHRhZGQgICAgIHIzLCByMzEsIHIxMlxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozOTpcdGJsICAgICAgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQwLVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTExLSAqXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMjogKiBDYWxscyBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIHRoZSBzdGFuZGFyZCBSSVNDLVYgQUJJLCB3aGVyZVxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTMtICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTE3PVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMxLVx0YWRkXHRhMCwgdDAsIHM1XG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozMjpcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzMtXHRtdlx0dDAsIGEwXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0yMj1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM2LVx0bGF5ICVyMiwwKCVyMTIsJXIxMylcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzc6XHRicmFzbCAlcjE0LGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zOC1cdGxnciAlcjEyLCVyMlxuLS1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0xMT1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXHRDQUxMX0RFUFRIX0FDQ09VTlRcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo0MDpcdGNhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTE4MT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM6MTgyOm5mcF9icGZfY2hlY2tfbXR1KHN0cnVjdCBuZnBfYXBwICphcHAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTE4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTUyMT1jb25zdCBzdHJ1Y3QgbmZwX2FwcF90eXBlIGFwcF9icGYgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYzo1MzE6XHQuY2hlY2tfbXR1XHQ9IG5mcF9icGZfY2hlY2tfbXR1LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTE2OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjE3MDpuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTE3MS1cdFx0XHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0zMTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzozMTE6bmZwX2JwZl9jaGVja19leGl0KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTMxMi1cdFx0ICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTM0Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjM0MzpuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zNDQtXHRcdFx0ICAgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz00NTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo0NTE6bmZwX2JwZl9jaGVja19wdHIoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTQ1Mi1cdFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCByZWdfbm8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjUtXHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjQ2NjpcdFx0ZXJyID0gbmZwX2JwZl9jaGVja19zdGFja19hY2Nlc3MobmZwX3Byb2csIG1ldGEsIHJlZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDY3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTAxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTAyOm5mcF9icGZfY2hlY2tfc3RvcmUoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUwMy1cdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjEtZXhpdF9jaGVja19wdHI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUyMjpcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVx1MDAzZWluc24uZHN0X3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz01MjU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MjY6bmZwX2JwZl9jaGVja19hdG9taWMoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyNy1cdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1NTI6XHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudiwgbWV0YS1cdTAwM2VpbnNuLmRzdF9yZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTU2Om5mcF9icGZfY2hlY2tfYWx1KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTctXHRcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTYzMT1pbnQgbmZwX3ZlcmlmeV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Mi1cdGlmIChpc19tYnBmX2hlbHBlcl9jYWxsKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTM6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKG5mcF9wcm9nLCBlbnYsIG1ldGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTQtXHRpZiAobWV0YS1cdTAwM2VpbnNuLmNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1NTpcdFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfZXhpdChuZnBfcHJvZywgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTctXHRpZiAoaXNfbWJwZl9sb2FkKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTg6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTktXHRcdFx0XHRcdCBtZXRhLVx1MDAzZWluc24uc3JjX3JlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2MC1cdGlmIChpc19tYnBmX3N0b3JlKG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NjE6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX3N0b3JlKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2My1cdGlmIChpc19tYnBmX2F0b21pYyhtZXRhKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjY0Olx0XHRyZXR1cm4gbmZwX2JwZl9jaGVja19hdG9taWMobmZwX3Byb2csIG1ldGEsIGVudik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY2LVx0aWYgKGlzX21icGZfYWx1KG1ldGEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2Njc6XHRcdHJldHVybiBuZnBfYnBmX2NoZWNrX2FsdShuZnBfcHJvZywgbWV0YSwgZW52KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY4LVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMi1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzMzppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzNC1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjAtXHRpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9ERVZJQ0UpKVx0XHRcdCAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDozNjE6XHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKGF0eXBlLCBtYWpvciwgbWlub3IsIFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjItXHRcdFx0XHRcdFx0XHQgIGFjY2VzcyxcdCAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zMDQ5PWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDozMDUwOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsIHNpemVfdCBleHBlY3RlZF9zaXplLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUxLVx0XHRcdCAgICAgc2l6ZV90IGFjdHVhbF9zaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwNTQ9c3RydWN0IGJwZl9sb2dfYXR0cjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1NTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKmZwLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTYtXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD05MDE9c3RydWN0IGJwZl9mZF9hcnJheSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MDktLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHNcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTEwOiAqIG9uZSB2ZXJpZmllcl9lbnYgcGVyIGJwZl9jaGVjaygpIGNhbGxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTExLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleSh1NjQga2V5LCB1MzIgKm9ial9pZCwgdTMyICpidGZfaWQpXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTc5LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTgwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4MS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODI6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgzLVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4NC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4NTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTQzOD1pbnQgYnBmX3BydW5lX2RlYWRfYnJhbmNoZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE0Mzk6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE0NDAtaW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NDA9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDMtLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSB0cmFtcG9saW5lLmMgKi9cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY0NDppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDUtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDYtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NDc6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQ4LWludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExOTY9dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMTk3OnU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5OC1ib29sIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTcxNz1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC90Y3AuaC03MzAtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjIyLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTIyMzogKiBsb25nIGJwZl9jaGVja19tdHUodm9pZCAqY3R4LCB1MzIgaWZpbmRleCwgdTMyICptdHVfbGVuLCBzMzIgbGVuX2RpZmYsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjI0LSAqXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD03NDg1PXN0cnVjdCBicGZfcmVkaXJfbmVpZ2gge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk0LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc0OTU6LyogYnBmX2NoZWNrX210dSBmbGFncyovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NjplbnVtICBicGZfY2hlY2tfbXR1X2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk3LVx0QlBGX01UVV9DSEtfU0VHUyAgPSAoMVUgXHUwMDNjXHUwMDNjIDApLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk5LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc1MDA6ZW51bSBicGZfY2hlY2tfbXR1X3JldCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwMS1cdEJQRl9NVFVfQ0hLX1JFVF9TVUNDRVNTLCAgICAgIC8qIGNoZWNrIGFuZCBsb29rdXAgc3VjY2Vzc2Z1bCAqL1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI5LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01NjEtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01NjMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OD1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc2OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3MDppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3MS1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlx0XHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cdFx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2xpbmZvOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cdFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVx0XHQvKlxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcdFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cdFx0ICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjcyNzpcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNS1cbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzExNy1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTE4Olx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjIwPXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzUzOlx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1NC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODU9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MDk5LVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTEwMDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwMS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3NT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4NS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1Mzg2Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDQ2PXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1NTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYyPXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3Mi1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NzM6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzQtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MDU9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTEzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUxNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE1LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MjkwPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjk4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjI5OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTAtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzExOlx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMi1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM2Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NjQ9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzUtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Ny0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4OTk1PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAzMS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQzNT1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NjY6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NjctXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTUzNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzYtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjA9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTM1OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTM2LSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA2MS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3NC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDc1Olx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDc2LVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTY4Olx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTY5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxODA6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxODEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL3NlY2NvbXAuYz0yNDQ9c3RhdGljIHZvaWQgcG9wdWxhdGVfc2VjY29tcF9kYXRhKHN0cnVjdCBzZWNjb21wX2RhdGEgKnNkKVxuLS1cbmtlcm5lbC9zZWNjb21wLmMtMjcwLSAqXG5rZXJuZWwvc2VjY29tcC5jOjI3MTogKiBUYWtlcyBhIHByZXZpb3VzbHkgY2hlY2tlZCBmaWx0ZXIgKGJ5IGJwZl9jaGVja19jbGFzc2ljKSBhbmRcbmtlcm5lbC9zZWNjb21wLmMtMjcyLSAqIHJlZGlyZWN0cyBhbGwgZmlsdGVyIGNvZGUgdGhhdCBsb2FkcyBzdHJ1Y3Qgc2tfYnVmZiBkYXRhXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTg1ND1zdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy04NjktXHRpZiAoZGF0YV9pbikge1xubmV0L2JwZi90ZXN0X3J1bi5jOjg3MDpcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKGRhdGFfaW4pLCBtYXhfc2l6ZSwgc2l6ZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtODcxLVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXG5uZXQvY29yZS9maWx0ZXIuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcbm5ldC9jb3JlL2ZpbHRlci5jLTE4LSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk4Nz1zdGF0aWMgYm9vbCBjaGtfY29kZV9hbGxvd2VkKHUxNiBjb2RlX3RvX3Byb2JlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMDUzOnN0YXRpYyBib29sIGJwZl9jaGVja19iYXNpY3Nfb2soY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU0LVx0XHRcdFx0dW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2NC0vKipcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNjU6ICpcdGJwZl9jaGVja19jbGFzc2ljIC0gdmVyaWZ5IHNvY2tldCBmaWx0ZXIgY29kZVxubmV0L2NvcmUvZmlsdGVyLmMtMTA2Ni0gKlx0QGZpbHRlcjogZmlsdGVyIHRvIHZlcmlmeVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzctICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMDc4OnN0YXRpYyBpbnQgYnBmX2NoZWNrX2NsYXNzaWMoY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0xMDc5LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGZsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTMzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJlcGFyZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTM0MzpcdGVyciA9IGJwZl9jaGVja19jbGFzc2ljKGZwLVx1MDAzZWluc25zLCBmcC1cdTAwM2VsZW4pO1xubmV0L2NvcmUvZmlsdGVyLmMtMTM0NC1cdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMzg0PWludCBicGZfcHJvZ19jcmVhdGUoc3RydWN0IGJwZl9wcm9nICoqcGZwLCBzdHJ1Y3Qgc29ja19mcHJvZ19rZXJuICpmcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMzg5LVx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTM5MDpcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cdTAwM2VmaWx0ZXIsIGZwcm9nLVx1MDAzZWxlbikpXG5uZXQvY29yZS9maWx0ZXIuYy0xMzkxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xNDI5PWludCBicGZfcHJvZ19jcmVhdGVfZnJvbV91c2VyKHN0cnVjdCBicGZfcHJvZyAqKnBmcCwgc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzYtXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXG5uZXQvY29yZS9maWx0ZXIuYzoxNDM3Olx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVx1MDAzZWZpbHRlciwgZnByb2ctXHUwMDNlbGVuKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTE1MDU9c3RydWN0IGJwZl9wcm9nICpfX2dldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNC1cdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjE1MTU6XHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXHUwMDNlZmlsdGVyLCBmcHJvZy1cdTAwM2VsZW4pKVxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTI2Mz1zdGF0aWMgaW50IGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMwMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDMte1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz00MDU9c3RydWN0IHNvY2sgKmNvb2tpZV92NF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzo0MjY6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI3LVx0fSBlbHNlIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NTg6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyMz1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTM6XHRcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU0LVx0fVxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0xMzU9c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxubmV0L2lwdjQvdWRwX2JwZi5jOjE0NDpzdGF0aWMgdm9pZCB1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQ1LXtcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTYzPWludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XHRcdHVkcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc1LVxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE5Mi1cdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XHRcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MTIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBnZXR0aW5nIHN0YXJ0ZWQgd2l0aCB0aGlzIEJQRiB2ZXJpZmljYXRpb24gYW5hbHlzaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfY2hlY2tgLiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AsIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AsIGFuZCBgcmVnc19yZWZpbmVfY29uZF9vcGAuIFRoZXkgYXJlIGFsbCBsaWtlbHkgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBicGZfY2hlY2tgIGlzIGludGVybmFsIG9yIGV4cG9zZWQuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgeWVwLCBpdCYjMzk7cyBhIHJlZ3VsYXIgZnVuY3Rpb24gZGVjbGFyYXRpb246CgpgYGBjCmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAoJICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpCmBgYAoKQW5kIGl0JiMzOTtzIG5vdCBgc3RhdGljYCwgc28gaXQmIzM5O3MgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodHMuIEkmIzM5O3ZlIHNlZW4gaXQgdXNlZCBpbiBgc3lzY2FsbC5jYCwgc28gSSBrbm93IHRoYXQmIzM5O3MgYWNjdXJhdGUuCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGZvY3VzOgoKKiAgIGBicGZfY2hlY2tgCiogICBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgCiogICBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgCiogICBgcmVnc19yZWZpbmVfY29uZF9vcGAKCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsIGhlcmUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIGFzIHdlbGwsIG9mIGNvdXJzZS4KClRoZSByZWxldmFudCBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGtlcm5lbC9icGYvY251bV9kZWZzLmhgLiBUaGlzIGlzIGluY2x1ZGVkIGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgTWFrZWZpbGUgdG8gYmUgc3VyZS4gSSB3aWxsIGFuYWx5emUgdGhlIE1ha2VmaWxlIGZvciBga2VybmVsL2JwZi9jbnVtLmNgIHRvIGlkZW50aWZ5IGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y251bS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MjkKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBjbnVtLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgY2lyY3VsYXIgbnVtYmVycyAoYGNudW1gKSBmb3IgcmVnaXN0ZXIgYm91bmRzLiBUaGlzIGlzIGEgKmNvcmUqIHBhcnQgb2YgdGhlIEJQRiB2ZXJpZmllciwgcmlnaHQ/IFNpbXBsaWZpY2F0aW9uIG9mIGBzbWluYCwgYHNtYXhgLCBgbm9ybWFsaXplYCwgYW5kIGBjb250YWluc2Ag4oCTIHRob3NlIGFyZSB0aGUgZnVuZGFtZW50YWwgb3BlcmF0aW9ucyBmb3IgbWFuYWdpbmcgYW5kIGNvbXBhcmluZyB0aGVzZSBib3VuZHMuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3Mgbm90IGp1c3QgYSByZWZhY3RvcmluZzsgaXQmIzM5O3MgYWx0ZXJpbmcgaG93IHRoZSB2ZXJpZmllciAqdGhpbmtzKiBhYm91dCByZWdpc3RlciBib3VuZHMuIFRoaXMgbWVhbnMgaXQgY291bGQgc3VidGx5IGFsdGVyIHdoaWNoIEJQRiBwcm9ncmFtcyBwYXNzIHZlcmlmaWNhdGlvbiBvciwgY29udmVyc2VseSwgd2hpY2ggb25lcyBhcmUgcmVqZWN0ZWQuIEl0IGNvdWxkIGFsc28gY2hhbmdlIHRoZSBwcmVjaXNpb24gb3IgYWNjdXJhY3kgb2YgdGhlIHRyYWNrZWQgYm91bmRzLCB3aGljaCBoYXMgc2VyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuIEFueSBjaGFuZ2UgdG8gdGhlIHZlcmlmaWVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGJvdW5kIHRyYWNraW5nLCBpcyB3b3J0aCBleHBsb3JpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpGcm9tIGEgZm9jdXMgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfY2hlY2tgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQsIG5hdHVyYWxseTsgYGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzYCBhbmQgYGFkanVzdF9wdHJfbWluX21heF92YWxzYCAtIHRoZXkmIzM5O3JlIGNyaXRpY2FsIGJlY2F1c2UgdGhleSBhcmUgdGhlIG9uZXMgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIGJvdW5kcyBhbmQgdGhlIGFkanVzdG1lbnQgdG8gdGhlbTsgYW5kIGByZWdzX3JlZmluZV9jb25kX29wYCAtIHRoaXMgaXMgaW1wb3J0YW50IGZvciBjb25kaXRpb25hbCBvcGVyYXRpb25zIGFuZCBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYnJhbmNoaW5nLCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIGBjbnVtYCBib3VuZHMgY29tZSBpbnRvIHBsYXkuCgpNeSByZWFzb25pbmc/IFRoZSBwYXRjaCBtZXNzZXMgd2l0aCB0aGUgZnVuZGFtZW50YWwgbG9naWMgb2YgQlBGIHZlcmlmaWVyJiMzOTtzIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzLiBJdCYjMzk7cyBhIHNpbXBsaWZpY2F0aW9uIGluIHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb24sIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBhZmZlY3RzIGhvdyB0aGUgdmVyaWZpZXIgZG9lcyBpdHMgam9iLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LiBGdXp6aW5nIGhhcyB0byBjb25jZW50cmF0ZSBvbiB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnRzLCBhbmQgdGhlc2UgZnVuY3Rpb25zOiBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgLCBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgLCBhbmQgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgLgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBgc2V0LXJlc3VsdHNgIHJ1bm5pbmcgYW5kIHN0YXJ0IGdlbmVyYXRpbmcgc29tZSBmdXp6IHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDthZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHRyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDtyZWdzX3JlZmluZV9jb25kX29wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDthZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHRyX21pbl9tYXhfdmFscyYjMzQ7LAogICAgJiMzNDtyZWdzX3JlZmluZV9jb25kX29wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6MTkuOTg5MTkyNjc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxMTQxOTM3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImFkanVzdF9zY2FsYXJfbWluX21heF92YWxzXCIsXG4gICAgXCJhZGp1c3RfcHRyX21pbl9tYXhfdmFsc1wiLFxuICAgIFwicmVnc19yZWZpbmVfY29uZF9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjoxOS45ODkxOTk4MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTk0MTYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNjZDA4ZGU3YTg1ZmM0NjJjZTE0MWU1NzU1MWI5OWViYThlZGI5MjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjM6NDY6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jbnVtX2RlZnMuaCBiL2tlcm5lbC9icGYvY251bV9kZWZzLmhcXG5pbmRleCBhOTBlMzE3ZTM1NzgwLi4zMDY4NWU0M2RlMDQ5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY251bV9kZWZzLmhcXG4rKysgYi9rZXJuZWwvYnBmL2NudW1fZGVmcy5oXFxuQEAgLTMzLDcgKzMzLDEyIEBAIHN0cnVjdCBjbnVtX3QgRk4oZnJvbV9zcmFuZ2UpKHN0IG1pbiwgc3QgbWF4KVxcbiBcXHRyZXR1cm4gKHN0cnVjdCBjbnVtX3QpeyAuYmFzZSA9IGJhc2UsIC5zaXplID0gc2l6ZSB9O1xcbiB9XFxuIFxcbi0vKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byB1bnNpZ25lZCByYW5nZXMuICovXFxuKy8qXFxuKyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy5cXG4rICpcXG4rICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmdcXG4rICogdGhpcyBmdW5jdGlvbi5cXG4rICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBGTih1cmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcXG4ge1xcbiBcXHQvKiBTYW1lIGFzIGNudW0uYmFzZSArIGNudW0uc2l6ZSBcXHUwMDNlIFVUX01BWCBidXQgYXZvaWRzIG92ZXJmbG93ICovXFxuQEAgLTQ0LDYgKzQ5LDkgQEAgc3RhdGljIGlubGluZSBib29sIEZOKHVyYW5nZV9vdmVyZmxvdykoc3RydWN0IGNudW1fdCBjbnVtKVxcbiAgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXggcXVlcnkgYW4gdW5zaWduZWQgcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbnVtLlxcbiAgKiBJZiBjbnVtIHJlcHJlc2VudHMgYSByYW5nZSBjcm9zc2luZyB0aGUgVVRfTUFYLzAgYm91bmRhcnksIHRoZSB1bmJvdW5kIHJhbmdlXFxuICAqIFswLi5VVF9NQVhdIGlzIHJldHVybmVkLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xcbisgKiBjbnVte1R9X3VtaW4gLyBjbnVte1R9X3VtYXguXFxuICAqL1xcbiB1dCBGTih1bWluKShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG5AQCAtNTcsNyArNjUsMTIgQEAgdXQgRk4odW1heCkoc3RydWN0IGNudW1fdCBjbnVtKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKEZOKHVtYXgpKTtcXG4gXFxuLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuICovXFxuKy8qXFxuKyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuXFxuKyAqXFxuKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXFxuKyAqIHRoaXMgZnVuY3Rpb24uXFxuKyAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgRk4oc3JhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG4gXFx0cmV0dXJuIEZOKGNvbnRhaW5zKShjbnVtLCAodXQpU1RfTUFYKSBcXHUwMDI2XFx1MDAyNiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01JTik7XFxuQEAgLTY3LDE5ICs4MCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgRk4oc3JhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXFxuICAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heCBxdWVyeSBhIHNpZ25lZCByYW5nZSByZXByZXNlbnRlZCBieSB0aGlzIGNudW0uXFxuICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBTVF9NQVgvU1RfTUlOIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxcbiAgKiBbU1RfTUlOLi5TVF9NQVhdIGlzIHJldHVybmVkLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xcbisgKiBjbnVte1R9X3NtaW4gLyBjbnVte1R9X3NtYXguXFxuICAqL1xcbiBzdCBGTihzbWluKShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG4tXFx0cmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSlcXG4tXFx0ICAgICAgID8gU1RfTUlOXFxuLVxcdCAgICAgICA6IG1pbigoc3QpY251bS5iYXNlLCAoc3QpKGNudW0uYmFzZSArIGNudW0uc2l6ZSkpO1xcbitcXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01JTiA6IChzdCljbnVtLmJhc2U7XFxuIH1cXG4gXFxuIHN0IEZOKHNtYXgpKHN0cnVjdCBjbnVtX3QgY251bSlcXG4ge1xcbi1cXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKVxcbi1cXHQgICAgICAgPyBTVF9NQVhcXG4tXFx0ICAgICAgIDogbWF4KChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICsgY251bS5zaXplKSk7XFxuK1xcdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pID8gU1RfTUFYIDogKHN0KShjbnVtLmJhc2UgKyBjbnVtLnNpemUpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xODEsNyArMTkzLDcgQEAgdm9pZCBGTihpbnRlcnNlY3Rfd2l0aF9zcmFuZ2UpKHN0cnVjdCBjbnVtX3QgKmRzdCwgc3QgbWluLCBzdCBtYXgpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbnVtX3QgRk4obm9ybWFsaXplKShzdHJ1Y3QgY251bV90IGNudW0pXFxuIHtcXG4tXFx0aWYgKGNudW0uc2l6ZSA9PSBVVF9NQVggXFx1MDAyNlxcdTAwMjYgY251bS5iYXNlICE9IDAgXFx1MDAyNlxcdTAwMjYgY251bS5iYXNlICE9ICh1dClTVF9NQVgpXFxuK1xcdGlmIChjbnVtLnNpemUgPT0gVVRfTUFYKVxcbiBcXHRcXHRjbnVtLmJhc2UgPSAwO1xcbiBcXHRyZXR1cm4gY251bTtcXG4gfVxcbkBAIC0yMTAsMTIgKzIyMiw3IEBAIGJvb2wgRk4oaXNfZW1wdHkpKHN0cnVjdCBjbnVtX3QgY251bSlcXG4gXFxuIGJvb2wgRk4oY29udGFpbnMpKHN0cnVjdCBjbnVtX3QgY251bSwgdXQgdilcXG4ge1xcbi1cXHRpZiAoRk4oaXNfZW1wdHkpKGNudW0pKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmIChGTih1cmFuZ2Vfb3ZlcmZsb3cpKGNudW0pKVxcbi1cXHRcXHRyZXR1cm4gdiBcXHUwMDNlPSBjbnVtLmJhc2UgfHwgdiBcXHUwMDNjPSAodXQpY251bS5iYXNlICsgY251bS5zaXplO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiB2IFxcdTAwM2U9IGNudW0uYmFzZSBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2M9ICh1dCljbnVtLmJhc2UgKyBjbnVtLnNpemU7XFxuK1xcdHJldHVybiAhRk4oaXNfZW1wdHkpKGNudW0pIFxcdTAwMjZcXHUwMDI2IHYgLSBjbnVtLmJhc2UgXFx1MDAzYz0gY251bS5zaXplO1xcbiB9XFxuIFxcbiBib29sIEZOKGlzX2NvbnN0KShzdHJ1Y3QgY251bV90IGNudW0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjIwLjM4MTk1Njk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjU3MjE0MjA5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImFkanVzdF9zY2FsYXJfbWluX21heF92YWxzXCIsXG4gICAgXCJhZGp1c3RfcHRyX21pbl9tYXhfdmFsc1wiLFxuICAgIFwicmVnc19yZWZpbmVfY29uZF9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzY2QwOGRlN2E4NWZjNDYyY2UxNDFlNTc1NTFiOTllYmE4ZWRiOTIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjM6NDY6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NudW1fZGVmcy5oIGIva2VybmVsL2JwZi9jbnVtX2RlZnMuaFxuaW5kZXggYTkwZTMxN2UzNTc4MC4uMzA2ODVlNDNkZTA0OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY251bV9kZWZzLmhcbisrKyBiL2tlcm5lbC9icGYvY251bV9kZWZzLmhcbkBAIC0zMyw3ICszMywxMiBAQCBzdHJ1Y3QgY251bV90IEZOKGZyb21fc3JhbmdlKShzdCBtaW4sIHN0IG1heClcbiBcdHJldHVybiAoc3RydWN0IGNudW1fdCl7IC5iYXNlID0gYmFzZSwgLnNpemUgPSBzaXplIH07XG4gfVxuIFxuLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy4gKi9cbisvKlxuKyAqIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHVuc2lnbmVkIHJhbmdlcy5cbisgKlxuKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSAhaXNfZW1wdHkoY251bSkgaG9sZHMgd2hlbiBjYWxsaW5nXG4rICogdGhpcyBmdW5jdGlvbi5cbisgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgRk4odXJhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuIFx0LyogU2FtZSBhcyBjbnVtLmJhc2UgKyBjbnVtLnNpemUgXHUwMDNlIFVUX01BWCBidXQgYXZvaWRzIG92ZXJmbG93ICovXG5AQCAtNDQsNiArNDksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgRk4odXJhbmdlX292ZXJmbG93KShzdHJ1Y3QgY251bV90IGNudW0pXG4gICogY251bXtUfV91bWluIC8gY251bXtUfV91bWF4IHF1ZXJ5IGFuIHVuc2lnbmVkIHJhbmdlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY251bS5cbiAgKiBJZiBjbnVtIHJlcHJlc2VudHMgYSByYW5nZSBjcm9zc2luZyB0aGUgVVRfTUFYLzAgYm91bmRhcnksIHRoZSB1bmJvdW5kIHJhbmdlXG4gICogWzAuLlVUX01BWF0gaXMgcmV0dXJuZWQuXG4rICpcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xuKyAqIGNudW17VH1fdW1pbiAvIGNudW17VH1fdW1heC5cbiAgKi9cbiB1dCBGTih1bWluKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuQEAgLTU3LDcgKzY1LDEyIEBAIHV0IEZOKHVtYXgpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoRk4odW1heCkpO1xuIFxuLS8qIFRydWUgaWYgdGhpcyBjbnVtIHJlcHJlc2VudHMgdHdvIHNpZ25lZCByYW5nZXMuICovXG4rLypcbisgKiBUcnVlIGlmIHRoaXMgY251bSByZXByZXNlbnRzIHR3byBzaWduZWQgcmFuZ2VzLlxuKyAqXG4rICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlICFpc19lbXB0eShjbnVtKSBob2xkcyB3aGVuIGNhbGxpbmdcbisgKiB0aGlzIGZ1bmN0aW9uLlxuKyAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB7XG4gXHRyZXR1cm4gRk4oY29udGFpbnMpKGNudW0sICh1dClTVF9NQVgpIFx1MDAyNlx1MDAyNiBGTihjb250YWlucykoY251bSwgKHV0KVNUX01JTik7XG5AQCAtNjcsMTkgKzgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBGTihzcmFuZ2Vfb3ZlcmZsb3cpKHN0cnVjdCBjbnVtX3QgY251bSlcbiAgKiBjbnVte1R9X3NtaW4gLyBjbnVte1R9X3NtYXggcXVlcnkgYSBzaWduZWQgcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbnVtLlxuICAqIElmIGNudW0gcmVwcmVzZW50cyBhIHJhbmdlIGNyb3NzaW5nIHRoZSBTVF9NQVgvU1RfTUlOIGJvdW5kYXJ5LCB0aGUgdW5ib3VuZCByYW5nZVxuICAqIFtTVF9NSU4uLlNUX01BWF0gaXMgcmV0dXJuZWQuXG4rICpcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgIWlzX2VtcHR5KGNudW0pIGhvbGRzIHdoZW4gY2FsbGluZ1xuKyAqIGNudW17VH1fc21pbiAvIGNudW17VH1fc21heC5cbiAgKi9cbiBzdCBGTihzbWluKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0cmV0dXJuIEZOKHNyYW5nZV9vdmVyZmxvdykoY251bSlcbi1cdCAgICAgICA/IFNUX01JTlxuLVx0ICAgICAgIDogbWluKChzdCljbnVtLmJhc2UsIChzdCkoY251bS5iYXNlICsgY251bS5zaXplKSk7XG4rXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKSA/IFNUX01JTiA6IChzdCljbnVtLmJhc2U7XG4gfVxuIFxuIHN0IEZOKHNtYXgpKHN0cnVjdCBjbnVtX3QgY251bSlcbiB7XG4tXHRyZXR1cm4gRk4oc3JhbmdlX292ZXJmbG93KShjbnVtKVxuLVx0ICAgICAgID8gU1RfTUFYXG4tXHQgICAgICAgOiBtYXgoKHN0KWNudW0uYmFzZSwgKHN0KShjbnVtLmJhc2UgKyBjbnVtLnNpemUpKTtcbitcdHJldHVybiBGTihzcmFuZ2Vfb3ZlcmZsb3cpKGNudW0pID8gU1RfTUFYIDogKHN0KShjbnVtLmJhc2UgKyBjbnVtLnNpemUpO1xuIH1cbiBcbiAvKlxuQEAgLTE4MSw3ICsxOTMsNyBAQCB2b2lkIEZOKGludGVyc2VjdF93aXRoX3NyYW5nZSkoc3RydWN0IGNudW1fdCAqZHN0LCBzdCBtaW4sIHN0IG1heClcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbnVtX3QgRk4obm9ybWFsaXplKShzdHJ1Y3QgY251bV90IGNudW0pXG4ge1xuLVx0aWYgKGNudW0uc2l6ZSA9PSBVVF9NQVggXHUwMDI2XHUwMDI2IGNudW0uYmFzZSAhPSAwIFx1MDAyNlx1MDAyNiBjbnVtLmJhc2UgIT0gKHV0KVNUX01BWClcbitcdGlmIChjbnVtLnNpemUgPT0gVVRfTUFYKVxuIFx0XHRjbnVtLmJhc2UgPSAwO1xuIFx0cmV0dXJuIGNudW07XG4gfVxuQEAgLTIxMCwxMiArMjIyLDcgQEAgYm9vbCBGTihpc19lbXB0eSkoc3RydWN0IGNudW1fdCBjbnVtKVxuIFxuIGJvb2wgRk4oY29udGFpbnMpKHN0cnVjdCBjbnVtX3QgY251bSwgdXQgdilcbiB7XG4tXHRpZiAoRk4oaXNfZW1wdHkpKGNudW0pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHRpZiAoRk4odXJhbmdlX292ZXJmbG93KShjbnVtKSlcbi1cdFx0cmV0dXJuIHYgXHUwMDNlPSBjbnVtLmJhc2UgfHwgdiBcdTAwM2M9ICh1dCljbnVtLmJhc2UgKyBjbnVtLnNpemU7XG4tXHRlbHNlXG4tXHRcdHJldHVybiB2IFx1MDAzZT0gY251bS5iYXNlIFx1MDAyNlx1MDAyNiB2IFx1MDAzYz0gKHV0KWNudW0uYmFzZSArIGNudW0uc2l6ZTtcbitcdHJldHVybiAhRk4oaXNfZW1wdHkpKGNudW0pIFx1MDAyNlx1MDAyNiB2IC0gY251bS5iYXNlIFx1MDAzYz0gY251bS5zaXplO1xuIH1cbiBcbiBib29sIEZOKGlzX2NvbnN0KShzdHJ1Y3QgY251bV90IGNudW0pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjoyMC4zODE5NTg2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjQ1NTM2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBQYXRjaDogY251bV9kZWZzLmggTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbW9kaWZ5aW5nIGBrZXJuZWwvYnBmL2NudW1fZGVmcy5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyLCBsaWtlbHkgZGVhbGluZyB3aXRoIGNpcmN1bGFyIG51bWJlciByZXByZXNlbnRhdGlvbnMgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGp1ZGdpbmcgYnkgdGhlIGZ1bmN0aW9uIG5hbWVzLiBXZSd2ZSBnb3QgY2hhbmdlcyB0byBmb3VyIGZ1bmN0aW9uczogYEZOKHNtaW4pYCwgYEZOKHNtYXgpYCwgYEZOKG5vcm1hbGl6ZSlgLCBhbmQgYEZOKGNvbnRhaW5zKWAuIExldCdzIGJyZWFrIHRoZXNlIGRvd24gcXVpY2tseS5cblxuRmlyc3QsIGBGTihzbWluKWAgYW5kIGBGTihzbWF4KWAgYXJlIHNpbXBsaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHBvdGVudGlhbGx5IGhhZCByZWR1bmRhbnQgYG1pbmAgYW5kIGBtYXhgIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCByZW1vdmVzIHRoaXMgY29tcGxleGl0eS4gU3BlY2lmaWNhbGx5LCBpbiB0aGUgYHNtaW5gIGZ1bmN0aW9uIGl0IHdhcyBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBieSB1c2luZyB0aGUgYG1pbmAgZnVuY3Rpb24uIFRoZSBwYXRjaCBub3cgc2ltcGx5IHJldHVybnMgdGhlIGBjbnVtLmJhc2VgIHZhbHVlIGlmIHRoZXJlIGlzIG5vIG92ZXJmbG93LiBTaW1pbGFybHksIGBGTihzbWF4KWAgd2FzIHVzaW5nIGBtYXhgIGJ1dCBub3cgc2ltcGx5IHJldHVybnMgYGNudW0uYmFzZSArIGNudW0uc2l6ZWAuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIG9ic2VydmF0aW9uLiBJdCBwcm9iYWJseSBpbXBsaWVzIHRoYXQgdGhlIG92ZXJmbG93IGNhc2Ugd2lsbCBhbHdheXMgcmVzdWx0IGluIGEgbWluaW11bSBvciBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlIGJhc2UgcGx1cyBzaXplIGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIG1heCBpbiB0aGUgbm9uLW92ZXJmbG93IGNhc2UuXG5cblRoZW4sIGBGTihub3JtYWxpemUpYCBpcyBjbGVhbmVkIHVwLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYW4gZXh0cmEgY29uZGl0aW9uYWwgY2hlY2suIEl0IHNlZW1zIHRoZSB1cGRhdGVkIGxvZ2ljIHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgY251bS5iYXNlICE9IDAgXHUwMDI2XHUwMDI2IGNudW0uYmFzZSAhPSAodXQpU1RfTUFYYCwgc2ltcGxpZnlpbmcgdGhlIG92ZXJmbG93IGhhbmRsaW5nLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIHRoaXMgcGFydGljdWxhciBjaGFuZ2UsIGJ1dCBpdCdzIGNsZWFybHkgYSByZWR1Y3Rpb24gaW4gY29kZSBjb21wbGV4aXR5LlxuXG5GaW5hbGx5LCBgRk4oY29udGFpbnMpYCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IHJld29ya2VkLiBUaGUgb3JpZ2luYWwgdmVyc2lvbiBoYWQgdHdvIGRpZmZlcmVudCBwYXRocywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUgd2FzIGFuIG92ZXJmbG93IGluIHRoZSByYW5nZSBjYWxjdWxhdGlvbi4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGNvbmRpdGlvbmFsIGFuZCBpbnN0ZWFkIGNoZWNrcyBgdiAtIGNudW0uYmFzZSBcdTAwM2M9IGNudW0uc2l6ZWAuIFNlZW1zIGxpa2UgdGhpcyBpcyBvcHRpbWl6aW5nIGZvciBhIHNpbXBsZXIgYW5kIG1vcmUgcGVyZm9ybWFudCBjaGVjayB0aGF0IGNvdmVycyBib3RoIG92ZXJmbG93IGFuZCBub3JtYWwgY2FzZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBsaWtlbHkgbW9yZSBjb21wbGV4IHRoYW4gbmVjZXNzYXJ5LlxuXG5PdmVyYWxsLCB0aGVzZSBsb29rIGxpa2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFpbWVkIGF0IHNpbXBsaWZ5aW5nIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVsYXRlZCB0byBudW1iZXIgcmFuZ2VzLiBJIHNob3VsZCBub3cgY2hlY2sgdGhlIHVzZXMgb2YgYGNudW1fZGVmcy5oYCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgcmlwcGxlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6MjYuNzQ2NTE1NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NjA4MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbnVtX2RlZnMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NudW0uYy02LSNkZWZpbmUgVCAzMlxcbmtlcm5lbC9icGYvY251bS5jOjc6I2luY2x1ZGUgXFxcImNudW1fZGVmcy5oXFxcIlxcbmtlcm5lbC9icGYvY251bS5jLTgtI3VuZGVmIFRcXG4tLVxcbmtlcm5lbC9icGYvY251bS5jLTEwLSNkZWZpbmUgVCA2NFxcbmtlcm5lbC9icGYvY251bS5jOjExOiNpbmNsdWRlIFxcXCJjbnVtX2RlZnMuaFxcXCJcXG5rZXJuZWwvYnBmL2NudW0uYy0xMi0jdW5kZWYgVFxcbi0tXFxua2VybmVsL2JwZi9jbnVtX2RlZnMuaC00LSNpZm5kZWYgVFxcbmtlcm5lbC9icGYvY251bV9kZWZzLmg6NTojZXJyb3IgXFxcIkRlZmluZSBUIChiaXQgd2lkdGg6IDMyLCA2NCkgYmVmb3JlIGluY2x1ZGluZyBjbnVtX2RlZnMuaFxcXCJcXG5rZXJuZWwvYnBmL2NudW1fZGVmcy5oLTYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjI5LjIzMjYwNjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUyMjQwMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBicGYvY251bSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJIHNlZSBgY251bV9kZWZzLmhgIGlzIGdldHRpbmcgaW5jbHVkZWQgd2l0aGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIFRoYXQncyBhIGNsYXNzaWMgc2V0dXAgZm9yIGRlZmluaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyAoMzItYml0IGFuZCA2NC1iaXQgaW4gdGhpcyBjYXNlKSBpbXBsZW1lbnRhdGlvbnMgb2Ygc29tZSBjcml0aWNhbCBudW1lcmljYWwgZnVuY3Rpb25zLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvY251bS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBhY3R1YWxseSAqZXhwb3J0ZWQqIGZyb20gdGhhdCBtb2R1bGUsIGFuZCBtb3JlIGNyaXRpY2FsbHksIHdoYXQgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBiZWluZyAqdXNlZCogd2l0aGluIGl0LiBJZGVudGlmeWluZyB0aGUgY2FsbCBncmFwaCBmcm9tIHRoYXQgcG9pbnQgd2lsbCBhbGxvdyBhIGNsZWFuIHZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aG9zZSBiaXQgd2lkdGhzIGFuZCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBObyBwb2ludCBnb2luZyBmdXJ0aGVyIHdpdGhvdXQgYSBzb2xpZCBtYXAgb2YgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjozMi40ODQ4NDkzNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNzQ1NTU2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbnVtMzJfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTk0PXN0YXRpYyBpbmxpbmUgczMyIHJlZ19zMzJfbWluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xOTUte1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTk2OlxcdHJldHVybiBjbnVtMzJfc21pbihyZWctXFx1MDAzZXIzMik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xOTctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xOTk9c3RhdGljIGlubGluZSBzMzIgcmVnX3MzMl9tYXgoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIwMC17XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoyMDE6XFx0cmV0dXJuIGNudW0zMl9zbWF4KHJlZy1cXHUwMDNlcjMyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIwMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTIwND1zdGF0aWMgaW5saW5lIHUzMiByZWdfdTMyX21pbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjA1LXtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjIwNjpcXHRyZXR1cm4gY251bTMyX3VtaW4ocmVnLVxcdTAwM2VyMzIpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjA3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MjA5PXN0YXRpYyBpbmxpbmUgdTMyIHJlZ191MzJfbWF4KGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTAte1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjExOlxcdHJldHVybiBjbnVtMzJfdW1heChyZWctXFx1MDAzZXIzMik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMTItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0yMTQ9c3RhdGljIGlubGluZSB2b2lkIHJlZ19zZXRfc3JhbmdlMzIoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgczMyIHNtaW4sIHMzMiBzbWF4KVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjE1LXtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjIxNjpcXHRyZWctXFx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3NyYW5nZShzbWluLCBzbWF4KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTIxNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTIxOT1zdGF0aWMgaW5saW5lIHZvaWQgcmVnX3NldF91cmFuZ2UzMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1MzIgdW1pbiwgdTMyIHVtYXgpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0yMjAte1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MjIxOlxcdHJlZy1cXHUwMDNlcjMyID0gY251bTMyX2Zyb21fdXJhbmdlKHVtaW4sIHVtYXgpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMjIyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvY251bS5oPTI4PXN0cnVjdCBjbnVtMzIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9jbnVtLmgtMzUtXFxuaW5jbHVkZS9saW51eC9jbnVtLmg6MzY6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV91cmFuZ2UodTMyIG1pbiwgdTMyIG1heCk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzc6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV9zcmFuZ2UoczMyIG1pbiwgczMyIG1heCk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzg6dTMyIGNudW0zMl91bWluKHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Mzk6dTMyIGNudW0zMl91bWF4KHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDA6czMyIGNudW0zMl9zbWluKHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDE6czMyIGNudW0zMl9zbWF4KHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDI6c3RydWN0IGNudW0zMiBjbnVtMzJfaW50ZXJzZWN0KHN0cnVjdCBjbnVtMzIgYSwgc3RydWN0IGNudW0zMiBiKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Mzp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aChzdHJ1Y3QgY251bTMyICpkc3QsIHN0cnVjdCBjbnVtMzIgc3JjKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0NDp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aF91cmFuZ2Uoc3RydWN0IGNudW0zMiAqZHN0LCB1MzIgbWluLCB1MzIgbWF4KTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0NTp2b2lkIGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2Uoc3RydWN0IGNudW0zMiAqZHN0LCBzMzIgbWluLCBzMzIgbWF4KTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Njpib29sIGNudW0zMl9jb250YWlucyhzdHJ1Y3QgY251bTMyIGNudW0sIHUzMiB2KTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo0Nzpib29sIGNudW0zMl9pc19jb25zdChzdHJ1Y3QgY251bTMyIGNudW0pO1xcbmluY2x1ZGUvbGludXgvY251bS5oOjQ4OmJvb2wgY251bTMyX2lzX2VtcHR5KHN0cnVjdCBjbnVtMzIgY251bSk7XFxuaW5jbHVkZS9saW51eC9jbnVtLmg6NDk6c3RydWN0IGNudW0zMiBjbnVtMzJfYWRkKHN0cnVjdCBjbnVtMzIgYSwgc3RydWN0IGNudW0zMiBiKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo1MDpzdHJ1Y3QgY251bTMyIGNudW0zMl9uZWdhdGUoc3RydWN0IGNudW0zMiBhKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo1MTpib29sIGNudW0zMl9pc19zdWJzZXQoc3RydWN0IGNudW0zMiBvdXRlciwgc3RydWN0IGNudW0zMiBpbm5lcik7XFxuaW5jbHVkZS9saW51eC9jbnVtLmgtNTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NudW0uaD03Nz1ib29sIGNudW02NF9pc19zdWJzZXQoc3RydWN0IGNudW02NCBvdXRlciwgc3RydWN0IGNudW02NCBpbm5lcik7XFxuaW5jbHVkZS9saW51eC9jbnVtLmgtNzgtXFxuaW5jbHVkZS9saW51eC9jbnVtLmg6Nzk6c3RydWN0IGNudW0zMiBjbnVtMzJfZnJvbV9jbnVtNjQoc3RydWN0IGNudW02NCBjbnVtKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaDo4MDpzdHJ1Y3QgY251bTY0IGNudW02NF9jbnVtMzJfaW50ZXJzZWN0KHN0cnVjdCBjbnVtNjQgYSwgc3RydWN0IGNudW0zMiBiKTtcXG5pbmNsdWRlL2xpbnV4L2NudW0uaC04MS1cXG4tLVxcbmtlcm5lbC9icGYvY251bS5jLTEzLVxcbmtlcm5lbC9icGYvY251bS5jOjE0OnN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fY251bTY0KHN0cnVjdCBjbnVtNjQgY251bSlcXG5rZXJuZWwvYnBmL2NudW0uYy0xNS17XFxuLS1cXG5rZXJuZWwvYnBmL2NudW0uYy00MC0gKi9cXG5rZXJuZWwvYnBmL2NudW0uYzo0MTpzdHJ1Y3QgY251bTY0IGNudW02NF9jbnVtMzJfaW50ZXJzZWN0KHN0cnVjdCBjbnVtNjQgYSwgc3RydWN0IGNudW0zMiBiKVxcbmtlcm5lbC9icGYvY251bS5jLTQyLXtcXG4tLVxcbmtlcm5lbC9icGYvY251bS5jLTUwLVxcbmtlcm5lbC9icGYvY251bS5jOjUxOlxcdGlmIChjbnVtNjRfaXNfZW1wdHkoYSkgfHwgY251bTMyX2lzX2VtcHR5KGIpKVxcbmtlcm5lbC9icGYvY251bS5jLTUyLVxcdFxcdHJldHVybiBDTlVNNjRfRU1QVFk7XFxua2VybmVsL2JwZi9jbnVtLmMtNTMtXFxua2VybmVsL2JwZi9jbnVtLmM6NTQ6XFx0aWYgKGNudW0zMl91cmFuZ2Vfb3ZlcmZsb3coYjEpKSB7XFxua2VybmVsL2JwZi9jbnVtLmMtNTUtXFx0XFx0YjFfbWF4ID0gKHUzMiliMS5iYXNlICsgKHUzMiliMS5zaXplOyAvKiBvdmVyZmxvdyBoZXJlIGlzIGZpbmUgYW5kIG5lY2Vzc2FyeSAqL1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0zMDI9c3RhdGljIGJvb2wgcmFuZ2Vfd2l0aGluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNS1cXHRyZXR1cm4gY251bTY0X2lzX3N1YnNldChvbGQtXFx1MDAzZXI2NCwgY3VyLVxcdTAwM2VyNjQpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzozMDY6XFx0ICAgICAgIGNudW0zMl9pc19zdWJzZXQob2xkLVxcdTAwM2VyMzIsIGN1ci1cXHUwMDNlcjMyKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMwNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5MT1zdGF0aWMgdm9pZCBfX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTQtXFx0cmVnLVxcdTAwM2VyNjQgPSBjbnVtNjRfZnJvbV91cmFuZ2UoaW1tLCBpbW0pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk1OlxcdHJlZy1cXHUwMDNlcjMyID0gY251bTMyX2Zyb21fdXJhbmdlKCh1MzIpaW1tLCAodTMyKWltbSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTYtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTE9c3RhdGljIHZvaWQgX19tYXJrX3JlZzMyX2tub3duKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIHU2NCBpbW0pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMy1cXHRyZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX2NvbnN0X3N1YnJlZyhyZWctXFx1MDAzZXZhcl9vZmYsIGltbSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTQ6XFx0cmVnLVxcdTAwM2VyMzIgPSBjbnVtMzJfZnJvbV91cmFuZ2UoKHUzMilpbW0sICh1MzIpaW1tKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxNS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk0OT1zdGF0aWMgdm9pZCByZXNldF9yZWczMl9hbmRfdG51bShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTU6c3RhdGljIHN0cnVjdCBjbnVtMzIgY251bTMyX2Zyb21fdG51bShzdHJ1Y3QgdG51bSB0bnVtKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwLVxcdFxcdC8qIG1heCBzaWduZWQgaXMgbWluKHNpZ24gYml0KSB8IG1heChvdGhlciBiaXRzKSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYxOlxcdFxcdHJldHVybiBjbnVtMzJfZnJvbV9zcmFuZ2UodG51bS52YWx1ZSB8ICh0bnVtLm1hc2sgXFx1MDAyNiBTMzJfTUlOKSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2Mi1cXHRcXHRcXHRcXHRcXHQgIHRudW0udmFsdWUgfCAodG51bS5tYXNrIFxcdTAwMjYgUzMyX01BWCkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYzLVxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NDpcXHRcXHRyZXR1cm4gY251bTMyX2Zyb21fdXJhbmdlKHRudW0udmFsdWUsICh0bnVtLnZhbHVlIHwgdG51bS5tYXNrKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjUtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Nzg9c3RhdGljIHZvaWQgX191cGRhdGVfcmVnMzJfYm91bmRzKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzkte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTgwOlxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcXHUwMDI2cmVnLVxcdTAwM2VyMzIsIGNudW0zMl9mcm9tX3RudW0ocmVnLVxcdTAwM2V2YXJfb2ZmKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODEtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMjQ9c3RhdGljIHZvaWQgZGVkdWNlX2JvdW5kc18zMl9mcm9tXzY0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDI2OlxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aChcXHUwMDI2cmVnLVxcdTAwM2VyMzIsIGNudW0zMl9mcm9tX2NudW02NChyZWctXFx1MDAzZXI2NCkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDI3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDI5PXN0YXRpYyB2b2lkIGRlZHVjZV9ib3VuZHNfNjRfZnJvbV8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMTpcXHRyZWctXFx1MDAzZXI2NCA9IGNudW02NF9jbnVtMzJfaW50ZXJzZWN0KHJlZy1cXHUwMDNlcjY0LCByZWctXFx1MDAzZXIzMik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODI9c3RhdGljIGJvb2wgY29uc3RfdG51bV9yYW5nZV9taXNtYXRjaF8zMihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODc6XFx0cmV0dXJuICFjbnVtMzJfaXNfY29uc3QocmVnLVxcdTAwM2VyMzIpIHx8IHJlZy1cXHUwMDNlcjMyLmJhc2UgIT0gdG51bV9zdWJyZWcocmVnLVxcdTAwM2V2YXJfb2ZmKS52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4OC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5MD1zdGF0aWMgYm9vbCByYW5nZV9ib3VuZHNfdmlvbGF0aW9uKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTEte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDkyOlxcdHJldHVybiBjbnVtMzJfaXNfZW1wdHkocmVnLVxcdTAwM2VyMzIpIHx8IGNudW02NF9pc19lbXB0eShyZWctXFx1MDAzZXI2NCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTMtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU0ODk9c3RhdGljIHZvaWQgY29lcmNlX3JlZ190b19zaXplX3N4KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU1MDYtXFx0XFx0cmVnLVxcdTAwM2VyNjQgPSBjbnVtNjRfZnJvbV91cmFuZ2UodTY0X2N2YWwsIHU2NF9jdmFsKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTUwNzpcXHRcXHRyZWctXFx1MDAzZXIzMiA9IGNudW0zMl9mcm9tX3VyYW5nZSgodTMyKXU2NF9jdmFsLCAodTMyKXU2NF9jdmFsKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTUwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM5MTY9c3RhdGljIHZvaWQgc2NhbGFyMzJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MTgte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkxOTpcXHRkc3RfcmVnLVxcdTAwM2VyMzIgPSBjbnVtMzJfYWRkKGRzdF9yZWctXFx1MDAzZXIzMiwgc3JjX3JlZy1cXHUwMDNlcjMyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MjAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzOTI4PXN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfc3ViKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTMwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5MzE6XFx0ZHN0X3JlZy1cXHUwMDNlcjMyID0gY251bTMyX2FkZChkc3RfcmVnLVxcdTAwM2VyMzIsIGNudW0zMl9uZWdhdGUoc3JjX3JlZy1cXHUwMDNlcjMyKSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTMyLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzk0MD1zdGF0aWMgdm9pZCBzY2FsYXIzMl9taW5fbWF4X211bChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzk2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM5Njc6XFx0ZHN0X3JlZy1cXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChjbnVtMzJfZnJvbV91cmFuZ2UodW1pbiwgdW1heCksXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzOTY4OlxcdFxcdFxcdFxcdFxcdGNudW0zMl9mcm9tX3NyYW5nZShzbWluLCBzbWF4KSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTY5LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU3MD1zdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTU5MS1cXHRcXHRpZiAoaXNfam1wMzIpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU1OTI6XFx0XFx0XFx0cmVnMS1cXHUwMDNlcjMyID0gY251bTMyX2ludGVyc2VjdChyZWcxLVxcdTAwM2VyMzIsIHJlZzItXFx1MDAzZXIzMik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NTkzLVxcdFxcdFxcdHJlZzItXFx1MDAzZXIzMiA9IHJlZzEtXFx1MDAzZXIzMjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTYxNy1cXHRcXHRcXHQvKiBDb21wbGVtZW50IG9mIHRoZSByYW5nZSBbdmFsLCB2YWxdIGFzIGNudW0zMi4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2MTg6XFx0XFx0XFx0Y251bTMyX2ludGVyc2VjdF93aXRoKFxcdTAwMjZyZWcxLVxcdTAwM2VyMzIsIChzdHJ1Y3QgY251bTMyKXsgdmFsICsgMSwgVTMyX01BWCAtIDEgfSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NjE5LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2NjctXFx0XFx0aWYgKGlzX2ptcDMyKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NjY4OlxcdFxcdFxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF91cmFuZ2UoXFx1MDAyNnJlZzEtXFx1MDAzZXIzMiwgMCwgcmVnX3UzMl9tYXgocmVnMikpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY2OTpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ191MzJfbWluKHJlZzEpLCBVMzJfTUFYKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2NzAtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY3Ni1cXHRcXHRpZiAoaXNfam1wMzIpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2Nzc6XFx0XFx0XFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3VyYW5nZShcXHUwMDI2cmVnMS1cXHUwMDNlcjMyLCAwLCByZWdfdTMyX21heChyZWcyKSAtIDEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY3ODpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfdXJhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ191MzJfbWluKHJlZzEpICsgMSwgVTMyX01BWCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njc5LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODUtXFx0XFx0aWYgKGlzX2ptcDMyKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Njg2OlxcdFxcdFxcdGNudW0zMl9pbnRlcnNlY3Rfd2l0aF9zcmFuZ2UoXFx1MDAyNnJlZzEtXFx1MDAzZXIzMiwgUzMyX01JTiwgcmVnX3MzMl9tYXgocmVnMikpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY4NzpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ19zMzJfbWluKHJlZzEpLCBTMzJfTUFYKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU2ODgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTY5NC1cXHRcXHRpZiAoaXNfam1wMzIpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU2OTU6XFx0XFx0XFx0Y251bTMyX2ludGVyc2VjdF93aXRoX3NyYW5nZShcXHUwMDI2cmVnMS1cXHUwMDNlcjMyLCBTMzJfTUlOLCByZWdfczMyX21heChyZWcyKSAtIDEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTY5NjpcXHRcXHRcXHRjbnVtMzJfaW50ZXJzZWN0X3dpdGhfc3JhbmdlKFxcdTAwMjZyZWcyLVxcdTAwM2VyMzIsIHJlZ19zMzJfbWluKHJlZzEpICsgMSwgUzMyX01BWCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Njk3LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjM0LjI5MjMwOTgyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mzk4OTgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQ2hhbmdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9jbnVtX2RlZnMuaGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgZmlsZSdzIGluY2x1c2lvbiBpbiBga2VybmVsL2JwZi9jbnVtLmNgLiBUaGUgYGNudW0zMl8qYCBhbmQgYGNudW02NF8qYCBmdW5jdGlvbnMgZGVmaW5lZCB0aGVyZSBhcmUgY3JpdGljYWw7IHRoZSB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB1c2VzIHRoZW0gZXh0ZW5zaXZlbHkuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGF0IHRoZSBoZWFydCBvZiBob3cgdGhlIEJQRiB2ZXJpZmllciB0cmFja3MgcmVnaXN0ZXIgYm91bmRzIOKAkyB0aGUgbWluL21heCB2YWx1ZXMgaXQgdXNlcyB0byBlbnN1cmUgcHJvZ3JhbXMgYXJlIHNhZmUuIENoYW5naW5nIHRoaXMgKmRlZmluaXRlbHkqIG1lYW5zIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhhdCBtZWFucyBmdXp6aW5nIGlzIGNydWNpYWwuIFdlJ3JlIGxvb2tpbmcgYXQgY29yZSB2YWx1ZSB0cmFja2luZyBsb2dpYy5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29yZSBib3VuZCBmdW5jdGlvbnMgYW5kIHRoZSBCUEYgdmVyaWZpZXIncyByZWxpYW5jZSBvbiB0aGVzZSB2YWx1ZXMsIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGFyZSBsaWtlbHkgdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgdGhlbXNlbHZlcywgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqZGlyZWN0bHkqIHVzaW5nIHRoZXNlIGJvdW5kcy4gSSdsbCBuZWVkIHRvIGdvIHRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCB0YWtlIGEgbG9vayBmb3IgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NjozOC43MzIyMTE2NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjgzMTcxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NTMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTEyOD1yZXVzZXMgdGhlIGV4aXN0aW5nIGBgZmRfYXJyYXlgYDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNC0gICBzZXQgc28gdGhlIGtlcm5lbCBrbm93cyB0aGUgYXJyYXkncyBsZW5ndGguXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q6MTM1OiMuIFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gcnVucyBpbnNpZGUgdGhlIHZlcmlmaWVyIChgYGJwZl9jaGVjaygpYGApLCBvbmNlIGl0XFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMTM2LSAgIGhhcyByZXNvbHZlZCB0aGUgYGBmZF9hcnJheWBgIGVudHJpZXMgaW50byB0aGUgcHJvZ3JhbSdzIGBgdXNlZF9tYXBzYGAuIFRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q9MjMwPVRoaXMgaG9vayBnYXRlcyBhZG1pc3Npb24gKipmb3IgZXZlcnkgbG9hZCoqLCBmcm9tIGEgc2luZ2xlIGNhbGwgc2l0ZSBpbnNpZGUgdGhlXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3Q6MjMxOnZlcmlmaWVyIChgYGJwZl9jaGVjaygpYGApLCBiZWZvcmUgdGhlIG1haW4gdmVyaWZpY2F0aW9uIHdvcmsuIEl0IHJ1bnMgYWZ0ZXIgdGhlXFxuRG9jdW1lbnRhdGlvbi9icGYvc2lnbmluZy5yc3QtMjMyLW9wdGlvbmFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIHNvIHRoZSB2ZXJkaWN0IGFuZCBrZXlyaW5nIGZpZWxkcyBhcmUgZmluYWwgLSB0aGVcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0PTY0Nz1nb3QgZnJvbSBicGZfcHJvZ19jcmVhdGUoKSwgYW5kICdjdHgnIHRoZSBnaXZlbiBjb250ZXh0IChlLmcuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci5yc3Q6NjQ4OnNrYiBwb2ludGVyKS4gQWxsIGNvbnN0cmFpbnRzIGFuZCByZXN0cmljdGlvbnMgZnJvbSBicGZfY2hlY2tfY2xhc3NpYygpIGFwcGx5XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci5yc3QtNjQ5LWJlZm9yZSBhIGNvbnZlcnNpb24gdG8gdGhlIG5ldyBsYXlvdXQgaXMgYmVpbmcgZG9uZSBiZWhpbmQgdGhlIHNjZW5lcyFcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTY9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yNi1cXHRhZGRcXHR4MCwgeDksIHgyNVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjI3OlxcdGJsXFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjgtXFx0LyogQlBGX1JFR19BWCh4OSkgd2lsbCBiZSBzdG9yZWQgaW50byBjb3VudCwgc28gbW92ZSByZXR1cm4gdmFsdWUgdG8gaXQuICovXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNDogKiBDYWxsIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggbm9ybWFsIHBvd2VycGM2NCBBQkk6XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xNS0gKiBcXHQtIHIzID0gcHRyLCByZXR1cm4gaW4gcjNcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MjA9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM4LVxcdGFkZCAgICAgcjMsIHIzMSwgcjEyXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozOTpcXHRibCAgICAgIGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDAtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMS0gKlxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjEyOiAqIENhbGxzIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggdGhlIHN0YW5kYXJkIFJJU0MtViBBQkksIHdoZXJlXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTMtICogcHRyID0gQlBGX1JFR19GUCAoczUpICsgQlBGX1JFR19BWCAodDApLiBCUEYgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz0xNz1TWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMxLVxcdGFkZFxcdGEwLCB0MCwgczVcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozMjpcXHRjYWxsXFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzMtXFx0bXZcXHR0MCwgYTBcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MjI9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM2LVxcdGxheSAlcjIsMCglcjEyLCVyMTMpXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzozNzpcXHRicmFzbCAlcjE0LGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzgtXFx0bGdyICVyMTIsJXIyXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MTE9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXFx0Q0FMTF9ERVBUSF9BQ0NPVU5UXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQwOlxcdGNhbGwgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jPTE4MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jOjE4MjpuZnBfYnBmX2NoZWNrX210dShzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmMtMTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYz01MjE9Y29uc3Qgc3RydWN0IG5mcF9hcHBfdHlwZSBhcHBfYnBmID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTUzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM6NTMxOlxcdC5jaGVja19tdHVcXHQ9IG5mcF9icGZfY2hlY2tfbXR1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYy01MzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTE2OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzoxNzA6bmZwX2JwZl9jaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtMTcxLVxcdFxcdFxcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9MzEwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjMxMTpuZnBfYnBmX2NoZWNrX2V4aXQoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTMxMi1cXHRcXHQgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0zNDI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6MzQzOm5mcF9icGZfY2hlY2tfc3RhY2tfYWNjZXNzKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zNDQtXFx0XFx0XFx0ICAgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTQ1MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo0NTE6bmZwX2JwZl9jaGVja19wdHIoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NTItXFx0XFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCByZWdfbm8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTQ2NS1cXHRpZiAocmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NDY2OlxcdFxcdGVyciA9IG5mcF9icGZfY2hlY2tfc3RhY2tfYWNjZXNzKG5mcF9wcm9nLCBtZXRhLCByZWcsIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjctXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTAxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUwMjpuZnBfYnBmX2NoZWNrX3N0b3JlKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTAzLVxcdFxcdCAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjEtZXhpdF9jaGVja19wdHI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MjI6XFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfcHRyKG5mcF9wcm9nLCBtZXRhLCBlbnYsIG1ldGEtXFx1MDAzZWluc24uZHN0X3JlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01MjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz01MjU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTI2Om5mcF9icGZfY2hlY2tfYXRvbWljKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTI3LVxcdFxcdCAgICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTUyOlxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVxcdTAwM2VpbnNuLmRzdF9yZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTUzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTU1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjU1NjpuZnBfYnBmX2NoZWNrX2FsdShzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLCBzdHJ1Y3QgbmZwX2luc25fbWV0YSAqbWV0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTU1Ny1cXHRcXHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTYzMT1pbnQgbmZwX3ZlcmlmeV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjUyLVxcdGlmIChpc19tYnBmX2hlbHBlcl9jYWxsKG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjUzOlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX2hlbHBlcl9jYWxsKG5mcF9wcm9nLCBlbnYsIG1ldGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU0LVxcdGlmIChtZXRhLVxcdTAwM2VpbnNuLmNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfRVhJVCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NTU6XFx0XFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfZXhpdChuZnBfcHJvZywgZW52KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Ny1cXHRpZiAoaXNfbWJwZl9sb2FkKG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjU4OlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjU5LVxcdFxcdFxcdFxcdFxcdCBtZXRhLVxcdTAwM2VpbnNuLnNyY19yZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjYwLVxcdGlmIChpc19tYnBmX3N0b3JlKG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjYxOlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3N0b3JlKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjYzLVxcdGlmIChpc19tYnBmX2F0b21pYyhtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY2NDpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19hdG9taWMobmZwX3Byb2csIG1ldGEsIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjYtXFx0aWYgKGlzX21icGZfYWx1KG1ldGEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjY3OlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX2FsdShuZnBfcHJvZywgbWV0YSwgZW52KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTMyLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzMzppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzQtXFx0XFx0XFx0XFx0ICAgICAgc2hvcnQgYWNjZXNzLCBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTgwPXN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjAtXFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfREVWSUNFKSlcXHRcXHRcXHQgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MzYxOlxcdFxcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKGF0eXBlLCBtYWpvciwgbWlub3IsIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0zNjItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBhY2Nlc3MsXFx0ICAgICAgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMDQ5PWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1MDppbnQgYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKGJwZnB0cl90IHVhZGRyLCBzaXplX3QgZXhwZWN0ZWRfc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTEtXFx0XFx0XFx0ICAgICBzaXplX3QgYWN0dWFsX3NpemUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMDU0PXN0cnVjdCBicGZfbG9nX2F0dHI7XFxuaW5jbHVkZS9saW51eC9icGYuaDozMDU1OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqZnAsIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwNTYtXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD05MDE9c3RydWN0IGJwZl9mZF9hcnJheSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTkwOS0vKiBzaW5nbGUgY29udGFpbmVyIGZvciBhbGwgc3RydWN0c1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTEwOiAqIG9uZSB2ZXJpZmllcl9lbnYgcGVyIGJwZl9jaGVjaygpIGNhbGxcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTkxMS0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleSh1NjQga2V5LCB1MzIgKm9ial9pZCwgdTMyICpidGZfaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExNzktXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTgwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExODEtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4MjppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgzLVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4NC1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODU6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTg2LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE0Mzg9aW50IGJwZl9wcnVuZV9kZWFkX2JyYW5jaGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTQzOTppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE0NDAtaW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTY0MD1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQzLS8qIEZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIHZlcmlmaWVyLmMsIHVzZWQgYnkgdHJhbXBvbGluZS5jICovXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjQ0OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY0Ni1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NDc6LyogRnVuY3Rpb25zIGluIGZpeHVwcy5jLCBjYWxsZWQgZnJvbSBicGZfY2hlY2soKSAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY0OC1pbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTExOTY9dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTE5Nzp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKik7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMTk4LWJvb2wgYnBmX2hlbHBlcl9jaGFuZ2VzX3BrdF9kYXRhKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD03MTc9c3RhdGljIGlubGluZSBib29sIGNvb2tpZV9icGZfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMS1cXG5pbmNsdWRlL25ldC90Y3AuaDo3MjI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTcyMy0jZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oPTcyND1zdGF0aWMgaW5saW5lIGJvb2wgY29va2llX2JwZl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzI4LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjcyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNzMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUyMjItICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTIyMzogKiBsb25nIGJwZl9jaGVja19tdHUodm9pZCAqY3R4LCB1MzIgaWZpbmRleCwgdTMyICptdHVfbGVuLCBzMzIgbGVuX2RpZmYsIHU2NCBmbGFncylcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTIyNC0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzQ4NT1zdHJ1Y3QgYnBmX3JlZGlyX25laWdoIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk0LVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NDk1Oi8qIGJwZl9jaGVja19tdHUgZmxhZ3MqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NDk2OmVudW0gIGJwZl9jaGVja19tdHVfZmxhZ3Mge1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk3LVxcdEJQRl9NVFVfQ0hLX1NFR1MgID0gKDFVIFxcdTAwM2NcXHUwMDNjIDApLFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc0OTktXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc1MDA6ZW51bSBicGZfY2hlY2tfbXR1X3JldCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc1MDEtXFx0QlBGX01UVV9DSEtfUkVUX1NVQ0NFU1MsICAgICAgLyogY2hlY2sgYW5kIGxvb2t1cCBzdWNjZXNzZnVsICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTA0PWludCBicGZfaXRlcl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVxcdGlmICghYnBmcHRyX2lzX251bGwodWxpbmZvKSkge1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MjY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgc2l6ZW9mKGxpbmZvKSxcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5mb19sZW4pO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMjctXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcXHRcXHQvKiBDaGVja2VkIGJ5IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0ICovXFxua2VybmVsL2JwZi9idGYuYy03MDI5LVxcdFxcdHRuYW1lICs9IHNpemVvZihcXFwiYnRmX3RyYWNlX1xcXCIpIC0gMTtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDI2PXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTYxLSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NTYyOmludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy01NjMte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzY4PUVYUE9SVF9TWU1CT0woX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc2OS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3NzA6aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzcxLVxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zMT1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTcwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZnVuY3M7IGkrKykge1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NzE6XFx0XFx0cmV0ID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVyZWNvcmQsIGtyZWNfc2l6ZSwgdXJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTcyLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjUzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9saW5mbzsgaSsrKSB7XFxua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzQxPXN0YXRpYyBpbnQgY2hlY2tfY29yZV9yZWxvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cXHRcXHQvKiBmdXR1cmUgcHJvb2Zpbmcgd2hlbiBzaXplb2YoYnBmX2NvcmVfcmVsbykgY2hhbmdlcyAqL1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDA5LVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDEwOmludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE2LSAqIEFuZGkgS2xlZW4gLSBGaXggYSBmZXcgYmFkIGJ1Z3MgYW5kIHJhY2VzLlxcbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxcbmtlcm5lbC9icGYvY29yZS5jLTE4LSAqL1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg2LVxcbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXFxua2VybmVsL2JwZi9jb3JlLmMtMjU4OC17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NDMtXFx0XFx0LypcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjQ0OlxcdFxcdCAqIElmIGVudiBpcyBub3QgTlVMTCwgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBlbmQgb2YgYnBmX2NoZWNrKCksIGF0IHRoaXNcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ1LVxcdFxcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzI2LVxcdCAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjI3Mjc6XFx0KmVyciA9IGJwZl9jaGVja190YWlsX2NhbGwoZnApO1xcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDAwPXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MTUtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQxNjp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKnApXFxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTAtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cXHRcXHRcXHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkwNj1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMTctXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTE4OlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYyMD1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTItXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc1MzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODU9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUwOTktXFx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxMDA6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwMS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3NT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg1LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTM4NjpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzg3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDQ2PXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NTQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1NTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoKnVpbmZvKSwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NTYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NjI9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzItXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ3MzpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDc0LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTA1PXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTEzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1MTQ6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MjkwPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYyOTgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjI5OTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHIsIHNpemVvZihhdHRyKSwgc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMwMC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMC1cXHRpZiAoY21kIFxcdTAwMjYgQlBGX0NPTU1PTl9BVFRSUykge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMTE6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyX2NvbW1vbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzEyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyLCBsb2dfdHJ1ZV9zaXplKSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA5Ni1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3OlxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA5OC1cXHRcXHRcXHRcXHQgICAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYzNjpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTk6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk2ND1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc1LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzY6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Ny0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg5OTU9YnRmX2F0dGFjaF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGZ1bmNfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMjktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDMwOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTAzMS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NDM1PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDY1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQ2NjpcXHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDY3LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTM1OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1MzYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjA9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTM0LS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTM1OiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNi0gKiBvbmNlIHRoZSBwcm9ncmFtJ3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5NDM9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNTktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDYwOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA2MS1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3NC1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwNzU6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE2Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxNjg6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE2OS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxODA6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE4MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAxOTQ6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmM9MjQ0PXN0YXRpYyB2b2lkIHBvcHVsYXRlX3NlY2NvbXBfZGF0YShzdHJ1Y3Qgc2VjY29tcF9kYXRhICpzZClcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmMtMjcwLSAqXFxua2VybmVsL3NlY2NvbXAuYzoyNzE6ICogVGFrZXMgYSBwcmV2aW91c2x5IGNoZWNrZWQgZmlsdGVyIChieSBicGZfY2hlY2tfY2xhc3NpYykgYW5kXFxua2VybmVsL3NlY2NvbXAuYy0yNzItICogcmVkaXJlY3RzIGFsbCBmaWx0ZXIgY29kZSB0aGF0IGxvYWRzIHN0cnVjdCBza19idWZmIGRhdGFcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz04NTQ9c3RhdGljIHZvaWQgKmJwZl9jdHhfaW5pdChjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsIHUzMiBtYXhfc2l6ZSlcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04NjktXFx0aWYgKGRhdGFfaW4pIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6ODcwOlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUihkYXRhX2luKSwgbWF4X3NpemUsIHNpemUpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy04NzEtXFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXFxubmV0L2NvcmUvZmlsdGVyLmM6MTc6ICogS3JpcyBLYXR0ZXJqb2huIC0gQWRkZWQgbWFueSBhZGRpdGlvbmFsIGNoZWNrcyBpbiBicGZfY2hlY2tfY2xhc3NpYygpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTgtICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05ODc9c3RhdGljIGJvb2wgY2hrX2NvZGVfYWxsb3dlZCh1MTYgY29kZV90b19wcm9iZSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTA1MzpzdGF0aWMgYm9vbCBicGZfY2hlY2tfYmFzaWNzX29rKGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDY0LS8qKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNjU6ICpcXHRicGZfY2hlY2tfY2xhc3NpYyAtIHZlcmlmeSBzb2NrZXQgZmlsdGVyIGNvZGVcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDY2LSAqXFx0QGZpbHRlcjogZmlsdGVyIHRvIHZlcmlmeVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA3Ny0gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMDc4OnN0YXRpYyBpbnQgYnBmX2NoZWNrX2NsYXNzaWMoY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA3OS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTMzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJlcGFyZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEzNDItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTM0MzpcXHRlcnIgPSBicGZfY2hlY2tfY2xhc3NpYyhmcC1cXHUwMDNlaW5zbnMsIGZwLVxcdTAwM2VsZW4pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEzNDQtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTM4ND1pbnQgYnBmX3Byb2dfY3JlYXRlKHN0cnVjdCBicGZfcHJvZyAqKnBmcCwgc3RydWN0IHNvY2tfZnByb2dfa2VybiAqZnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMzg5LVxcdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMzkwOlxcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cXHUwMDNlZmlsdGVyLCBmcHJvZy1cXHUwMDNlbGVuKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMzkxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTQyOT1pbnQgYnBmX3Byb2dfY3JlYXRlX2Zyb21fdXNlcihzdHJ1Y3QgYnBmX3Byb2cgKipwZnAsIHN0cnVjdCBzb2NrX2Zwcm9nICpmcHJvZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzYtXFx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjE0Mzc6XFx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVxcdTAwM2VmaWx0ZXIsIGZwcm9nLVxcdTAwM2VsZW4pKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE0MzgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNTA1PXN0cnVjdCBicGZfcHJvZyAqX19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nICpmcHJvZywgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNC1cXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTUxNTpcXHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXFx1MDAzZWZpbHRlciwgZnByb2ctXFx1MDAzZWxlbikpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTUxNi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0yNjM9c3RhdGljIGludCBjb29raWVfdGNwX3JlcXNrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMDI6c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX2JwZl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMwMy17XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9NDA1PXN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTQyNS1cXHRpZiAoY29va2llX2JwZl9vayhza2IpKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjQyNjpcXHRcXHRyZXEgPSBjb29raWVfYnBmX2NoZWNrKHNrLCBza2IpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02Mzg9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTctXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1ODpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OS17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzIzPWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1MzpcXHRcXHR0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQocHNvY2stXFx1MDAzZXNrX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU0LVxcdH1cXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYz0xMzU9c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDMtXFxubmV0L2lwdjQvdWRwX2JwZi5jOjE0NDpzdGF0aWMgdm9pZCB1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXFxubmV0L2lwdjQvdWRwX2JwZi5jLTE0NS17XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTYzPWludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNzMtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxubmV0L2lwdjQvdWRwX2JwZi5jOjE3NDpcXHRcXHR1ZHBfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQocHNvY2stXFx1MDAzZXNrX3Byb3RvKTtcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc1LVxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jPTE3ND1zdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xOTItXFx0aWYgKGNvb2tpZV9icGZfb2soc2tiKSkge1xcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxOTM6XFx0XFx0cmVxID0gY29va2llX2JwZl9jaGVjayhzaywgc2tiKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NDAuMzk5MDQ5NTIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwOTg0MzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllcidzIEFyaXRobWV0aWMgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiB2ZXJpZmllciBjb2RlIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaG93IHRoZXNlIGNoYW5nZXMgdG8gdGhlIGBjbnVtMzJfKmAgZnVuY3Rpb25zIGltcGFjdCB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBlbnRyeSBwb2ludCwgb2YgY291cnNlLCBpcyBgYnBmX2NoZWNrYCwgYnV0IEkgd2FudCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcuIExvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0b3VjaGVzIGBjbnVtMzJfc21pbmAsIGBjbnVtMzJfc21heGAsIGBjbnVtMzJfbm9ybWFsaXplYCwgYW5kIGBjbnVtMzJfY29udGFpbnNgLlxuXG5UaGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsLCB1c2VkIGV4dGVuc2l2ZWx5IHdpdGhpbiBgdmVyaWZpZXIuY2AgYnkgZnVuY3Rpb25zIGxpa2UgYGNudW0zMl9pbnRlcnNlY3RgLCBgY251bTMyX2ludGVyc2VjdF93aXRoYCwgYGNudW0zMl9hZGRgLCBgY251bTMyX25lZ2F0ZWAsIGBjbnVtMzJfZnJvbV91cmFuZ2VgLCBgY251bTMyX2Zyb21fc3JhbmdlYCwgYW5kIHNvIG9uLiBUaGF0IGFsb25lIGdpdmVzIG1lIGEgZ29vZCBpZGVhIG9mIHRoZWlyIGltcG9ydGFuY2UuXG5cbkRpZ2dpbmcgZGVlcGVyLCBJIGNhbiBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGluIHRoZSB2ZXJpZmllciB0aGF0IHJlbHkgb24gdGhlc2UgdXBkYXRlZCBgY251bTMyXypgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlOiBgc2NhbGFyMzJfbWluX21heF9hZGRgLCBgc2NhbGFyMzJfbWluX21heF9zdWJgLCBgc2NhbGFyMzJfbWluX21heF9tdWxgLCBgcmVnc19yZWZpbmVfY29uZF9vcGAsIGBkZWR1Y2VfYm91bmRzXzMyX2Zyb21fNjRgLCBgZGVkdWNlX2JvdW5kc182NF9mcm9tXzMyYCwgYF9fdXBkYXRlX3JlZzMyX2JvdW5kc2AsIGFuZCBgcmFuZ2VfYm91bmRzX3Zpb2xhdGlvbmAuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGhvdyB0aGVzZSBrZXkgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgIGFuZCBgc2NhbGFyMzJfbWluX21heF9hZGRgLCB1c2UgdGhlIG1vZGlmaWVkIGBjbnVtMzJfKmAgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHNjb3BlIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0Njo0Ni4wMDg4OTU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzMDI1Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ3NfcmVmaW5lX2NvbmRfb3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE1MTU5PXN0YXRpYyB2b2lkIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MjM1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTIzNjpzdGF0aWMgdm9pZCByZWdzX3JlZmluZV9jb25kX29wKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyMzctXFx0XFx0XFx0XFx0dTggb3Bjb2RlLCBib29sIGlzX2ptcDMyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyMzg9c3RhdGljIHU4IHJldl9vcGNvZGUodTggb3Bjb2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI0MS0gKiBMZWFybiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxpdmUgYnJhbmNoZXMgYnkgc2ltdWxhdGluZyByZWZpbmVtZW50IG9uIGJvdGggYnJhbmNoZXMuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjQyOiAqIHJlZ3NfcmVmaW5lX2NvbmRfb3AoKSBpcyBzb3VuZCwgc28gcHJvZHVjaW5nIGlsbC1mb3JtZWQgcmVnaXN0ZXIgYm91bmRzIGZvciB0aGUgYnJhbmNoIG1lYW5zXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MjQzLSAqIHRoYXQgYnJhbmNoIGlzIGRlYWQuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTUyNDU9c3RhdGljIGludCBzaW11bGF0ZV9ib3RoX2JyYW5jaGVzX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI0Ny1cXHQvKiBGYWxsdGhyb3VnaCAoRkFMU0UpIGJyYW5jaCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTI0ODpcXHRyZWdzX3JlZmluZV9jb25kX29wKFxcdTAwMjZlbnYtXFx1MDAzZWZhbHNlX3JlZzEsIFxcdTAwMjZlbnYtXFx1MDAzZWZhbHNlX3JlZzIsIHJldl9vcGNvZGUob3Bjb2RlKSwgaXNfam1wMzIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI0OS1cXHRyZWdfYm91bmRzX3N5bmMoXFx1MDAyNmVudi1cXHUwMDNlZmFsc2VfcmVnMSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUyNTktXFx0LyogSnVtcCAoVFJVRSkgYnJhbmNoICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MjYwOlxcdHJlZ3NfcmVmaW5lX2NvbmRfb3AoXFx1MDAyNmVudi1cXHUwMDNldHJ1ZV9yZWcxLCBcXHUwMDI2ZW52LVxcdTAwM2V0cnVlX3JlZzIsIG9wY29kZSwgaXNfam1wMzIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTI2MS1cXHRyZWdfYm91bmRzX3N5bmMoXFx1MDAyNmVudi1cXHUwMDNldHJ1ZV9yZWcxKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTU0Nz1zdGF0aWMgdTggcmV2X29wY29kZSh1OCBvcGNvZGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU1NjktLyogUmVmaW5lIHJhbmdlIGtub3dsZWRnZSBmb3IgXFx1MDAzY3JlZzFcXHUwMDNlIFxcdTAwM2NvcFxcdTAwM2UgXFx1MDAzY3JlZ1xcdTAwM2UyIGNvbmRpdGlvbmFsIG9wZXJhdGlvbi4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU1NzA6c3RhdGljIHZvaWQgcmVnc19yZWZpbmVfY29uZF9vcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMSwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NTcxLVxcdFxcdFxcdFxcdHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NDcuOTExOTI3MjA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYzNTI5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3M6XG5cbioqUmVmaW5pbmcgT3B0aW1pemF0aW9uIFRhcmdldHMqKlxuXG5BbHJpZ2h0LCAqYHJlZ3NfcmVmaW5lX2NvbmRfb3BgKiBpcyBkZWZpbml0ZWx5IGEgc29saWQgY29udGVuZGVyIGZvciBvcHRpbWl6YXRpb24uIEkndmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhhdCBhcmVhIGZvciBhIHdoaWxlIG5vdy4gVGhlIHBvdGVudGlhbCBnYWlucyB0aGVyZSBhcmUgc2lnbmlmaWNhbnQsIGFuZCBJIGhhdmUgYSBmZXcgc3BlY2lmaWMgaWRlYXMgSSd2ZSBiZWVuIG11bGxpbmcgb3ZlciByZWdhcmRpbmcgaG93IHRvIGltcHJvdmUgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gcHJvY2VzcyBpbiB0aGF0IGNvbnRleHQuIEl0J3MgYSBrZXkgcGllY2UgZm9yIGltcHJvdmluZyBvdmVyYWxsIGNvZGUgZ2VuZXJhdGlvbiBxdWFsaXR5LCBzbyBpdCdzIHdvcnRoIHRoZSBmb2N1cy5cblxuQnV0Li4ud2hhdCBhYm91dCAqYHNjYWxhcjMyX21pbl9tYXhfYWRkYCo/IFRoYXQgZnVuY3Rpb24ncyBiZWVuIG9uIG15IHJhZGFyIHRvby4gSSB3b25kZXIgaWYgdGhlcmUncyBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBjbGV2ZXIgcGVlcGhvbGUgb3B0aW1pemF0aW9uIG9yIGEgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgdXNhZ2UgcGF0dGVybnMgdGhlcmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBzaW1wbGlmeSBvciBhdm9pZCBzb21lIHVubmVjZXNzYXJ5IG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaG93IGZyZXF1ZW50bHkgdGhvc2UgdHlwZXMgb2YgY2FsY3VsYXRpb25zIHBvcCB1cCBpbiBteSB0YXJnZXQgYXBwbGljYXRpb25zLiBNaWdodCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHNlZSBob3cgaXQgYmVuY2htYXJrcy4gSXQgbWlnaHQgbm90IGJlIGFzIHN0cmF0ZWdpY2FsbHkgY3JpdGljYWwgYXMgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgLCBidXQgc21hbGwgaW1wcm92ZW1lbnRzIHRoZXJlIGNhbiBhY2N1bXVsYXRlIGludG8gc3Vic3RhbnRpYWwgZ2FpbnMgYWNyb3NzIHRoZSBib2FyZC4gVGltZSB0byBjb21wYXJlIHRoZSB0d28gYW5kIGRlY2lkZSB3aGljaCB3b3VsZCBiZSBtb3JlIHdvcnRod2hpbGUgdG8gZm9jdXMgb24gZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTY0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NTEuNDA4Mjg0MzYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NDI3OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjYWxhcjMyX21pbl9tYXhfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTU9c3RhdGljIGNvbnN0IGNoYXIgKm5vbl9zbGVlcGFibGVfY29udGV4dF9kZXNjcmlwdGlvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjE2OnN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxNy1zdGF0aWMgdm9pZCBzY2FsYXJfbWluX21heF9hZGQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTA2PXN0YXRpYyB2b2lkIGFkZF9zY2FsYXJfdG9fcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzNjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYxMTY6XFx0c2NhbGFyMzJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNmZha2VfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjExNy1cXHRzY2FsYXJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNmZha2VfcmVnKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzcxOD1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzOTE2OnN0YXRpYyB2b2lkIHNjYWxhcjMyX21pbl9tYXhfYWRkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzkxNy1cXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyY19yZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2NDQ9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjgwLVxcdGNhc2UgQlBGX0FERDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2ODE6XFx0XFx0c2NhbGFyMzJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNnNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDY4Mi1cXHRcXHRzY2FsYXJfbWluX21heF9hZGQoZHN0X3JlZywgXFx1MDAyNnNyY19yZWcpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1OTM4PXN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTgzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk4NDpcXHRcXHRcXHRzY2FsYXIzMl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVxcdFxcdFxcdHNjYWxhcl9taW5fbWF4X2FkZChyZWcsIFxcdTAwMjZmYWtlX3JlZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ2OjUzLjA4MzcyMjIyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE5MjgyNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgYXNzZXNzbWVudCBoZXJlIGlzIHRoYXQgYGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYW5hbHlzaXMsIGFuZCBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIGlzIGFsc28gYSBsaWtlbHkgY2FuZGlkYXRlLiBIb3dldmVyLCB0aGUgYmlnIGZpc2ggSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiBpcyBgYnBmX2NoZWNrYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBBaCwgcmlnaHQuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYWx3YXlzIGVuYWJsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5nczsgSSBkb24ndCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBUaGF0IG1lYW5zIEkgY2FuIGFzc3VtZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyB0aGVyZS4gR29vZCwgdGhhdCdzIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aG9zZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0Njo1Ni42MDMwMDkwMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODE5NTE2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDY6NTkuMDg0OTY1MTc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDMxNTQzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkJQRiBWZXJpZmljYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBCUEYgc3lzY2FsbHMuIFRoZSBiaWcgb25lIHRvIGtlZXAgYW4gZXllIG9uLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE5vdywgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBrZXkgdG8gZW5zdXJpbmcgQlBGJ3Mgc2FmZXR5IGFuZCBpbnRlZ3JpdHkgbGllcyBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IGJ5IGRpdmluZyBpbnRvIHRoZSBgYnBmX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIExldCdzIHNlZSB3aGF0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgdmVyaWZpZXIgaXMgdXAgdG8sIGFuZCB3aGF0IHByb3RlY3Rpb25zIGl0J3MgcHV0dGluZyBpbiBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NzowMy45MjgxMjMwMDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjM3MzI1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NoZWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzUzIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdD0xMjg9cmV1c2VzIHRoZSBleGlzdGluZyBgYGZkX2FycmF5YGA6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9zaWduaW5nLnJzdC0xMzQtICAgc2V0IHNvIHRoZSBrZXJuZWwga25vd3MgdGhlIGFycmF5J3MgbGVuZ3RoLlxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjEzNTojLiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJ1bnMgaW5zaWRlIHRoZSB2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgb25jZSBpdFxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTEzNi0gICBoYXMgcmVzb2x2ZWQgdGhlIGBgZmRfYXJyYXlgYCBlbnRyaWVzIGludG8gdGhlIHByb2dyYW0ncyBgYHVzZWRfbWFwc2BgLiBUaGVcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0PTIzMD1UaGlzIGhvb2sgZ2F0ZXMgYWRtaXNzaW9uICoqZm9yIGV2ZXJ5IGxvYWQqKiwgZnJvbSBhIHNpbmdsZSBjYWxsIHNpdGUgaW5zaWRlIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0OjIzMTp2ZXJpZmllciAoYGBicGZfY2hlY2soKWBgKSwgYmVmb3JlIHRoZSBtYWluIHZlcmlmaWNhdGlvbiB3b3JrLiBJdCBydW5zIGFmdGVyIHRoZVxcbkRvY3VtZW50YXRpb24vYnBmL3NpZ25pbmcucnN0LTIzMi1vcHRpb25hbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBzbyB0aGUgdmVyZGljdCBhbmQga2V5cmluZyBmaWVsZHMgYXJlIGZpbmFsIC0gdGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnJzdD02NDc9Z290IGZyb20gYnBmX3Byb2dfY3JlYXRlKCksIGFuZCAnY3R4JyB0aGUgZ2l2ZW4gY29udGV4dCAoZS5nLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0OjY0ODpza2IgcG9pbnRlcikuIEFsbCBjb25zdHJhaW50cyBhbmQgcmVzdHJpY3Rpb25zIGZyb20gYnBmX2NoZWNrX2NsYXNzaWMoKSBhcHBseVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIucnN0LTY0OS1iZWZvcmUgYSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgbGF5b3V0IGlzIGJlaW5nIGRvbmUgYmVoaW5kIHRoZSBzY2VuZXMhXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUz02PVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjYtXFx0YWRkXFx0eDAsIHg5LCB4MjVcXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyNzpcXHRibFxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTI4LVxcdC8qIEJQRl9SRUdfQVgoeDkpIHdpbGwgYmUgc3RvcmVkIGludG8gY291bnQsIHNvIG1vdmUgcmV0dXJuIHZhbHVlIHRvIGl0LiAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMy0gKlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MTQ6ICogQ2FsbCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIG5vcm1hbCBwb3dlcnBjNjQgQUJJOlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTUtICogXFx0LSByMyA9IHB0ciwgcmV0dXJuIGluIHIzXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIwPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zOC1cXHRhZGQgICAgIHIzLCByMzEsIHIxMlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzk6XFx0YmwgICAgICBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQwLVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTEtICpcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMjogKiBDYWxscyBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8ocHRyKSB3aXRoIHRoZSBzdGFuZGFyZCBSSVNDLVYgQUJJLCB3aGVyZVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEzLSAqIHB0ciA9IEJQRl9SRUdfRlAgKHM1KSArIEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM9MTc9U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zMS1cXHRhZGRcXHRhMCwgdDAsIHM1XFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MzI6XFx0Y2FsbFxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTMzLVxcdG12XFx0dDAsIGEwXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTIyPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0zNi1cXHRsYXkgJXIyLDAoJXIxMiwlcjEzKVxcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6Mzc6XFx0YnJhc2wgJXIxNCxicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM4LVxcdGxnciAlcjEyLCVyMlxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TPTExPVNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTM5LVxcdENBTExfREVQVEhfQUNDT1VOVFxcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo0MDpcXHRjYWxsIGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYz0xODE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYzoxODI6bmZwX2JwZl9jaGVja19tdHUoc3RydWN0IG5mcF9hcHAgKmFwcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jLTE4My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmM9NTIxPWNvbnN0IHN0cnVjdCBuZnBfYXBwX3R5cGUgYXBwX2JwZiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL21haW4uYy01MzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvbWFpbi5jOjUzMTpcXHQuY2hlY2tfbXR1XFx0PSBuZnBfYnBmX2NoZWNrX210dSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi9tYWluLmMtNTMyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz0xNjk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6MTcwOm5mcF9icGZfY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTE3MS1cXHRcXHRcXHQgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTMxMD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzozMTE6bmZwX2JwZl9jaGVja19leGl0KHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy0zMTItXFx0XFx0ICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9MzQyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjM0MzpuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtMzQ0LVxcdFxcdFxcdCAgIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz00NTA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NDUxOm5mcF9icGZfY2hlY2tfcHRyKHN0cnVjdCBuZnBfcHJvZyAqbmZwX3Byb2csIHN0cnVjdCBuZnBfaW5zbl9tZXRhICptZXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDUyLVxcdFxcdCAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggcmVnX25vKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy00NjUtXFx0aWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fU1RBQ0spIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjQ2NjpcXHRcXHRlcnIgPSBuZnBfYnBmX2NoZWNrX3N0YWNrX2FjY2VzcyhuZnBfcHJvZywgbWV0YSwgcmVnLCBlbnYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNDY3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTUwMT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1MDI6bmZwX2JwZl9jaGVja19zdG9yZShzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLCBzdHJ1Y3QgbmZwX2luc25fbWV0YSAqbWV0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUwMy1cXHRcXHQgICAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTIxLWV4aXRfY2hlY2tfcHRyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NTIyOlxcdHJldHVybiBuZnBfYnBmX2NoZWNrX3B0cihuZnBfcHJvZywgbWV0YSwgZW52LCBtZXRhLVxcdTAwM2VpbnNuLmRzdF9yZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNTIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM9NTI1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjUyNjpuZnBfYnBmX2NoZWNrX2F0b21pYyhzdHJ1Y3QgbmZwX3Byb2cgKm5mcF9wcm9nLCBzdHJ1Y3QgbmZwX2luc25fbWV0YSAqbWV0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTUyNy1cXHRcXHQgICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTU1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjU1MjpcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudiwgbWV0YS1cXHUwMDNlaW5zbi5kc3RfcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTU1My19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jPTU1NT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo1NTY6bmZwX2JwZl9jaGVja19hbHUoc3RydWN0IG5mcF9wcm9nICpuZnBfcHJvZywgc3RydWN0IG5mcF9pbnNuX21ldGEgKm1ldGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy01NTctXFx0XFx0ICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYz02MzE9aW50IG5mcF92ZXJpZnlfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1Mi1cXHRpZiAoaXNfbWJwZl9oZWxwZXJfY2FsbChtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1MzpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19oZWxwZXJfY2FsbChuZnBfcHJvZywgZW52LCBtZXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1NC1cXHRpZiAobWV0YS1cXHUwMDNlaW5zbi5jb2RlID09IChCUEZfSk1QIHwgQlBGX0VYSVQpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmM6NjU1OlxcdFxcdHJldHVybiBuZnBfYnBmX2NoZWNrX2V4aXQobmZwX3Byb2csIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NTctXFx0aWYgKGlzX21icGZfbG9hZChtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY1ODpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19wdHIobmZwX3Byb2csIG1ldGEsIGVudixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY1OS1cXHRcXHRcXHRcXHRcXHQgbWV0YS1cXHUwMDNlaW5zbi5zcmNfcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2MC1cXHRpZiAoaXNfbWJwZl9zdG9yZShtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY2MTpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19zdG9yZShuZnBfcHJvZywgbWV0YSwgZW52KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jLTY2My1cXHRpZiAoaXNfbWJwZl9hdG9taWMobWV0YSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYzo2NjQ6XFx0XFx0cmV0dXJuIG5mcF9icGZfY2hlY2tfYXRvbWljKG5mcF9wcm9nLCBtZXRhLCBlbnYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYnBmL3ZlcmlmaWVyLmMtNjY2LVxcdGlmIChpc19tYnBmX2FsdShtZXRhKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2JwZi92ZXJpZmllci5jOjY2NzpcXHRcXHRyZXR1cm4gbmZwX2JwZl9jaGVja19hbHUobmZwX3Byb2csIG1ldGEsIGVudik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9icGYvdmVyaWZpZXIuYy02NjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMjk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMi1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMzM6aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTM0LVxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTE4MD1zdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMzYwLVxcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX0RFVklDRSkpXFx0XFx0XFx0ICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjM2MTpcXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihhdHlwZSwgbWFqb3IsIG1pbm9yLCBcXFxcXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMzYyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYWNjZXNzLFxcdCAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzA0OT1pbnQgYnBmX2dldF9maWxlX2ZsYWcoaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwNTA6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkciwgc2l6ZV90IGV4cGVjdGVkX3NpemUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDUxLVxcdFxcdFxcdCAgICAgc2l6ZV90IGFjdHVhbF9zaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzA1ND1zdHJ1Y3QgYnBmX2xvZ19hdHRyO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzA1NTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKmZwLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDU2LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTAxPXN0cnVjdCBicGZfZmRfYXJyYXkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MDktLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHNcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjkxMDogKiBvbmUgdmVyaWZpZXJfZW52IHBlciBicGZfY2hlY2soKSBjYWxsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05MTEtICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTExNzI9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3VucGFja19rZXkodTY0IGtleSwgdTMyICpvYmpfaWQsIHUzMiAqYnRmX2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTc5LVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE4MDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTgxLVxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjExODI6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4My1cXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExODQtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTg1OmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTE4Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNDM4PWludCBicGZfcHJ1bmVfZGVhZF9icmFuY2hlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE0Mzk6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNDQwLWludCBicGZfY29tcHV0ZV9wb3N0b3JkZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NDA9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY0My0vKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IHRyYW1wb2xpbmUuYyAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY0NDppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjQ1LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDYtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjQ3Oi8qIEZ1bmN0aW9ucyBpbiBmaXh1cHMuYywgY2FsbGVkIGZyb20gYnBmX2NoZWNrKCkgKi9cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NDgtaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTk2PXU2NCBhcmNoX2JwZl90aW1lZF9tYXlfZ290byh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExOTc6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICopO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5OC1ib29sIGJwZl9oZWxwZXJfY2hhbmdlc19wa3RfZGF0YShlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9NzE3PXN0YXRpYyBpbmxpbmUgYm9vbCBjb29raWVfYnBmX29rKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC03MjEtXFxuaW5jbHVkZS9uZXQvdGNwLmg6NzIyOnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC90Y3AuaC03MjMtI2Vsc2VcXG5pbmNsdWRlL25ldC90Y3AuaD03MjQ9c3RhdGljIGlubGluZSBib29sIGNvb2tpZV9icGZfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTcyOC1cXG5pbmNsdWRlL25ldC90Y3AuaDo3Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTczMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MjIyLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUyMjM6ICogbG9uZyBicGZfY2hlY2tfbXR1KHZvaWQgKmN0eCwgdTMyIGlmaW5kZXgsIHUzMiAqbXR1X2xlbiwgczMyIGxlbl9kaWZmLCB1NjQgZmxhZ3MpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUyMjQtICpcXHREZXNjcmlwdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTc0ODU9c3RydWN0IGJwZl9yZWRpcl9uZWlnaCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzQ5NC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NTovKiBicGZfY2hlY2tfbXR1IGZsYWdzKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzQ5NjplbnVtICBicGZfY2hlY2tfbXR1X2ZsYWdzIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzQ5Ny1cXHRCUEZfTVRVX0NIS19TRUdTICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAwKSxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NDk5LVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTAwOmVudW0gYnBmX2NoZWNrX210dV9yZXQge1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTAxLVxcdEJQRl9NVFVfQ0hLX1JFVF9TVUNDRVNTLCAgICAgIC8qIGNoZWNrIGFuZCBsb29rdXAgc3VjY2Vzc2Z1bCAqL1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTUwND1pbnQgYnBmX2l0ZXJfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNS1cXHRpZiAoIWJwZnB0cl9pc19udWxsKHVsaW5mbykpIHtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIHNpemVvZihsaW5mbyksXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgbGluZm9fbGVuKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Njg1MD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDI3LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMjg6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAyOS1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU2MS0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNTYzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OD1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NjktXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzcwOmludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3MS1cXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy03MC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZ1bmNzOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlxcdFxcdHJldCA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1cmVjb3JkLCBrcmVjX3NpemUsIHVyZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTIxMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbGluZm87IGkrKykge1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MjU0OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1NS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzYtXFx0XFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM3NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3OC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzOS1cXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcXG5rZXJuZWwvYnBmL2NvcmUuYy0xOC0gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI1NzQ9Ym9vbCBicGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTg3OnN0YXRpYyBpbnQgYnBmX2NoZWNrX3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmtlcm5lbC9icGYvY29yZS5jLTI1ODgte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVxcdFxcdC8qXFxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcXHRcXHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXFxua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cXHRcXHQgKiBwb2ludCwgb25seSBpbnNuX2F1eF9kYXRhIGlzIHVzZWQgYWZ0ZXIgZmFpbHVyZSwgc28gaXQgc2hvdWxkIGJlIHJlc3RvcmVkXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjgwPXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cXHQgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNzI3OlxcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzI4LVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDE1LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MTcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkwLSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTItXFx0XFx0XFx0ICAgICBzaXplX3QgZXhwZWN0ZWRfc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTE3LVxcdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzExODpcXHRlcnIgPSBicGZfY2hlY2soXFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzExOS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MjA9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzUyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3NTM6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU0LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Z3RfaW5mbyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MDg1PXN0YXRpYyBpbnQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MDk5LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfcHJvZ19pbmZvLCBhdHRhY2hfYnRmX2lkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTAwOlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMDEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUzNzU9c3RhdGljIGludCBicGZfbWFwX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4NS1cXHRsZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX21hcF9pbmZvLCBoYXNoX3NpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUzODY6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTQ0Nj1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NTU6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYyPXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDcyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NzM6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKGluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3NC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTUwNT1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTE0OlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjI5MD1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mjk4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYyOTk6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyLCBzaXplb2YoYXR0ciksIHNpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTAtXFx0aWYgKGNtZCBcXHUwMDI2IEJQRl9DT01NT05fQVRUUlMpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzExOlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0cl9jb21tb24sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jb21tb25fYXR0ciwgbG9nX3RydWVfc2l6ZSksXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDg2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA5NzpcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXFx0XFx0XFx0XFx0ICAgICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoYnRmLCBwcm9nLCBpZHNbaV0sIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU3PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NjQ9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3NS0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzctICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4OTk1PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAzMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMzEtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTQzNT1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQ2NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0NjY6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQ2Ny1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTM0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTM2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTIwPXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzNC0vKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTkzNTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzYtICogb25jZSB0aGUgcHJvZ3JhbSdzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5OTQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNjEtXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzQtXFx0LyogJ3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQncyBub3Qgc21hbGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDc1OlxcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzYtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTY4OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mb19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNjktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxNzktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTgwOlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxODEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTk0OlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jPTI0ND1zdGF0aWMgdm9pZCBwb3B1bGF0ZV9zZWNjb21wX2RhdGEoc3RydWN0IHNlY2NvbXBfZGF0YSAqc2QpXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jLTI3MC0gKlxcbmtlcm5lbC9zZWNjb21wLmM6MjcxOiAqIFRha2VzIGEgcHJldmlvdXNseSBjaGVja2VkIGZpbHRlciAoYnkgYnBmX2NoZWNrX2NsYXNzaWMpIGFuZFxcbmtlcm5lbC9zZWNjb21wLmMtMjcyLSAqIHJlZGlyZWN0cyBhbGwgZmlsdGVyIGNvZGUgdGhhdCBsb2FkcyBzdHJ1Y3Qgc2tfYnVmZiBkYXRhXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9ODU0PXN0YXRpYyB2b2lkICpicGZfY3R4X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgbWF4X3NpemUpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODY5LVxcdGlmIChkYXRhX2luKSB7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjg3MDpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIoZGF0YV9pbiksIG1heF9zaXplLCBzaXplKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODcxLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE2LSAqIEFuZGkgS2xlZW4gLSBGaXggYSBmZXcgYmFkIGJ1Z3MgYW5kIHJhY2VzLlxcbm5ldC9jb3JlL2ZpbHRlci5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE4LSAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTg3PXN0YXRpYyBib29sIGNoa19jb2RlX2FsbG93ZWQodTE2IGNvZGVfdG9fcHJvYmUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNTM6c3RhdGljIGJvb2wgYnBmX2NoZWNrX2Jhc2ljc19vayhjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlcixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU0LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA2NC0vKipcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDY1OiAqXFx0YnBmX2NoZWNrX2NsYXNzaWMgLSB2ZXJpZnkgc29ja2V0IGZpbHRlciBjb2RlXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA2Ni0gKlxcdEBmaWx0ZXI6IGZpbHRlciB0byB2ZXJpZnlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzctICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTA3ODpzdGF0aWMgaW50IGJwZl9jaGVja19jbGFzc2ljKGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNzktXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgZmxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEzMzU9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3ByZXBhcmVfZmlsdGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEzNDM6XFx0ZXJyID0gYnBmX2NoZWNrX2NsYXNzaWMoZnAtXFx1MDAzZWluc25zLCBmcC1cXHUwMDNlbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMzQ0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEzODQ9aW50IGJwZl9wcm9nX2NyZWF0ZShzdHJ1Y3QgYnBmX3Byb2cgKipwZnAsIHN0cnVjdCBzb2NrX2Zwcm9nX2tlcm4gKmZwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTM4OS1cXHQvKiBNYWtlIHN1cmUgbmV3IGZpbHRlciBpcyB0aGVyZSBhbmQgaW4gdGhlIHJpZ2h0IGFtb3VudHMuICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTM5MDpcXHRpZiAoIWJwZl9jaGVja19iYXNpY3Nfb2soZnByb2ctXFx1MDAzZWZpbHRlciwgZnByb2ctXFx1MDAzZWxlbikpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTM5MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTE0Mjk9aW50IGJwZl9wcm9nX2NyZWF0ZV9mcm9tX3VzZXIoc3RydWN0IGJwZl9wcm9nICoqcGZwLCBzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2csXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNDM2LVxcdC8qIE1ha2Ugc3VyZSBuZXcgZmlsdGVyIGlzIHRoZXJlIGFuZCBpbiB0aGUgcmlnaHQgYW1vdW50cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxNDM3OlxcdGlmICghYnBmX2NoZWNrX2Jhc2ljc19vayhmcHJvZy1cXHUwMDNlZmlsdGVyLCBmcHJvZy1cXHUwMDNlbGVuKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xNDM4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTUwNT1zdHJ1Y3QgYnBmX3Byb2cgKl9fZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2csIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MTQtXFx0LyogTWFrZSBzdXJlIG5ldyBmaWx0ZXIgaXMgdGhlcmUgYW5kIGluIHRoZSByaWdodCBhbW91bnRzLiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjE1MTU6XFx0aWYgKCFicGZfY2hlY2tfYmFzaWNzX29rKGZwcm9nLVxcdTAwM2VmaWx0ZXIsIGZwcm9nLVxcdTAwM2VsZW4pKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MTYtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjYzPXN0YXRpYyBpbnQgY29va2llX3RjcF9yZXFza19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRilcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzAyOnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMDMte1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00MjUtXFx0aWYgKGNvb2tpZV9icGZfb2soc2tiKSkge1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzo0MjY6XFx0XFx0cmVxID0gY29va2llX2JwZl9jaGVjayhzaywgc2tiKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDI3LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTg6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyMz1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTM6XFx0XFx0dGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1NC1cXHR9XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTM1PXN0YXRpYyB2b2lkIHVkcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICpwcm90LCBjb25zdCBzdHJ1Y3QgcHJvdG8gKmJhc2UpXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNDQ6c3RhdGljIHZvaWQgdWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDUte1xcbi0tXFxubmV0L2lwdjQvdWRwX2JwZi5jPTE2Mz1pbnQgdWRwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XFx0XFx0dWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE3NS1cXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTkyLVxcdGlmIChjb29raWVfYnBmX29rKHNrYikpIHtcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTkzOlxcdFxcdHJlcSA9IGNvb2tpZV9icGZfY2hlY2soc2ssIHNrYik7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjQ3OjA2LjM1MTg2MzYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzODU4NDY1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZ2V0dGluZyBzdGFydGVkIHdpdGggdGhpcyBCUEYgdmVyaWZpY2F0aW9uIGFuYWx5c2lzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnBmX2NoZWNrYC4gSXQncyB0aGUgbmF0dXJhbCBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AsIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AsIGFuZCBgcmVnc19yZWZpbmVfY29uZF9vcGAuIFRoZXkgYXJlIGFsbCBsaWtlbHkgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgYGJwZl9jaGVja2AgaXMgaW50ZXJuYWwgb3IgZXhwb3NlZC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHllcCwgaXQncyBhIHJlZ3VsYXIgZnVuY3Rpb24gZGVjbGFyYXRpb246XG5cbmBgYGNcbmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbmBgYFxuXG5BbmQgaXQncyBub3QgYHN0YXRpY2AsIHNvIGl0J3MgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodHMuIEkndmUgc2VlbiBpdCB1c2VkIGluIGBzeXNjYWxsLmNgLCBzbyBJIGtub3cgdGhhdCdzIGFjY3VyYXRlLlxuXG5TbywgaGVyZSdzIG15IHVwZGF0ZWQgZm9jdXM6XG5cbiogICBgYnBmX2NoZWNrYFxuKiAgIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2BcbiogICBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgXG4qICAgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsIGhlcmUuIFRoYXQncyBhIGdpdmVuLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyBhcyB3ZWxsLCBvZiBjb3Vyc2UuXG5cblRoZSByZWxldmFudCBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGtlcm5lbC9icGYvY251bV9kZWZzLmhgLiBUaGlzIGlzIGluY2x1ZGVkIGluIGBrZXJuZWwvYnBmL2NudW0uY2AuIExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBNYWtlZmlsZSB0byBiZSBzdXJlLiBJIHdpbGwgYW5hbHl6ZSB0aGUgTWFrZWZpbGUgZm9yIGBrZXJuZWwvYnBmL2NudW0uY2AgdG8gaWRlbnRpZnkgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTcxMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo0NzoxNS43Mzc3MTQxOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTA4MTk2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY251bS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDc6MTguMzg4NTQ0NjM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODg5MDc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBjbnVtLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLiBCdXQgdGhlIG1lYXQgb2YgdGhlIG1hdHRlciBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGNpcmN1bGFyIG51bWJlcnMgKGBjbnVtYCkgZm9yIHJlZ2lzdGVyIGJvdW5kcy4gVGhpcyBpcyBhICpjb3JlKiBwYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHJpZ2h0PyBTaW1wbGlmaWNhdGlvbiBvZiBgc21pbmAsIGBzbWF4YCwgYG5vcm1hbGl6ZWAsIGFuZCBgY29udGFpbnNgIOKAkyB0aG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgZm9yIG1hbmFnaW5nIGFuZCBjb21wYXJpbmcgdGhlc2UgYm91bmRzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBub3QganVzdCBhIHJlZmFjdG9yaW5nOyBpdCdzIGFsdGVyaW5nIGhvdyB0aGUgdmVyaWZpZXIgKnRoaW5rcyogYWJvdXQgcmVnaXN0ZXIgYm91bmRzLiBUaGlzIG1lYW5zIGl0IGNvdWxkIHN1YnRseSBhbHRlciB3aGljaCBCUEYgcHJvZ3JhbXMgcGFzcyB2ZXJpZmljYXRpb24gb3IsIGNvbnZlcnNlbHksIHdoaWNoIG9uZXMgYXJlIHJlamVjdGVkLiBJdCBjb3VsZCBhbHNvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIG9yIGFjY3VyYWN5IG9mIHRoZSB0cmFja2VkIGJvdW5kcywgd2hpY2ggaGFzIHNlcmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBkZWVwIGRpdmUgd2l0aCBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZSB2ZXJpZmllciwgcGFydGljdWxhcmx5IGFyb3VuZCBib3VuZCB0cmFja2luZywgaXMgd29ydGggZXhwbG9yaW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Gcm9tIGEgZm9jdXMgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfY2hlY2tgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQsIG5hdHVyYWxseTsgYGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzYCBhbmQgYGFkanVzdF9wdHJfbWluX21heF92YWxzYCAtIHRoZXkncmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5IGFyZSB0aGUgb25lcyBhY3R1YWxseSBjaGFuZ2luZyB0aGUgYm91bmRzIGFuZCB0aGUgYWRqdXN0bWVudCB0byB0aGVtOyBhbmQgYHJlZ3NfcmVmaW5lX2NvbmRfb3BgIC0gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNvbmRpdGlvbmFsIG9wZXJhdGlvbnMgYW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBicmFuY2hpbmcsIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgYGNudW1gIGJvdW5kcyBjb21lIGludG8gcGxheS5cblxuTXkgcmVhc29uaW5nPyBUaGUgcGF0Y2ggbWVzc2VzIHdpdGggdGhlIGZ1bmRhbWVudGFsIGxvZ2ljIG9mIEJQRiB2ZXJpZmllcidzIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzLiBJdCdzIGEgc2ltcGxpZmljYXRpb24gaW4gdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiwgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGFmZmVjdHMgaG93IHRoZSB2ZXJpZmllciBkb2VzIGl0cyBqb2IsIHdoaWNoIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgYm91bmRhcnkuIEZ1enppbmcgaGFzIHRvIGNvbmNlbnRyYXRlIG9uIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludHMsIGFuZCB0aGVzZSBmdW5jdGlvbnM6IGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AsIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AsIGFuZCBgcmVnc19yZWZpbmVfY29uZF9vcGAuXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYHNldC1yZXN1bHRzYCBydW5uaW5nIGFuZCBzdGFydCBnZW5lcmF0aW5nIHNvbWUgZnV6eiB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYyOSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NDc6MjUuOTc3NDU1MjA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTE4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNcIixcbiAgICBcImFkanVzdF9wdHJfbWluX21heF92YWxzXCIsXG4gICAgXCJyZWdzX3JlZmluZV9jb25kX29wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIEJQRiB2ZXJpZmllciBmb3IgdHJhY2tpbmcgcmVnaXN0ZXIgYm91bmRzIHVzaW5nIGNpcmN1bGFyIG51bWJlcnMgKGNudW0pLiBJdCBzaW1wbGlmaWVzIHRoZSBzbWluLCBzbWF4LCBub3JtYWxpemUsIGFuZCBjb250YWlucyBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyBhbmQgdmFsaWRhdGVzIHJlZ2lzdGVyIHZhbHVlcyBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHZlcmlmaWVyIGVudHJ5IHBvaW50cyBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gYm91bmRzIGFkanVzdG1lbnRzIGFuZCBjb25kaXRpb25hbCBicmFuY2ggcmVmaW5lbWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImFkanVzdF9zY2FsYXJfbWluX21heF92YWxzXCIsXG4gICAgXCJhZGp1c3RfcHRyX21pbl9tYXhfdmFsc1wiLFxuICAgIFwicmVnc19yZWZpbmVfY29uZF9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHRyYWNraW5nIHJlZ2lzdGVyIGJvdW5kcyB1c2luZyBjaXJjdWxhciBudW1iZXJzIChjbnVtKS4gSXQgc2ltcGxpZmllcyB0aGUgc21pbiwgc21heCwgbm9ybWFsaXplLCBhbmQgY29udGFpbnMgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgYW5kIHZhbGlkYXRlcyByZWdpc3RlciB2YWx1ZXMgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiB2ZXJpZmllciBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGJvdW5kcyBhZGp1c3RtZW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHJlZmluZW1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[1] Phase: Succeeded StartedAt: 2026-07-31 23:47:37 +0000 UTC FinishedAt: 2026-07-31 23:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 23:47:37 +0000 UTC FinishedAt: 2026-07-31 23:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2] Phase: Succeeded StartedAt: 2026-07-31 23:47:37 +0000 UTC FinishedAt: 2026-08-01 03:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 23:47:37 +0000 UTC FinishedAt: 2026-08-01 03:46:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 23:47:37 +0000 UTC FinishedAt: 2026-07-31 23:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 23:47:37 +0000 UTC FinishedAt: 2026-07-31 23:47:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2g68c/series-workflow2g68c-convert-artifact-2183996969/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 23:47:47 +0000 UTC FinishedAt: 2026-08-01 00:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 23:47:47 +0000 UTC FinishedAt: 2026-08-01 00:11:06 +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:*cdc27822-6d6a-44f9-938b-d35d0d29bf8b,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-workflow2g68c/series-workflow2g68c-convert-artifact-2183996969/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": "9fed84ef-f9ab-490a-a0f6-801fefa86507", "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-workflow2g68c/series-workflow2g68c-build-action-2065927815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 23:47:47 +0000 UTC FinishedAt: 2026-08-01 00:10:39 +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:*cdc27822-6d6a-44f9-938b-d35d0d29bf8b,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-workflow2g68c/series-workflow2g68c-convert-artifact-2183996969/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": "9fed84ef-f9ab-490a-a0f6-801fefa86507", "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-workflow2g68c/series-workflow2g68c-build-action-2065927815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 00:11:06 +0000 UTC FinishedAt: 2026-08-01 00:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 00:11:06 +0000 UTC FinishedAt: 2026-08-01 00:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 00:11:06 +0000 UTC FinishedAt: 2026-08-01 00:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 00:11:06 +0000 UTC FinishedAt: 2026-08-01 00:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2g68c/series-workflow2g68c-convert-artifact-939499964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 00:11:16 +0000 UTC FinishedAt: 2026-08-01 00:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 00:11:16 +0000 UTC FinishedAt: 2026-08-01 00:13:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9fed84ef-f9ab-490a-a0f6-801fefa86507,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-workflow2g68c/series-workflow2g68c-build-action-2065927815/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-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 00:13:30 +0000 UTC FinishedAt: 2026-08-01 00:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 00:13:30 +0000 UTC FinishedAt: 2026-08-01 00:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 00:13:30 +0000 UTC FinishedAt: 2026-08-01 00:41:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 00:13:30 +0000 UTC FinishedAt: 2026-08-01 00:41:37 +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:*cdc27822-6d6a-44f9-938b-d35d0d29bf8b,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-workflow2g68c/series-workflow2g68c-convert-artifact-939499964/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": "39196f87-227e-4ba2-9b02-f80bef6b68ff", "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-workflow2g68c/series-workflow2g68c-build-action-133393432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 00:13:30 +0000 UTC FinishedAt: 2026-08-01 00:41:27 +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:*cdc27822-6d6a-44f9-938b-d35d0d29bf8b,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-workflow2g68c/series-workflow2g68c-convert-artifact-939499964/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": "39196f87-227e-4ba2-9b02-f80bef6b68ff", "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-workflow2g68c/series-workflow2g68c-build-action-133393432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 00:41:37 +0000 UTC FinishedAt: 2026-08-01 00:41:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 00:41:37 +0000 UTC FinishedAt: 2026-08-01 00:41:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 00:41:37 +0000 UTC FinishedAt: 2026-08-01 00:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 00:41:37 +0000 UTC FinishedAt: 2026-08-01 00:43:16 +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:*39196f87-227e-4ba2-9b02-f80bef6b68ff,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-workflow2g68c/series-workflow2g68c-build-action-133393432/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-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 03:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 03:46:17 +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"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"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:*9fed84ef-f9ab-490a-a0f6-801fefa86507,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39196f87-227e-4ba2-9b02-f80bef6b68ff,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-workflow2g68c/series-workflow2g68c-build-action-2065927815/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-workflow2g68c/series-workflow2g68c-build-action-133393432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 00:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 00:43:32 +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"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"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-workflow2g68c/series-workflow2g68c-convert-artifact-3383922309/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 00:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 00:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 00:43:26 +0000 UTC FinishedAt: 2026-08-01 00:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 00:43:36 +0000 UTC FinishedAt: 2026-08-01 03:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g68c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","adjust_scalar_min_max_vals","adjust_ptr_min_max_vals","regs_refine_cond_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0e80dee4e32fd11e6ee1b714b75f681c7cafd3e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8b8a18d8-e83f-4d82-b847-00753dc436b3","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 00:43:36 +0000 UTC FinishedAt: 2026-08-01 03:46:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9fed84ef-f9ab-490a-a0f6-801fefa86507,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39196f87-227e-4ba2-9b02-f80bef6b68ff,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-workflow2g68c/series-workflow2g68c-build-action-2065927815/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-workflow2g68c/series-workflow2g68c-build-action-133393432/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-workflow2g68c/series-workflow2g68c-convert-artifact-3383922309/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,}