Name: series-workflow6pvsw Phase: Succeeded StartedAt: 2026-07-27 00:14:36 +0000 UTC FinishedAt: 2026-07-27 05:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[0] Phase: Succeeded StartedAt: 2026-07-27 00:14:36 +0000 UTC FinishedAt: 2026-07-27 00:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 00:14:36 +0000 UTC FinishedAt: 2026-07-27 00:56:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "40de8160ca7f67d14619ee0351ce5d68fc4a237a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "40de8160ca7f67d14619ee0351ce5d68fc4a237a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "HUGETLBFS" ], "series_id": "9e7ed6ab-9f68-435a-8d90-874ec81b8b94" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZDFhMzAxZDg3Yzk1ZWIzNDFjMzMzOWQ4NzU0ZWNjMmZjMTZkZWNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDA6NTE6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmNcbmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NzQ0ZGUwY2VlYjczNSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfY21hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmNcbkBAIC0zNCw3ICYjNDM7MzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiYjNDM7XHRpZiAoIW5vZGVtYXNrKVxuJiM0MztcdFx0bm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG4mIzQzO1xuJiM0MztcdGlmIChodWdldGxiX2NtYVtuaWRdIFx1MDAyNlx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuIFxuIFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gd2hlbiBub2RlbWFzayBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChodWdldGxiIENNQSkgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2VwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkMWEzMDFkODdjOTVlYjM0MWMzMzM5ZDg3NTRlY2MyZmMxNmRlY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwMDo1MTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jCmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NzQ0ZGUwY2VlYjczNSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jCkBAIC0zNCw3ICYjNDM7MzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAlpZiAoIWh1Z2V0bGJfY21hX3NpemUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKGh1Z2V0bGJfY21hW25pZF0pCiYjNDM7CWlmICghbm9kZW1hc2spCiYjNDM7CQlub2RlbWFzayA9ICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldOwomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIE1vZGlmaWNhdGlvbioqCgpTbywgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vaHVnZXRsYl9jbWEuY2AsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0LiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBtb2RpZmljYXRpb24gdG8gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBvZiBmcm96ZW4gZm9saW9zIHdpdGhpbiB0aGUgaHVnZSBwYWdlIENNQSBhcmVhIGlzIGJlaW5nIGFsdGVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9ucyBvZiBDTUEgd2l0aCBodWdldGxiZnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gZnJhZ21lbnRhdGlvbiwgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZSwgYW5kIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGBodWdldGxiYCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBvdGhlciBzeXN0ZW0gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbiBtaW5kLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGdldCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYtXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI4LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBjaGFuZ2UsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjoKCioqRXhhbWluaW5nIGEgaHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIGBub2RlbWFza2AgaXMgbnVsbCBhbmQgaWYgc28sIGRlZmF1bHRzIGl0IHRvIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAuIEZvbGxvd2luZyB0aGF0LCBpdCBwZXJmb3JtcyBhIGNoZWNrIHVzaW5nIGBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBgaHVnZXRsYiBDTUFgIGNvZGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaHVnZXRsYl9jbWEuY2AgaXMgY29uZmlndXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIHNlZSB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjaGVjayBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zIGFuZCBpZiB0aGVyZSYjMzk7cyBhbiBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IgYXZhaWxhYmlsaXR5LCBvciBpZiB0aGVyZSBpcyBhbnkgYWRkZWQgY29tcGxleGl0eSBvciBidWctZml4aW5nIHJlcXVpcmVkLiBUaGlzIGNoZWNrIGxvb2tzIGxpa2UgYSBnb29kIG9uZSwgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiBvciBlbnN1cmluZyBub2RlIGFmZmluaXR5IGZvciBodWdldGxiIGFsbG9jYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjAyLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1MC1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNC1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDUtXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI3ODp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cbi0tXG5tbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmMtMTktc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xMzI9ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xMzMtXG5tbS9odWdldGxiX2NtYS5jOjEzNDpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTM2Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTEzNy19XG5tbS9odWdldGxiX2NtYS5jLTEzOC1cbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTQxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNDIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cbm1tL2h1Z2V0bGJfY21hLmM6MTU1Olx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cdGlmICghb3JkZXIpIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0yNjAte1xubW0vaHVnZXRsYl9jbWEuYzoyNjE6XHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjYyLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3MS1cdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmM6MjcyOlx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG5tbS9odWdldGxiX2NtYS5jLTI3My19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3OS1cbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjgxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEludGVycGxheSBvZiBDTUEgYW5kIEh1Z2VUTEIgaW4gQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY3Jvc3MtY29tcGlsYXRpb24gY29uZmlnIHRlbGxzIG1lIGBtbS9odWdldGxiX2NtYS5jYCBnZXRzIGJ1aWx0IGlmIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGVuYWJsZWQuIEludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGEgZGlyZWN0IGludGVyYWN0aW9uIGJldHdlZW4gdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciAoQ01BKSBhbmQgSHVnZVRMQiBmaWxlIHN5c3RlbS4gSXQmIzM5O3Mgbm90IGEgY29tbW9uIGNvbmZpZ3VyYXRpb24sIGJ1dCB0aGVyZSBhcmUgZGVmaW5pdGVseSBjYXNlcyB3aGVyZSB5b3UmIzM5O2Qgd2FudCB0byB1c2UgQ01BIHRvIHByZS1hbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGNodW5rcyBzcGVjaWZpY2FsbHkgZm9yIEh1Z2VUTEIgdXNlLiBNYWtlcyBzZW5zZSBmb3IgcGVyZm9ybWFuY2UgcHJlZGljdGFiaWxpdHksIGVzcGVjaWFsbHkgaWYgeW91JiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyeSBsYXJnZSBwYWdlcyBhbmQgd2FudCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGlzc3Vlcy4KClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9odWdldGxiX2NtYS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVncmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24gaGVyZS4uLiBJdCYjMzk7cyB2ZXJ5IGxpa2VseSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0aGF0JiMzOTtzIGhhbmRsaW5nIHRoZSBrZXkgcGFydHMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBDTUEgaXMgdXRpbGl6ZWQgdG8gcHJlcGFyZSB0aGUgcGh5c2ljYWwgY29udGlndW91cyBtZW1vcnksIGFuZCBob3cgaXQgZ2V0cyBwYXNzZWQgdG8gdGhlIEh1Z2VUTEIgc3lzdGVtLiBEb2VzIHRoZSBDTUEgYWxsb2NhdGlvbiBoYXBwZW4gKmJlZm9yZSogdGhlIEh1Z2VUTEIgYWxsb2NhdGlvbiBpcyByZXF1ZXN0ZWQsIG9yIGlzIHRoZXJlIHNvbWUgc29ydCBvZiBjb29yZGluYXRlZCBoYW5kc2hha2U/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIHdoYXQgaGFwcGVucyBpZiBDTUEgZmFpbHMgdG8gcHJvdmlkZSB0aGUgbWVtb3J5PyBIb3cgaXMgdGhpcyAmIzM0O2Zyb3plbiBmb2xpbyYjMzQ7IGNvbmNlcHQgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgSHVnZVRMQiBtYW5hZ2VtZW50PyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGhlcmUsIGJlY2F1c2UgYSBtaXNjb25maWd1cmF0aW9uIG9yIGJ1ZyBoZXJlIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHByb2JsZW1zLCBvciBldmVuIGNhdGFzdHJvcGhpYyBmYWlsdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHR2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gIDIyOlx0e1xuICAyMzpcdFx0V0FSTl9PTl9PTkNFKCFjbWFfcmVsZWFzZV9mcm96ZW4oaHVnZXRsYl9jbWFbZm9saW9fbmlkKGZvbGlvKV0sXG4gIDI0Olx0XHRcdFx0XHRcdCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpKTtcbiAgMjU6XHR9XG4gIDI2Olx0XG4gIDI3Olx0c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiAgMjg6XHRcdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4gIDI5Olx0e1xuICAzMDpcdFx0aW50IG5vZGU7XG4gIDMxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICAzMjpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuICAzMzpcdFxuICAzNDpcdFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxuICAzNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzY6XHRcbiAgMzc6XHRcdGlmICghbm9kZW1hc2spXG4gIDM4Olx0XHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuICAzOTpcdFxuICA0MDpcdFx0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuICA0MTpcdFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuICA0NDpcdFx0XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKSB7XG4gIDQ1Olx0XHRcdFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcbiAgNDY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuICA0NzpcdFxuICA0ODpcdFx0XHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25vZGVdLCBvcmRlcik7XG4gIDQ5Olx0XHRcdFx0aWYgKHBhZ2UpXG4gIDUwOlx0XHRcdFx0XHRicmVhaztcbiAgNTE6XHRcdFx0fVxuICA1MjpcdFx0fVxuICA1MzpcdFxuICA1NDpcdFx0aWYgKCFwYWdlKVxuICA1NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNTY6XHRcbiAgNTc6XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiAgNTg6XHRcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4gIDU5Olx0XHRyZXR1cm4gZm9saW87XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxuICA2MzpcdGh1Z2V0bGJfY21hX2FsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50ICpuaWQsIGJvb2wgbm9kZV9leGFjdClcbiAgNjQ6XHR7XG4gIDY1Olx0XHRzdHJ1Y3QgY21hICpjbWE7XG4gIDY2Olx0XHRzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm07XG4gIDY3Olx0XHRpbnQgbm9kZSA9ICpuaWQ7XG4gIDY4Olx0XG4gIDY5Olx0XHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEh1Z2VUTEIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gaG93IHRoZXNlIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZ2V0IGFsbG9jYXRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBUaGUgdHJhY2UgbGVhZHMgbWUgdG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIGFuZCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsIGFsbG9jYXRpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28uIEkgc2hvdWxkIGhlYWQgc3RyYWlnaHQgdG8gYG1tL2h1Z2V0bGIuY2AgYW5kIGRpZyBpbnRvIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHRvIHNlZSBob3cgaXQmIzM5O3MgdXRpbGl6aW5nIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJJiMzOTttIGhvcGluZyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB3ZSBuZWVkIHRvIGdvIHRvIHVuZGVyc3RhbmQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OS0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcbm1tL2h1Z2V0bGIuYzoxMzYwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTEzNjEtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vaHVnZXRsYi5jOjEzNzc6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG5tbS9odWdldGxiLmMtMTM3OC1cdFx0XHRcdFx0ICBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg0Ni1cdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXG5tbS9odWdldGxiLmM6MTg0NzpcdFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0xODQ4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2V0bGIgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGNhbGwgc3RhY2suIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGlzIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiB0aGluZ3MsIGNhbGxlZCBmcm9tIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLCB3aGljaCBpdHNlbGYgYnJhbmNoZXMgZnJvbSBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIGFuZCBmaW5hbGx5LCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBhbmQgYGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpb2AuIFllYWgsIHRoaXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBjcnVjaWFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBgTlVMTGAgYG5vZGVtYXNrYCBkZXJlZmVyZW5jZSBpbiBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgLiBUaGUgcHJvcG9zZWQgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYWRkIGEgY2hlY2s6IGBpZiAoIW5vZGVtYXNrKSBub2RlbWFzayA9ICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldO2AuIFRoYXQgc2VlbXMgZnVuY3Rpb25hbGx5IHNvdW5kLCBhIHR5cGljYWwgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZvciB0aGUgYGh1Z2V0bGJfY21hLmNgIHNpZGUgb2YgdGhpbmdzLCB3ZSBjbGVhcmx5IG5lZWQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIEFuZCBmb3IgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmLCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGFuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgZG9lc24mIzM5O3QgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgKmFsd2F5cyogY2FsbCBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYD8gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgbW0vaHVnZXRsYi5jYCBjb2RlIGFyb3VuZCBsaW5lIDEzNjAganVzdCB0byBiZSBzdXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU1Olx0ZXJyOlxuMTM1NjpcdFx0cmV0dXJuIE5VTEw7XG4xMzU3Olx0fVxuMTM1ODpcdFxuMTM1OTpcdCNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuMTM2MDpcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuMTM2MTpcdFx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbjEzNjI6XHR7XG4xMzYzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTM2NDpcdFxuMTM2NTpcdFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbjEzNjY6XHRcdGlmIChmb2xpbylcbjEzNjc6XHRcdFx0cmV0dXJuIGZvbGlvO1xuMTM2ODpcdFxuMTM2OTpcdFx0aWYgKGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYygpKVxuMTM3MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzNzE6XHRcbjEzNzI6XHRcdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKWFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXMoMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGdmcF9tYXNrLFxuMTM3MzpcdFx0XHRcdFx0XHRcdFx0ICBuaWQsIG5vZGVtYXNrKTtcbjEzNzQ6XHRcdHJldHVybiBmb2xpbztcbjEzNzU6XHR9XG4xMzc2Olx0I2Vsc2UgLyogIUNPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFIHx8ICFDT05GSUdfQ09OVElHX0FMTE9DICovXG4xMzc3Olx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4xMzc4Olx0XHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4xMzc5Olx0e1xuMTM4MDpcdFx0cmV0dXJuIE5VTEw7XG4xMzgxOlx0fVxuMTM4MjpcdCNlbmRpZlxuMTM4MzpcdFxuMTM4NDpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NzEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGVzZSBrZXJuZWwgaW50ZXJuYWxzOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSBuZWVkIGJvdGggYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBhbmQgYENPTkZJR19DT05USUdfQUxMT0NgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGFyZSByZXF1aXJlZCBpbiBjb25qdW5jdGlvbi4gSG1tLCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIHJpbmdzIGEgYmVsbC4gVGhhdCYjMzk7cyB1c3VhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjYXBhYmlsaXR5LCBpdCYjMzk7cyB0eXBpY2FsbHkgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgaGFyZHdhcmUmIzM5O3MgYXJjaGl0ZWN0dXJlLiBJIGRvbiYjMzk7dCB1c3VhbGx5IGhhdmUgdG8gZGlnIGludG8gaXQgZGlyZWN0bHkuCgpOb3csIGBDT05GSUdfQ09OVElHX0FMTE9DYCwgdGhhdCYjMzk7cyBkaWZmZXJlbnQuIFRoYXQgdXN1YWxseSBnZXRzIHNlbGVjdGVkIGJhc2VkIG9uIGFub3RoZXIgY29uZmlnLCBtb3JlIHNwZWNpZmljYWxseSwgYENPTkZJR19DTUFgIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIEkga25vdyBgQ01BYCBuZWVkcyB0byBhbGxvY2F0ZSBjb250aWd1b3VzIGJsb2NrcyBvZiBwaHlzaWNhbCBtZW1vcnkuIFRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5IEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBtbS9LY29uZmlnYCwgaXQmIzM5O3MgYmVlbiBhIHdoaWxlLCBidXQgSSYjMzk7bSBjZXJ0YWluIEkmIzM5O2xsIGZpbmQgYSBjbGVhciBkZXBlbmRlbmN5IHRoZXJlLiBCZXR0ZXIgY2hlY2sgdGhlIEtjb25maWcgZmlsZSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09OVElHX0FMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYXMgd2VsbC4KCioqQ01BLCBIdWdlVExCLCBhbmQgQ29udGlndW91cyBBbGxvY2F0aW9uOiBNeSBDdXJyZW50IFRoaW5raW5nKioKClJpZ2h0LCBzbyBgQ09OVElHX0FMTE9DYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgKmJlY2F1c2UqIG9mIGBDTUFgIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBoZXJlLiBXaGljaCwgb2YgY291cnNlLCBtZWFucyB3ZSBuZWVkICpib3RoKiBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGJ1dCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LgoKSG1tLCBJIHJlY2FsbCBub3c6IHRoZSBgaHVnZXRsYl9jbWEuY2AgZmlsZSAqaXRzZWxmKiBpcyBjb21waWxlZCBvbmx5IGlmIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIHNldC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgdGhlIGdsdWUgYmV0d2VlbiB0aGUgdHdvLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIHByZWNpc2VseSB3aGF0IEkgdGhpbmsgdGhleSBhcmUuIE5vIHBvaW50IGluIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYXQgdGhpcyBzdGFnZS4gSSB3YW50IHRvIHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcnVsZXMgZXhwbGljaXRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWEubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNzctXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDc4Olx0aHVnZXRsYl9jbWFfb25seT1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNzktXHRcdFx0W0hXLENNQSxFQVJMWV0gV2hlbiBhbGxvY2F0aW5nIG5ldyBIdWdlVExCIHBhZ2VzLCBvbmx5XG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM4LSNpZmRlZiBDT05GSUdfQ01BXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6Mzk6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XG4tLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM9MjAxPWFyY2hfaW5pdGNhbGwoaHVnZXRsYnBhZ2VfaW5pdCk7XG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYzoyMDM6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDQte1xuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00NDg9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjQ1MTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTIte1xuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jPTIyNT1ib29sIF9faW5pdCBhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MjM1OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM2LXtcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTQyPWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM6NDY6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNzY9dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc3LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc5LVxuLS1cbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYl9jbWEub1xubW0vTWFrZWZpbGUtODQtZW5kaWZcbi0tXG5tbS9odWdldGxiX2NtYS5jPTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7XG5tbS9odWdldGxiX2NtYS5jOjE4OnN0YXRpYyBib29sIGh1Z2V0bGJfY21hX29ubHkgX19yb19hZnRlcl9pbml0O1xubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTEzMj1lYXJseV9wYXJhbShcJiMzNDtodWdldGxiX2NtYVwmIzM0OywgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYSk7XG5tbS9odWdldGxiX2NtYS5jLTEzMy1cbm1tL2h1Z2V0bGJfY21hLmM6MTM0OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seShjaGFyICpwKVxubW0vaHVnZXRsYl9jbWEuYy0xMzUte1xubW0vaHVnZXRsYl9jbWEuYzoxMzY6XHRyZXR1cm4ga3N0cnRvYm9vbChwLCBcdTAwMjZodWdldGxiX2NtYV9vbmx5KTtcbm1tL2h1Z2V0bGJfY21hLmMtMTM3LX1cbm1tL2h1Z2V0bGJfY21hLmMtMTM4LVxubW0vaHVnZXRsYl9jbWEuYzoxMzk6ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFfb25seVwmIzM0OywgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KTtcbm1tL2h1Z2V0bGJfY21hLmMtMTQwLVxubW0vaHVnZXRsYl9jbWEuYzoxNDE6dW5zaWduZWQgaW50IF9fd2VhayBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTE0Mi17XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNDY9dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTU0LVxubW0vaHVnZXRsYl9jbWEuYzoxNTU6XHRvcmRlciA9IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIoKTtcbm1tL2h1Z2V0bGJfY21hLmMtMTU2LVx0aWYgKCFvcmRlcikge1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjU5PWJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI2MC17XG5tbS9odWdldGxiX2NtYS5jOjI2MTpcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yNjItfVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjY5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjcxLVx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYzoyNzI6XHRcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcbm1tL2h1Z2V0bGJfY21hLmMtMjczLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI3NT1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjc5LVxubW0vaHVnZXRsYl9jbWEuYzoyODA6XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yODEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE0MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBHaWdhbnRpYyBQYWdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoYXQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGVzc2VudGlhbC4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgZm9yIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHRvIGV2ZW4gKmNvbXBpbGUqLCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgZGVmaW5lZC4gSXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeS4gU28sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHdlJiMzOTtyZSBnb29kIHRvIGdvLiBOZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIHNldCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjgzPWNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbi0tXG5mcy9LY29uZmlnLTI4Ni1cbmZzL0tjb25maWc6Mjg3OmNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5mcy9LY29uZmlnLTI4OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgQm9vbGVhbiBTZWxlY3Rpb24qKgoKUmlnaHQsIHNvIHRoaXMgaXMgYSBib29sZWFuIHZhbHVlIHRoYXQmIzM5O3MgYmVpbmcgc2V0IG9yIHNlbGVjdGVkIGJ5IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoaWNoIG9uZXM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIG1ha2luZyB0aGlzIHNlbGVjdGlvbi4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgYm9vbGVhbiBpcyBiZWluZyB1c2VkIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyAqd2h5KiBpdCYjMzk7cyBiZWluZyB1c2VkLiBJcyB0aGlzIGFib3V0IGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLCBtZW1vcnkgbW9kZWxzLCBoYXJkd2FyZSBmZWF0dXJlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgaXMgaW4gb3JkZXIsIGFuZCBJIGtub3cgZXhhY3RseSB3aGVyZSB0byBzdGFydCBsb29raW5nLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMzItXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuYXJjaC9hcm02NC9LY29uZmlnOjMzOlx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gvYXJtNjQvS2NvbmZpZy0zNC1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xMzgtXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTM5Olx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcdFx0aWYgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE0MC1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0zNS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL3Jpc2N2L0tjb25maWc6MzY6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9yaXNjdi9LY29uZmlnLTM3LVx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTctXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuYXJjaC9zMzkwL0tjb25maWc6OTg6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9zMzkwL0tjb25maWctOTktXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxuLS1cbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcbi0tXG5hcmNoL3NoL0tjb25maWctOS1cdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcbmFyY2gvc2gvS2NvbmZpZzoxMDpcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5hcmNoL3NoL0tjb25maWctMTEtXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZz03MD1jb25maWcgU1BBUkM2NFxuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZy0xMDctXHRzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJXG5hcmNoL3NwYXJjL0tjb25maWc6MTA4Olx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gvc3BhcmMvS2NvbmZpZy0xMDktXHRzZWxlY3QgSEFWRV9TT0ZUSVJRX09OX09XTl9TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWc9MjM9Y29uZmlnIFg4Nl82NFxuLS1cbmFyY2gveDg2L0tjb25maWctMjYtXHQjIE9wdGlvbnMgdGhhdCBhcmUgaW5oZXJlbnRseSA2NC1iaXQga2VybmVsIG9ubHk6XG5hcmNoL3g4Ni9LY29uZmlnOjI3Olx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gveDg2L0tjb25maWctMjgtXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWdpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoaXMgcGllY2Ugb2YgY29kZSBpcyBjbGVhcmx5IHRhcmdldGVkIHRvd2FyZHMgdmFyaW91cyBhcmNoaXRlY3R1cmVzIOKAkyB4ODZfNjQsIGFybTY0LCBSSVNDLVYsIGFuZCB0aGUgbGlrZS4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdDsgdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGVkLiBTbywgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZvY3VzIGhlcmUgaXMgb24gYENNQWAgYW5kIGBIVUdFVExCRlNgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gVGhlIGZ1bmN0aW9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEFoLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaXRzZWxmIGNvbWVzIGZyb20gYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AuIE9rYXksIHNvIHdlIGhhdmUgYSBjbGVhciBjYWxsaW5nIGNoYWluIHRoZXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdGhyZWUgZnVuY3Rpb25zLgoKQnV0LCBob2xkIG9uLi4uIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjYWxsZXJzPyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBmZWVscyBsaWtlIGl0IGhhcyBhIGZvY3VzZWQgcHVycG9zZS4gSWYgSSYjMzk7bSB0cnlpbmcgdG8gb3B0aW1pemUsIEkgbmVlZCB0byBrbm93IHdoZXJlICplbHNlKiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyBjYWxsZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNjQtXG5tbS9odWdldGxiLmM6MTM2NTpcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG5tbS9odWdldGxiLmMtMTM2Ni1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI2LVxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cdFx0XHRcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbi0tXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmgtMTktXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cdFx0Z2ZwX3QgZ2ZwX21hc2ssXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQWxsb2NhdGlvbiBQYXRoKioKClJpZ2h0LCBzbyB0aGUgaW5pdGlhbCAmIzM0O05vLiYjMzQ7IGxpa2VseSBtZWFucyBJJiMzOTt2ZSByZWplY3RlZCBhIHByZXZpb3VzIGxpbmUgb2YgaW5xdWlyeS4gTGV0JiMzOTtzIHNlZS4uLiBUaGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBmb2N1c2VkIG9uIHNlZW1zIHRvIGJlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0JiMzOTtzIHdoZXJlIHdlIHNob3VsZCBiZSBsb29raW5nLgoKSG9sZCBvbiwgSSByZW1lbWJlciBzZWVpbmcgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2Agc29tZXdoZXJlLiBBbmQsIHllcywgaXQmIzM5O3MgbWFya2VkIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IGdldHRpbmcgaW5saW5lZCwgd2hpY2ggY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIFdlJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBwb3NzaWJpbGl0eSBpbiBtaW5kLgoKT2theSwgYmFjayB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSXQgaXNuJiMzOTt0IHN0YXRpYywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG91ciBhbmFseXNpcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgdGhpcyBhbHNvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNzkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xODM1LVxubW0vaHVnZXRsYi5jOjE4MzY6c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTgzNy1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xODYyLSAqL1xubW0vaHVnZXRsYi5jOjE4NjM6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTE4NjQtXHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzaylcbi0tXG5tbS9odWdldGxiLmMtMTg2Ny1cbm1tL2h1Z2V0bGIuYzoxODY4Olx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xubW0vaHVnZXRsYi5jLTE4NjktXHRpZiAoZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5MDYtXG5tbS9odWdldGxiLmM6MTkwNzpcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXG5tbS9odWdldGxiLmMtMTkwOC1cdFx0XHRcdFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcbi0tXG5tbS9odWdldGxiLmM9MjA3Nj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjA4OC1cbm1tL2h1Z2V0bGIuYzoyMDg5Olx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0yMDkwLVx0aWYgKCFmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MjEyND1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTIxMzEtXG5tbS9odWdldGxiLmM6MjEzMjpcdGZvbGlvID0gYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XG5tbS9odWdldGxiLmMtMjEzMy1cdGlmICghZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTI2NDE9c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMjY4Ni1cdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1RISVNOT0RFO1xubW0vaHVnZXRsYi5jOjI2ODc6XHRcdFx0bmV3X2ZvbGlvID0gYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzayxcbm1tL2h1Z2V0bGIuYy0yNjg4LVx0XHRcdFx0XHRcdFx0ICAgICAgbmlkLCBOVUxMKTtcbi0tXG5tbS9odWdldGxiLmM9MzM3Mj1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzg1LVxubW0vaHVnZXRsYi5jOjMzODY6XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbm1tL2h1Z2V0bGIuYy0zMzg3LVx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0zMzkxLVx0XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW9fbGlzdCk7XG5tbS9odWdldGxiLmM6MzM5MjpcdFx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmMtMzM5My1cdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU0MgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqCgpPa2F5LCBteSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGRldGVybWluZSBpdHMgY29tcGlsYXRpb24gYW5kIHVzYWdlLiBJdCBsb29rcyBsaWtlIGBDTUFgIGFuZCBgSFVHRVRMQkZTYCBhcmUgdGhlIG9idmlvdXMgb25lcywgYW5kIEkgdGhpbmsgSSYjMzk7bSBjb3JyZWN0IGluIHRoYXQgYXNzdW1wdGlvbiwgYmVjYXVzZSBgaHVnZXRsYl9jbWEuY2AgaXMgb25seSBidWlsdCB3aXRoIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgZW5hYmxlZC4KCkJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gTGV0IG1lIHNlZS4uLiB0aGUgY29kZSB1c2VzIGBub2RlbWFza190YCBhbmQgYG5vZGVfc3RhdGVzYC4gVGhvc2UgYXJlIG9mdGVuIHRpZWQgdG8gTlVNQSBzeXN0ZW1zLiBPa2F5LCBsZXQmIzM5O3MgY2hlY2suIElzIGBDT05GSUdfTlVNQWAgYWN0dWFsbHkgcmVxdWlyZWQgZm9yIHRob3NlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgc29tZXRpbWVzIGF2YWlsYWJsZSBldmVuIHdpdGhvdXQgTlVNQSBlbmFibGVkPyBUaGlzIHJlcXVpcmVzIG1vcmUgZGlnZ2luZyB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX2lzc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jPTg2PXZvaWQgX19pbml0IHJlcGxpY2F0ZV9rZXJuZWxfdGV4dCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEwMC1cdFx0LyogQ2hlY2sgaWYgdGhpcyBub2RlIHNob3VsZCBnZXQgYSBjb3B5IG9mIHRoZSBrZXJuZWwgKi9cbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jOjEwMTpcdFx0aWYgKG5vZGVfaXNzZXQoY2xpZW50X25hc2lkLCBrdGV4dF9yZXBtYXNrKSkge1xuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMtMTAyLVx0XHRcdHNlcnZlcl9uYXNpZCA9IGNsaWVudF9uYXNpZDtcbi0tXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYz0xMTY9dW5zaWduZWQgbG9uZyBub2RlX2dldGZpcnN0ZnJlZShuYXNpZF90IG5hc2lkKVxuLS1cbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEyNC1cdG9mZnNldCA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpKFx1MDAyNl9lbmQpKSAtIGxvYWRiYXNlO1xuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmM6MTI1Olx0aWYgKChuYXNpZCA9PSAwKSB8fCAobm9kZV9pc3NldChuYXNpZCwga3RleHRfcmVwbWFzaykpKVxuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMtMTI2LVx0XHRyZXR1cm4gVE9fTk9ERShuYXNpZCwgb2Zmc2V0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9NDgwPXN0cnVjdCBzZ3hfZXBjX3BhZ2UgKl9fc2d4X2FsbG9jX2VwY19wYWdlKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQ4OS1cdCAqL1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjQ5MDpcdGlmIChub2RlX2lzc2V0KG5pZF9vZl9jdXJyZW50LCBzZ3hfbnVtYV9tYXNrKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy00OTEtXHRcdG5pZF9zdGFydCA9IG5pZF9vZl9jdXJyZW50O1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz03OTc9c3RhdGljIGJvb2wgX19pbml0IHNneF9wYWdlX2NhY2hlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtODM2LVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjgzNzpcdFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgc2d4X251bWFfbWFzaykpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MzgtXHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2d4X251bWFfbm9kZXNbbmlkXS5sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtODU5LVx0Zm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6ODYwOlx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzZ3hfbnVtYV9tYXNrKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04NjEtXHRcdCAgICBub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIFx1MDAyNlx1MDAyNiBub2RlX3N0YXRlKG5pZCwgTl9DUFUpKVxuLS1cbmFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmM9NTY9aW50IF9faW5pdCBhbWRfbnVtYV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYy0xMDgtXHRcdH1cbmFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmM6MTA5Olx0XHRpZiAobm9kZV9pc3NldChub2RlaWQsIG51bWFfbm9kZXNfcGFyc2VkKSkge1xuYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYy0xMTAtXHRcdFx0cHJfaW5mbyhcJiMzNDtOb2RlICVkIGFscmVhZHkgcHJlc2VudCwgc2tpcHBpbmdcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM9MTA2PXN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X2lycV9yb3V0ZShpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbW5vZGUsIG5vZGVtYXNrX3QgKm5vZGVfbWFwKVxuLS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jLTEyMS1cdFx0bm9kZSA9IGNwdV90b19laW9fbm9kZShpKTtcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jOjEyMjpcdFx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICpub2RlX21hcCkpXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYy0xMjMtXHRcdFx0Y29udGludWU7XG4tLVxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM9MTg4PXN0YXRpYyBpbnQgZWlvaW50Y19pbmRleChpbnQgbm9kZSlcbi0tXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYy0xOTItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9waWNzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM6MTkzOlx0XHRpZiAobm9kZV9pc3NldChub2RlLCBlaW9pbnRjX3ByaXZbaV0tXHUwMDNlbm9kZV9tYXApKVxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmMtMTk0LVx0XHRcdHJldHVybiBpO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zMzQyPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqY2FuX2dhdGhlcl9udW1hX3N0YXRzKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMzNTgtXHRuaWQgPSBwYWdlX3RvX25pZChwYWdlKTtcbmZzL3Byb2MvdGFza19tbXUuYzozMzU5Olx0aWYgKCFub2RlX2lzc2V0KG5pZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcbmZzL3Byb2MvdGFza19tbXUuYy0zMzYwLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzM2Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKmNhbl9nYXRoZXJfbnVtYV9zdGF0c19wbWQocG1kX3QgcG1kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMzgzLVx0bmlkID0gcGFnZV90b19uaWQocGFnZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM4NDpcdGlmICghbm9kZV9pc3NldChuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM4NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTI1LSAqIHZvaWQgbm9kZXNfY2xlYXIobWFzaylcdFx0Y2xlYXIgYWxsIGJpdHNcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDoyNjogKiBpbnQgbm9kZV9pc3NldChub2RlLCBtYXNrKVx0XHR0cnVlIGlmZiBiaXQgJiMzOTtub2RlJiMzOTsgc2V0IGluIG1hc2tcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0yNy0gKiBib29sIG5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG1hc2spXHR0ZXN0IGFuZCBzZXQgYml0ICYjMzk7bm9kZSYjMzk7IGluIG1hc2tcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNzctICogU3VidGxldHk6XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6Nzg6ICogMSkgVGhlICYjMzk7dHlwZS1jaGVja2VkJiMzOTsgZm9ybSBvZiBub2RlX2lzc2V0KCkgY2F1c2VzIGdjYyAoMy4zLjIsIGFueXdheSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC03OS0gKiAgICB0byBnZW5lcmF0ZSBzbGlnaHRseSB3b3JzZSBjb2RlLiAgU28gdXNlIGEgc2ltcGxlIG9uZS1saW5lICNkZWZpbmVcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo4MDogKiAgICBmb3Igbm9kZV9pc3NldCgpLCBpbnN0ZWFkIG9mIHdyYXBwaW5nIGFuIGlubGluZSBpbnNpZGUgYSBtYWNybywgdGhlXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtODEtICogICAgd2F5IHdlIGRvIHRoZSBvdGhlciBjYWxscy5cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg9MTQzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX25vZGVzX2NsZWFyKG5vZGVtYXNrX3QgKmRzdHAsIHVuc2lnbmVkIGludCBuYml0cylcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMTQ4LS8qIE5vIHN0YXRpYyBpbmxpbmUgdHlwZSBjaGVja2luZyAtIHNlZSBTdWJ0bGV0eSAoMSkgYWJvdmUuICovXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6MTQ5OiNkZWZpbmUgbm9kZV9pc3NldChub2RlLCBub2RlbWFzaykgdGVzdF9iaXQoKG5vZGUpLCAobm9kZW1hc2spLmJpdHMpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMTUwLVxuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00MDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDgte1xuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwOTpcdHJldHVybiBub2RlX2lzc2V0KG5vZGUsIG5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEwLX1cbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQyMjY9Ym9vbCBjcHVzZXRfY3VycmVudF9ub2RlX2FsbG93ZWQoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDIzMy1cdFx0cmV0dXJuIHRydWU7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyMzQ6XHRpZiAobm9kZV9pc3NldChub2RlLCBjdXJyZW50LVx1MDAzZW1lbXNfYWxsb3dlZCkpXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyMzUtXHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDI1My1cdGNzID0gbmVhcmVzdF9oYXJkd2FsbF9hbmNlc3Rvcih0YXNrX2NzKGN1cnJlbnQpKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDI1NDpcdGFsbG93ZWQgPSBub2RlX2lzc2V0KG5vZGUsIGNzLVx1MDAzZW1lbXNfYWxsb3dlZCk7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyNTUtXG4tLVxubW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTE4MDMtXHQgKi9cbm1tL2h1Z2V0bGIuYzoxODA0Olx0aWYgKG5vZGVfYWxsb2Nfbm9yZXRyeSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpub2RlX2FsbG9jX25vcmV0cnkpKVxubW0vaHVnZXRsYi5jLTE4MDUtXHRcdGFsbG9jX3RyeV9oYXJkID0gZmFsc2U7XG4tLVxubW0vaHVnZXRsYi5jPTQ1MDA9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtNDUwOS1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbm1tL2h1Z2V0bGIuYzo0NTEwOlx0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbm1tL2h1Z2V0bGIuYy00NTExLVx0XHRcdG5yICYjNDM7PSBhcnJheVtub2RlXTtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI3PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0zOS1cbm1tL2h1Z2V0bGJfY21hLmM6NDA6XHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpXG5tbS9odWdldGxiX2NtYS5jLTQxLVx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNDY9dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTc2LVxubW0vaHVnZXRsYl9jbWEuYzoxNzc6XHRcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcbm1tL2h1Z2V0bGJfY21hLmMtMTc4LVx0XHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IGludmFsaWQgbm9kZSAlZCBzcGVjaWZpZWRcXG5cJiMzNDssIG5pZCk7XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTM5PXN0YXRpYyBpbmxpbmUgaW50IGdldF92YWxpZF9ub2RlX2FsbG93ZWQoaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZClcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC00MC17XG5tbS9odWdldGxiX2ludGVybmFsLmg6NDE6XHRpZiAoIW5vZGVfaXNzZXQobmlkLCAqbm9kZXNfYWxsb3dlZCkpXG5tbS9odWdldGxiX2ludGVybmFsLmgtNDItXHRcdG5pZCA9IG5leHRfbm9kZV9hbGxvd2VkKG5pZCwgbm9kZXNfYWxsb3dlZCk7XG4tLVxubW0vbWVtcG9saWN5LmM9NjQzPXN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9mb2xpb19yZXF1aXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbXBvbGljeS5jLTY0OC1cbm1tL21lbXBvbGljeS5jOjY0OTpcdHJldHVybiBub2RlX2lzc2V0KG5pZCwgKnFwLVx1MDAzZW5tYXNrKSA9PSAhKGZsYWdzIFx1MDAyNiBNUE9MX01GX0lOVkVSVCk7XG5tbS9tZW1wb2xpY3kuYy02NTAtfVxuLS1cbm1tL21lbXBvbGljeS5jPTEzMzY9aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG4tLVxubW0vbWVtcG9saWN5LmMtMTM5OS1cdFx0XHRpZiAoKG5vZGVzX3dlaWdodCgqZnJvbSkgIT0gbm9kZXNfd2VpZ2h0KCp0bykpIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmM6MTQwMDpcdFx0XHRcdFx0XHQobm9kZV9pc3NldChzLCAqdG8pKSlcbm1tL21lbXBvbGljeS5jLTE0MDEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDEwLVx0XHRcdC8qIGRlc3Qgbm90IGluIHJlbWFpbmluZyBmcm9tIG5vZGVzPyAqL1xubW0vbWVtcG9saWN5LmM6MTQxMTpcdFx0XHRpZiAoIW5vZGVfaXNzZXQoZGVzdCwgdG1wKSlcbm1tL21lbXBvbGljeS5jLTE0MTItXHRcdFx0XHRicmVhaztcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTAwPXN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vbWVtcG9saWN5LmMtMjEwOC1cdG5vZGUgPSBjdXJyZW50LVx1MDAzZWlsX3ByZXY7XG5tbS9tZW1wb2xpY3kuYzoyMTA5Olx0aWYgKCFjdXJyZW50LVx1MDAzZWlsX3dlaWdodCB8fCAhbm9kZV9pc3NldChub2RlLCBwb2xpY3ktXHUwMDNlbm9kZXMpKSB7XG5tbS9tZW1wb2xpY3kuYy0yMTEwLVx0XHRub2RlID0gbmV4dF9ub2RlX2luKG5vZGUsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjQ0NT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX21wb2woZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vbWVtcG9saWN5LmMtMjQ3MC1cdFx0ICAgIHBvbC1cdTAwM2Vtb2RlICE9IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jOjI0NzE6XHRcdCAgICAoIW5vZGVtYXNrIHx8IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKSkge1xubW0vbWVtcG9saWN5LmMtMjQ3Mi1cdFx0XHQvKlxuLS1cbm1tL21lbXBvbGljeS5jPTI2MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjY2LVx0d2VpZ2h0ID0gbWUtXHUwMDNlaWxfd2VpZ2h0O1xubW0vbWVtcG9saWN5LmM6MjY2NzpcdGlmICh3ZWlnaHQgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgbm9kZXMpKSB7XG5tbS9tZW1wb2xpY3kuYy0yNjY4LVx0XHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yOTg0PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDE1LVx0Y2FzZSBNUE9MX1BSRUZFUlJFRDpcbm1tL21lbXBvbGljeS5jOjMwMTY6XHRcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVx1MDAzZW5vZGVzKSlcbm1tL21lbXBvbGljeS5jLTMwMTctXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vbWVtcG9saWN5LmMtMzA0MC1cdFx0XHQgKi9cbm1tL21lbXBvbGljeS5jOjMwNDE6XHRcdFx0aWYgKG5vZGVfaXNzZXQodGhpc25pZCwgcG9sLVx1MDAzZW5vZGVzKSlcbm1tL21lbXBvbGljeS5jLTMwNDItXHRcdFx0XHRicmVhaztcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDUwLVx0XHQgKi9cbm1tL21lbXBvbGljeS5jOjMwNTE6XHRcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVx1MDAzZW5vZGVzKSlcbm1tL21lbXBvbGljeS5jLTMwNTItXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vbWlncmF0ZS5jPTIzNDc9c3RhdGljIGludCBkb19wYWdlc19tb3ZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBub2RlbWFza190IHRhc2tfbm9kZXMsXG4tLVxubW0vbWlncmF0ZS5jLTIzODYtXHRcdGVyciA9IC1FQUNDRVM7XG5tbS9taWdyYXRlLmM6MjM4NzpcdFx0aWYgKCFub2RlX2lzc2V0KG5vZGUsIHRhc2tfbm9kZXMpKVxubW0vbWlncmF0ZS5jLTIzODgtXHRcdFx0Z290byBvdXRfZmx1c2g7XG4tLVxubW0vbW16b25lLmM9NDY9c3RhdGljIGlubGluZSBpbnQgenJlZl9pbl9ub2RlbWFzayhzdHJ1Y3Qgem9uZXJlZiAqenJlZiwgbm9kZW1hc2tfdCAqbm9kZXMpXG4tLVxubW0vbW16b25lLmMtNDgtI2lmZGVmIENPTkZJR19OVU1BXG5tbS9tbXpvbmUuYzo0OTpcdHJldHVybiBub2RlX2lzc2V0KHpvbmVsaXN0X25vZGVfaWR4KHpyZWYpLCAqbm9kZXMpO1xubW0vbW16b25lLmMtNTAtI2Vsc2Vcbi0tXG5tbS9udW1hX21lbWJsa3MuYz0zMzU9c3RhdGljIHZvaWQgX19pbml0IG51bWFfY2xlYXJfa2VybmVsX25vZGVfaG90cGx1Zyh2b2lkKVxuLS1cbm1tL251bWFfbWVtYmxrcy5jLTM5MC1cbm1tL251bWFfbWVtYmxrcy5jOjM5MTpcdFx0aWYgKCFub2RlX2lzc2V0KG1iLVx1MDAzZW5pZCwgcmVzZXJ2ZWRfbm9kZW1hc2spKVxubW0vbnVtYV9tZW1ibGtzLmMtMzkyLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01NjcwPWludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTY3OS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjU2ODA6XHRpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSBcdTAwMjZcdTAwMjYgbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkpIHtcbm1tL3BhZ2VfYWxsb2MuYy01NjgxLVx0XHRub2RlX3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy01Njg3LVx0XHQvKiBEb24mIzM5O3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXG5tbS9wYWdlX2FsbG9jLmM6NTY4ODpcdFx0aWYgKG5vZGVfaXNzZXQobiwgKnVzZWRfbm9kZV9tYXNrKSlcbm1tL3BhZ2VfYWxsb2MuYy01Njg5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Nob3dfbWVtLmMtMTMxLVxubW0vc2hvd19tZW0uYzoxMzI6XHRyZXR1cm4gIW5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spO1xubW0vc2hvd19tZW0uYy0xMzMtfVxuLS1cbm1tL3NsdWIuYz00MTIzPXN0YXRpYyBpbnQgc2x1Yl9jcHVfc2V0dXAodW5zaWduZWQgaW50IGNwdSlcbi0tXG5tbS9zbHViLmMtNDEzMi1cdCAqL1xubW0vc2x1Yi5jOjQxMzM6XHRpZiAobm9kZV9pc3NldChuaWQsIHNsYWJfYmFybl9ub2RlcykpXG5tbS9zbHViLmMtNDEzNC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vc2x1Yi5jLTQxMzctXG5tbS9zbHViLmM6NDEzODpcdGlmIChub2RlX2lzc2V0KG5pZCwgc2xhYl9iYXJuX25vZGVzKSlcbm1tL3NsdWIuYy00MTM5LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9zbHViLmM9NDUyOT1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtNDU0OC1cdFx0XHRpZiAobXBvbC1cdTAwM2Vtb2RlICE9IE1QT0xfQklORCB8fFxubW0vc2x1Yi5jOjQ1NDk6XHRcdFx0XHRcdCFub2RlX2lzc2V0KG51bWFfbWVtX2lkKCksIG1wb2wtXHUwMDNlbm9kZXMpKVxubW0vc2x1Yi5jLTQ1NTAtXHRcdFx0XHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xuLS1cbm1tL3NsdWIuYz00NzU2PXZvaWQgKmFsbG9jX2Zyb21fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXG4tLVxubW0vc2x1Yi5jLTQ3NzYtXHRcdFx0aWYgKG1wb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcbm1tL3NsdWIuYzo0Nzc3Olx0XHRcdFx0XHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVx1MDAzZW5vZGVzKSlcbm1tL3NsdWIuYy00Nzc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBvZiBgbm9kZV9pc3NldGAgaW4gS2VybmVsIENvZGUqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbm9kZV9pc3NldGAgaXMgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbm9kZW1hc2suaGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJbnRlcmVzdGluZyB0aGF0IGl0JiMzOTtzIGRlZmluZWQgdGhlcmUsIGJlY2F1c2UgSSBhbHdheXMgYXNzdW1lZCB0aGF0IGl0IHdhcyBpbmhlcmVudGx5IHRpZWQgdG8gTlVNQS4gSXQgc2VlbXMgYENPTkZJR19OVU1BYCBpc24mIzM5O3QgYSAqc3RyaWN0KiByZXF1aXJlbWVudCBmb3IgaXRzIGV4aXN0ZW5jZSwgYnV0IGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgdXNlcyBgbm9kZW1hc2tfdGAgYW5kIGBub2RlX3N0YXRlc2AuIEhtbSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgYG5vZGVfc3RhdGVzYCBpcyBhbHNvIGRlZmluZWQgaW4gYG5vZGVtYXNrLmhgLiBUaGlzIGlzIG1ha2luZyBtZSByZWNvbnNpZGVyIHNvbWUgb2YgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX05VTUFgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGBodWdldGxiX2NtYS5jYCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byBgbW0vaHVnZXRsYl9jbWEuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGAjaWZkZWYgQ09ORklHX05VTUFgLiBUaGF0IHNob3VsZCBjbGVhciBpdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTlVNQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY21hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkzNgoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgaHVnZXRsYl9jbWEuYyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGBodWdldGxiX2NtYS5jYCBhbmQgaXRzIHVzZSBvZiBgaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW01BWF9OVU1OT0RFU11gLiBJIGtub3cgdGhhdCBpZiBgIUNPTkZJR19OVU1BYCwgdGhlbiBgTUFYX05VTU5PREVTYCBpcyBzZXQgdG8gMS4gVGhpcyBpcyBrZXkuIFNvLCB0aGUgY29kZSAqc2hvdWxkKiBmdW5jdGlvbiBldmVuIHdpdGhvdXQgTlVNQSBlbmFibGVkLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gTm93LCBteSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIGNvZGUmIzM5O3Mgb3BlcmF0aW9uYWwgcmVxdWlyZW1lbnRzIGFyZSBqdXN0IGBDTUFgIGFuZCBgSFVHRVRMQkZTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCkJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGJvb2xlYW4gY29uZmlnIG9wdGlvbnMsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGUgY2hlY2suIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgcHJlY2lzZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19DTUFgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0aW9uc2hpcHMgaGVyZSBpcyB2aXRhbCBmb3IgY29ycmVjdGx5IGludGVycHJldGluZyBpdHMgb3BlcmF0aW9uYWwgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9kbWEvS2NvbmZpZz0xNzM9Y29uZmlnIERNQV9OVU1BX0NNQVxuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZy0xODUtXG5rZXJuZWwvZG1hL0tjb25maWc6MTg2OmNvbmZpZyBDTUFfU0laRV9QRVJOVU1BXG5rZXJuZWwvZG1hL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtEZWZhdWx0IENNQSBhcmVhIHBlciBOVU1BIG5vZGVcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWc9MTk2PWNvbW1lbnQgXCYjMzQ7RGVmYXVsdCBjb250aWd1b3VzIG1lbW9yeSBhcmVhIHNpemU6XCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMTk3LVxua2VybmVsL2RtYS9LY29uZmlnOjE5ODpjb25maWcgQ01BX1NJWkVfTUJZVEVTXG5rZXJuZWwvZG1hL0tjb25maWctMTk5LVx0aW50IFwmIzM0O1NpemUgaW4gTWVnYSBCeXRlc1wmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMDgtXG5rZXJuZWwvZG1hL0tjb25maWc6MjA5OmNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFXG5rZXJuZWwvZG1hL0tjb25maWctMjEwLVx0aW50IFwmIzM0O1BlcmNlbnRhZ2Ugb2YgdG90YWwgbWVtb3J5XCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTIyMD1jaG9pY2Vcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjIzLVxua2VybmVsL2RtYS9LY29uZmlnOjIyNDpjb25maWcgQ01BX1NJWkVfU0VMX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTIyNS1cdGJvb2wgXCYjMzQ7VXNlIG1lZ2EgYnl0ZXMgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyNi1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjc6Y29uZmlnIENNQV9TSVpFX1NFTF9QRVJDRU5UQUdFXG5rZXJuZWwvZG1hL0tjb25maWctMjI4LVx0Ym9vbCBcJiMzNDtVc2UgcGVyY2VudGFnZSB2YWx1ZSBvbmx5XCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMjI5LVxua2VybmVsL2RtYS9LY29uZmlnOjIzMDpjb25maWcgQ01BX1NJWkVfU0VMX01JTlxua2VybmVsL2RtYS9LY29uZmlnLTIzMS1cdGJvb2wgXCYjMzQ7VXNlIGxvd2VyIHZhbHVlIChtaW5pbXVtKVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIzMi1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzM6Y29uZmlnIENNQV9TSVpFX1NFTF9NQVhcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzQtXHRib29sIFwmIzM0O1VzZSBoaWdoZXIgdmFsdWUgKG1heGltdW0pXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTIzNj1lbmRjaG9pY2Vcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzctXG5rZXJuZWwvZG1hL0tjb25maWc6MjM4OmNvbmZpZyBDTUFfQUxJR05NRU5UXG5rZXJuZWwvZG1hL0tjb25maWctMjM5LVx0aW50IFwmIzM0O01heGltdW0gUEFHRV9TSVpFIG9yZGVyIG9mIGFsaWdubWVudCBmb3IgY29udGlndW91cyBidWZmZXJzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuLS1cbm1tL0tjb25maWctMTA2Ni1cbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXG5tbS9LY29uZmlnLTEwNjgtXHRib29sIFwmIzM0O0NvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4MS1cbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcbm1tL0tjb25maWctMTA4My1cdGJvb2wgXCYjMzQ7Q01BIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDg3LVxubW0vS2NvbmZpZzoxMDg4OmNvbmZpZyBDTUFfU1lTRlNcbm1tL0tjb25maWctMTA4OS1cdGJvb2wgXCYjMzQ7Q01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDk0LVxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcbm1tL0tjb25maWctMTA5Ni1cdGludCBcJiMzNDtNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBub3cuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQ01BYCDigJMgdGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBjb25maWcgb3B0aW9uIGluIHRoaXMgc2NlbmFyaW8uIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIG15IGV4cGVyaWVuY2UgaXMga2lja2luZyBpbiwgYW5kIEkgaGF2ZSB0byBhc2sgbXlzZWxmIOKAkyB3aGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAsIGlmIGFueSwgYmV0d2VlbiBgQ01BYCBhbmQgYEhVR0VUTEJGU2A/IEFyZSB0aGV5IG9ydGhvZ29uYWw/IERvZXMgZW5hYmxpbmcgb25lIGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3RoZXI/IEFyZSB0aGVyZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBoZXJlPyBUaGlzIHJlbGF0aW9uc2hpcCByZXF1aXJlcyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0LCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMzOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIGZvciBIdWdlVExCIGFuZCBDTUEgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGtleSBwbGF5ZXIgaGVyZSBzZWVtcyB0byBiZSBgSFVHRVRMQkZTYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWcgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFdhaXQsIGhhbmcgb24uLi4gSSByZW1lbWJlciBgaHVnZXRsYl9jbWEuY2AgZ2V0cyBjb21waWxlZCAqY29uZGl0aW9uYWxseSosIHNwZWNpZmljYWxseSB3aGVuIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBvaW50LCBoaWdobGlnaHRpbmcgdGhlaXIgaW50ZXJwbGF5LiBIbW0sIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBtaWdodCBiZSBtaXNzaW5nPyBUaW1lIHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIG1hcCBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEdvdHRhIGJlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciBmbGFncyBvciBvcHRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoaXMgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjAyLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1MC1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNC1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDUtXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI3ODp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cbi0tXG5tbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmMtMTktc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xMzI9ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xMzMtXG5tbS9odWdldGxiX2NtYS5jOjEzNDpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTM2Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTEzNy19XG5tbS9odWdldGxiX2NtYS5jLTEzOC1cbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTQxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNDIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cbm1tL2h1Z2V0bGJfY21hLmM6MTU1Olx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cdGlmICghb3JkZXIpIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0yNjAte1xubW0vaHVnZXRsYl9jbWEuYzoyNjE6XHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjYyLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3MS1cdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmM6MjcyOlx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG5tbS9odWdldGxiX2NtYS5jLTI3My19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3OS1cbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjgxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxOTYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEdvb2QsIGdvb2QsIHdlJiMzOTt2ZSBnb3QgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgY29uZmlybWVkLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIGFjdHVhbGx5IGFjY2Vzc2libGUuIElzIGl0IGV4cG9ydGVkLCBvciBpcyBpdCBidXJpZWQgYXdheSBhcyBhIHN0YXRpYyBmdW5jdGlvbj8gQWxyaWdodCwgY2hlY2tpbmcgdGhlIHNvdXJjZeKApiBOb3BlLCBpdCYjMzk7cyBub3Qgc3RhdGljLiBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgbW0vaHVnZXRsYl9jbWEuaGAgYW5kIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLiBQZXJmZWN0ISBUaGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBmb2NhbCBwb2ludC4KCldhaXQsIHRob3VnaOKApiBhIHF1aWNrIHNhbml0eSBjaGVja+KApiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBieSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggKmlzKiBzdGF0aWMuIEhtbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXNuJiMzOTt0IGlubGluaW5nIHRoYXQsIGJlY2F1c2UgdGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzLiBIb2xkIG9uLiBPa2F5LCB0aGUgZnVuY3Rpb24gaXMgc3RhdGljLCBzbyBpdCAqY291bGQqIGJlIGlubGluZWQuIEJ1dCBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpdHNlbGYgaXMgKm5vdCogc3RhdGljLCBzbyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCBhY3Jvc3MgdHJhbnNsYXRpb24gdW5pdHMgdW5sZXNzIHdlJiMzOTtyZSB1c2luZyBMaW5rIFRpbWUgT3B0aW1pemF0aW9uIChMVE8pLiBBbmQgdGhhdCBtZWFucyB0aGF0IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0aWxsIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGdvdGNoYXMgdG8gY29uc2lkZXIgaGVyZS4gV2UgZG8gbmVlZCB0byBsb29rIGF0IGBDT05GSUdfTlVNQWAsIHNpbmNlIHRoZSBjb2RlIHVzZXMgYG5vZGVtYXNrYC4gTGV0IG1lIGNoZWNrIGBub2RlX3N0YXRlc2AuIEFscmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfc3RhdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0PTIyND1jcHVfb25saW5lX21hc2sgdXNpbmcgYSBDUFUgaG90cGx1ZyBub3RpZmllciwgYW5kIHRoZSBtZW1zIGZpbGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0OjIyNTphdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLS1pLmUuLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMjI2LW5vZGVzIHdpdGggbWVtb3J5LS11c2luZyB0aGUgY3B1c2V0X3RyYWNrX29ubGluZV9ub2RlcygpIGhvb2suXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdD00OD1ub2RlX29ubGluZV9tYXBcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tkdW1wL3ZtY29yZWluZm8ucnN0LTUwLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdDo1MTpBbiBhcnJheSBub2RlX3N0YXRlc1tOX09OTElORV0gd2hpY2ggcmVwcmVzZW50cyB0aGUgc2V0IG9mIG9ubGluZSBub2Rlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdC01Mi1pbiBhIHN5c3RlbSwgb25lIGJpdCBwb3NpdGlvbiBwZXIgbm9kZSBudW1iZXIuIFVzZWQgdG8ga2VlcCB0cmFjayBvZlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0xNTc9QWxvbmcgd2l0aCB0aGUgbm9kZSBzdHJ1Y3R1cmVzLCBrZXJuZWwgbWFpbnRhaW5zIGFuIGFycmF5IG9mIGBgbm9kZW1hc2tfdGBgXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTU4OmJpdG1hc2tzIGNhbGxlZCBgYG5vZGVfc3RhdGVzYGAuIEVhY2ggYml0bWFzayBpbiB0aGlzIGFycmF5IHJlcHJlc2VudHMgYSBzZXQgb2ZcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNTk6bm9kZXMgd2l0aCBwYXJ0aWN1bGFyIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBieSBgYGVudW0gbm9kZV9zdGF0ZXNgYDpcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNjAtXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTE3Nz1Gb3IgZWFjaCBub2RlIHRoYXQgaGFzIGEgcHJvcGVydHkgZGVzY3JpYmVkIGFib3ZlLCB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gdGhlXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc4Om5vZGUgSUQgaW4gdGhlIGBgbm9kZV9zdGF0ZXNbXHUwMDNjcHJvcGVydHlcdTAwM2VdYGAgYml0bWFzayBpcyBzZXQuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTc5LVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTE4MD1Gb3IgZXhhbXBsZSwgZm9yIG5vZGUgMiB3aXRoIG5vcm1hbCBtZW1vcnkgYW5kIENQVXMsIGJpdCAyIHdpbGwgYmUgc2V0IGluIDo6XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTgxLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4MjogIG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTgzOiAgbm9kZV9zdGF0ZXNbTl9PTkxJTkVdXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTg0OiAgbm9kZV9zdGF0ZXNbTl9OT1JNQUxfTUVNT1JZXVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4NTogIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTg2OiAgbm9kZV9zdGF0ZXNbTl9NRU1PUlldXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTg3OiAgbm9kZV9zdGF0ZXNbTl9DUFVdXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTg4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9OTU9UkFN5bmz5Z2H5YiG6YWN5Zyo5Lik5Liq6IqC54K55LiK55qEYXJtNjTmnLrlmajkuIrvvIzkvb/nlKggYGBtb3ZhYmxlY29yZT04MCVgYCDlj4LmlbBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0My1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTQ0OumZpOS6huiKgueCuee7k+aehO+8jOWGheaguOi/mOe7tOaKpOS6huS4gOS4quWQjeS4uiBgYG5vZGVfc3RhdGVzYGAg55qEIGBgbm9kZW1hc2tfdGBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0NS3kvY3mjqnnoIHmlbDnu4TjgILov5nkuKrmlbDnu4TkuK3nmoTmr4/kuKrkvY3mjqnnoIHku6PooajkuIDnu4TnibnlrprlsZ7mgKfnmoToioLngrnvvIzov5nkupvlsZ7mgKfnlLFcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTQ2OmBgZW51bSBub2RlX3N0YXRlc2BgIOWumuS5ie+8jOWumuS5ieWmguS4i++8mlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNDctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNjYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE2Nzrlr7nkuo7lhbfmnInkuIrov7DlsZ7mgKfnmoTmr4/kuKroioLngrnvvIxgYG5vZGVfc3RhdGVzW1x1MDAzY3Byb3BlcnR5XHUwMDNlXWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE2OC3mjqnnoIHkuK3lr7nlupTkuo7oioLngrlJROeahOS9jeS8muiiq+e9ruS9jeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTcxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzI6ICBub2RlX3N0YXRlc1tOX1BPU1NJQkxFXVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzM6ICBub2RlX3N0YXRlc1tOX09OTElORV1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc0OiAgbm9kZV9zdGF0ZXNbTl9OT1JNQUxfTUVNT1JZXVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzU6ICBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzY6ICBub2RlX3N0YXRlc1tOX01FTU9SWV1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc3OiAgbm9kZV9zdGF0ZXNbTl9DUFVdXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE3OC1cbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTk0ND1zdHJ1Y3Qgbm9kZV9hdHRyIHtcbmRyaXZlcnMvYmFzZS9ub2RlLmMtOTQ1LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjtcbmRyaXZlcnMvYmFzZS9ub2RlLmM6OTQ2Olx0ZW51bSBub2RlX3N0YXRlcyBzdGF0ZTtcbmRyaXZlcnMvYmFzZS9ub2RlLmMtOTQ3LX07XG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYz05NDk9c3RhdGljIHNzaXplX3Qgc2hvd19ub2RlX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTk1NC1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JSpwYmxcXG5cJiMzNDssXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjk1NTpcdFx0XHQgIG5vZGVtYXNrX3ByX2FyZ3MoXHUwMDI2bm9kZV9zdGF0ZXNbbmEtXHUwMDNlc3RhdGVdKSk7XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTk1Ni19XG4tLVxuZnMvbmZzL25mczRfZnMuaD0xODQ9c3RydWN0IG5mczRfc3RhdGUge1xuZnMvbmZzL25mczRfZnMuaC0xODUtXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fc3RhdGVzO1x0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIHN0YXRlX293bmVyICovXG5mcy9uZnMvbmZzNF9mcy5oOjE4NjpcdHN0cnVjdCBsaXN0X2hlYWQgaW5vZGVfc3RhdGVzO1x0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIGlub2RlICovXG5mcy9uZnMvbmZzNF9mcy5oLTE4Ny1cdHN0cnVjdCBsaXN0X2hlYWQgbG9ja19zdGF0ZXM7XHQvKiBMaXN0IG9mIHN1YnNlcnZpZW50IGxvY2sgc3RhdGVpZHMgKi9cbi0tXG5mcy9uZnMvbmZzNHN0YXRlLmM9NjQyPV9fbmZzNF9maW5kX3N0YXRlX2J5b3duZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKm93bmVyKVxuLS1cbmZzL25mcy9uZnM0c3RhdGUuYy02NDYtXG5mcy9uZnMvbmZzNHN0YXRlLmM6NjQ3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhdGUsIFx1MDAyNm5mc2ktXHUwMDNlb3Blbl9zdGF0ZXMsIGlub2RlX3N0YXRlcykge1xuZnMvbmZzL25mczRzdGF0ZS5jLTY0OC1cdFx0aWYgKHN0YXRlLVx1MDAzZW93bmVyICE9IG93bmVyKVxuLS1cbmZzL25mcy9uZnM0c3RhdGUuYz02NjU9bmZzNF9nZXRfb3Blbl9zdGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqb3duZXIpXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jLTY4NC1cdFx0c3RhdGUtXHUwMDNlaW5vZGUgPSBpbm9kZTtcbmZzL25mcy9uZnM0c3RhdGUuYzo2ODU6XHRcdGxpc3RfYWRkX3JjdShcdTAwMjZzdGF0ZS1cdTAwM2Vpbm9kZV9zdGF0ZXMsIFx1MDAyNm5mc2ktXHUwMDNlb3Blbl9zdGF0ZXMpO1xuZnMvbmZzL25mczRzdGF0ZS5jLTY4Ni1cdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi0tXG5mcy9uZnMvbmZzNHN0YXRlLmM9NzAxPXZvaWQgbmZzNF9wdXRfb3Blbl9zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jLTcwOC1cdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuZnMvbmZzL25mczRzdGF0ZS5jOjcwOTpcdGxpc3RfZGVsX3JjdShcdTAwMjZzdGF0ZS1cdTAwM2Vpbm9kZV9zdGF0ZXMpO1xuZnMvbmZzL25mczRzdGF0ZS5jLTcxMC1cdGxpc3RfZGVsKFx1MDAyNnN0YXRlLVx1MDAzZW9wZW5fc3RhdGVzKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzM0Mj1zdGF0aWMgc3RydWN0IHBhZ2UgKmNhbl9nYXRoZXJfbnVtYV9zdGF0cyhwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMzU4LVx0bmlkID0gcGFnZV90b19uaWQocGFnZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM1OTpcdGlmICghbm9kZV9pc3NldChuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM2MC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMzNjY9c3RhdGljIHN0cnVjdCBwYWdlICpjYW5fZ2F0aGVyX251bWFfc3RhdHNfcG1kKHBtZF90IHBtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM4My1cdG5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpO1xuZnMvcHJvYy90YXNrX21tdS5jOjMzODQ6XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKVxuZnMvcHJvYy90YXNrX21tdS5jLTMzODUtXHRcdHJldHVybiBOVUxMO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE5PXN0YXRpYyBpbmxpbmUgbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTIyMy1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjI0OiNkZWZpbmUgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIChub2RlX3N0YXRlc1tOX01FTU9SWV0pXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTIyNS1zdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCkge31cbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X25vZGVzX2FsbG93ZWQoc3RydWN0IGNncm91cCAqY2dyb3VwLCBub2RlbWFza190ICptYXNrKVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDMte1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDozMDQ6XHRub2Rlc19jb3B5KCptYXNrLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDUtfVxuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD0zNjU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fbm9kZXNfZm9sZChub2RlbWFza190ICpkc3RwLCBjb25zdCBub2RlbWFza190ICpvcmlncCxcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMzgzLSAqL1xuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjM4NDplbnVtIG5vZGVfc3RhdGVzIHtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0zODUtXHROX1BPU1NJQkxFLFx0XHQvKiBUaGUgbm9kZSBjb3VsZCBiZWNvbWUgb25saW5lIGF0IHNvbWUgcG9pbnQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDAzLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwNDpleHRlcm4gbm9kZW1hc2tfdCBub2RlX3N0YXRlc1tOUl9OT0RFX1NUQVRFU107XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDA1LVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQwNi0jaWYgTUFYX05VTU5PREVTIFx1MDAzZSAxXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDA3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IG5vZGVfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDA4LXtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MDk6XHRyZXR1cm4gbm9kZV9pc3NldChub2RlLCBub2RlX3N0YXRlc1tzdGF0ZV0pO1xuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQxMC19XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDExLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQxMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbm9kZV9zZXRfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEzLXtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTQ6XHRfX25vZGVfc2V0KG5vZGUsIFx1MDAyNm5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDE1LX1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MTYtXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDE3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX2NsZWFyX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQxOC17XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDE5Olx0X19ub2RlX2NsZWFyKG5vZGUsIFx1MDAyNm5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDIwLX1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MjEtXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDIyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IG51bV9ub2RlX3N0YXRlKGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDIzLXtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MjQ6XHRyZXR1cm4gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDI1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDI3LSNkZWZpbmUgZm9yX2VhY2hfbm9kZV9zdGF0ZShfX25vZGUsIF9fc3RhdGUpIFxcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDI4Olx0Zm9yX2VhY2hfbm9kZV9tYXNrKChfX25vZGUpLCBub2RlX3N0YXRlc1tfX3N0YXRlXSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MjktXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDMwOiNkZWZpbmUgZmlyc3Rfb25saW5lX25vZGVcdGZpcnN0X25vZGUobm9kZV9zdGF0ZXNbTl9PTkxJTkVdKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQzMTojZGVmaW5lIGZpcnN0X21lbW9yeV9ub2RlXHRmaXJzdF9ub2RlKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MzItc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9vbmxpbmVfbm9kZShpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQzMy17XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDM0Olx0cmV0dXJuIG5leHRfbm9kZShuaWQsIG5vZGVfc3RhdGVzW05fT05MSU5FXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDM1LX1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00MzY9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9tZW1vcnlfbm9kZShpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQzNy17XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDM4Olx0cmV0dXJuIG5leHRfbm9kZShuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDM5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg9NDUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX3NldF9vZmZsaW5lKGludCBuaWQpXG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ1Ny1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NTg6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NTkte1xuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjItXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDYzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX3NldF9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjQte1xuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjYtXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDY3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX2NsZWFyX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ2OC17XG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ3MC1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NzE6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbnVtX25vZGVfc3RhdGUoZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NzIte1xuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00OTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9yYW5kb20oY29uc3Qgbm9kZW1hc2tfdCAqbWFza3ApXG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTUwMS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo1MDI6I2RlZmluZSBub2RlX29ubGluZV9tYXAgXHRub2RlX3N0YXRlc1tOX09OTElORV1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo1MDM6I2RlZmluZSBub2RlX3Bvc3NpYmxlX21hcCBcdG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNTA0LVxuLS1cbmluaXQvbWFpbi5jPTE2Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGtlcm5lbF9pbml0X2ZyZWVhYmxlKHZvaWQpXG4tLVxuaW5pdC9tYWluLmMtMTYzNi1cdCAqL1xuaW5pdC9tYWluLmM6MTYzNzpcdHNldF9tZW1zX2FsbG93ZWQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbmluaXQvbWFpbi5jLTE2MzgtXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00Njk9c3RhdGljIHZvaWQgZ3VhcmFudGVlX2FjdGl2ZV9jcHVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDk0LSAqIE9uZSB3YXkgb3IgYW5vdGhlciwgd2UgZ3VhcmFudGVlIHRvIHJldHVybiBzb21lIG5vbi1lbXB0eSBzdWJzZXRcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDk1OiAqIG9mIG5vZGVfc3RhdGVzW05fTUVNT1JZXS5cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDk2LSAqXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00OTk9c3RhdGljIHZvaWQgZ3VhcmFudGVlX29ubGluZV9tZW1zKHN0cnVjdCBjcHVzZXQgKmNzLCBub2RlbWFza190ICpwbWFzaylcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNTAwLXtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NTAxOlx0d2hpbGUgKCFub2Rlc19hbmQoKnBtYXNrLCBjcy1cdTAwM2VlZmZlY3RpdmVfbWVtcywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNTAyLVx0XHRjcyA9IHBhcmVudF9jcyhjcyk7XG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0zODcwPXN0YXRpYyB2b2lkIGNwdXNldF9oYW5kbGVfaG90cGx1Zyh2b2lkKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzg4Ni1cdGNwdW1hc2tfY29weShcdTAwMjZuZXdfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzg4NzpcdG5ld19tZW1zID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zODg4LVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9Mzk3Nz12b2lkIGNwdXNldF91cGRhdGVfYWN0aXZlX2NwdXModm9pZClcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM5ODctLypcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzk4ODogKiBLZWVwIHRvcF9jcHVzZXQubWVtc19hbGxvd2VkIHRyYWNraW5nIG5vZGVfc3RhdGVzW05fTUVNT1JZXS5cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzk4OTogKiBDYWxsIHRoaXMgcm91dGluZSBhbnl0aW1lIGFmdGVyIG5vZGVfc3RhdGVzW05fTUVNT1JZXSBjaGFuZ2VzLlxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zOTkwLSAqIFNlZSBjcHVzZXRfdXBkYXRlX2FjdGl2ZV9jcHVzKCkgZm9yIENQVSBob3RwbHVnIGhhbmRsaW5nLlxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDAwND12b2lkIF9faW5pdCBjcHVzZXRfaW5pdF9zbXAodm9pZClcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQwMTMtXHRjcHVtYXNrX2NvcHkodG9wX2NwdXNldC5lZmZlY3RpdmVfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDAxNDpcdHRvcF9jcHVzZXQuZWZmZWN0aXZlX21lbXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQwMTUtXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00MTMyPXZvaWQgX19pbml0IGNwdXNldF9pbml0X2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MTQyLSAqIGF0dGFjaGVkIHRvIHRoZSBzcGVjaWZpZWQgQHRzay4gIEd1YXJhbnRlZWQgdG8gcmV0dXJuIHNvbWUgbm9uLWVtcHR5XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQxNDM6ICogc3Vic2V0IG9mIG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgZXZlbiBpZiB0aGlzIG1lYW5zIGdvaW5nIG91dHNpZGUgdGhlXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQxNDQtICogdGFza3MgY3B1c2V0LlxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDIyNj1ib29sIGNwdXNldF9jdXJyZW50X25vZGVfYWxsb3dlZChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjY1LSAqIFJldHVybnMgZWZmZWN0aXZlX21lbXMgbWFzayBmcm9tIGEgY2dyb3VwIGNwdXNldCBpZiBpdCBpcyBjZ3JvdXAgdjIgYW5kXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyNjY6ICogaGFzIGNwdXNldCBzdWJzeXMuIE90aGVyd2lzZSwgcmV0dXJucyBub2RlX3N0YXRlc1tOX01FTU9SWV0uXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyNjctICpcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQyNzg9dm9pZCBjcHVzZXRfbm9kZXNfYWxsb3dlZChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIG5vZGVtYXNrX3QgKm1hc2spXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjg4LVx0aWYgKCFjZ3JvdXAgfHwgIWNwdXNldF92MigpKSB7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyODk6XHRcdG5vZGVzX2NvcHkoKm1hc2ssIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyOTAtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyOTQtXHRpZiAoIWNzcykge1xua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0Mjk1Olx0XHRub2Rlc19jb3B5KCptYXNrLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjk2LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2t0aHJlYWQuYz03ODc9aW50IGt0aHJlYWRkKHZvaWQgKnVudXNlZClcbi0tXG5rZXJuZWwva3RocmVhZC5jLTc5NC1cdGlnbm9yZV9zaWduYWxzKHRzayk7XG5rZXJuZWwva3RocmVhZC5jOjc5NTpcdHNldF9tZW1zX2FsbG93ZWQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbmtlcm5lbC9rdGhyZWFkLmMtNzk2LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODEtXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY4MjpcdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICYjNDM7IDI7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4My1cdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcbi0tXG5rZXJuZWwvcGFkYXRhLmM9NDQ0PXZvaWQgX19pbml0IHBhZGF0YV9kb19tdWx0aXRocmVhZGVkKHN0cnVjdCBwYWRhdGFfbXRfam9iICpqb2IpXG4tLVxua2VybmVsL3BhZGF0YS5jLTQ5MC1cdFx0XHRkbyB7XG5rZXJuZWwvcGFkYXRhLmM6NDkxOlx0XHRcdFx0bmlkID0gbmV4dF9ub2RlX2luKG9sZF9ub2RlLCBub2RlX3N0YXRlc1tOX0NQVV0pO1xua2VybmVsL3BhZGF0YS5jLTQ5Mi1cdFx0XHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmxhc3RfdXNlZF9uaWQsIFx1MDAyNm9sZF9ub2RlLCBuaWQpKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz0xNTA9c3RhdGljIHMzMiBwaWNrX2lkbGVfY3B1X2Zyb21fb25saW5lX25vZGVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzX2FsbG93ZWQsIGludCBub2RlLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTYxLVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNjI6XHRub2Rlc19jb3B5KCp1bnZpc2l0ZWQsIG5vZGVfc3RhdGVzW05fT05MSU5FXSk7XG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy0xNjMtXHRub2RlX2NsZWFyKG5vZGUsICp1bnZpc2l0ZWQpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzU1Nj1zdGF0aWMgaW50IHByZWZlcnJlZF9ncm91cF9uaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzU5NC1cdCAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzozNTk1Olx0bm9kZXMgPSBub2RlX3N0YXRlc1tOX0NQVV07XG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1OTYtXHRmb3IgKGRpc3QgPSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsgZGlzdCBcdTAwM2UgTE9DQUxfRElTVEFOQ0U7IGRpc3QtLSkge1xuLS1cbm1tL2h1Z2V0bGIuYz0yMzUwPXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMzc5LVxubW0vaHVnZXRsYi5jOjIzODA6XHRcdGZvbGlvID0gcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhoLCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIDEpO1xubW0vaHVnZXRsYi5jLTIzODEtXHRcdGlmICghZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTMzNzI9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzM4Ni1cdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxubW0vaHVnZXRsYi5jOjMzODc6XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG5tbS9odWdldGxiLmMtMzM4OC1cdFx0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZmb2xpb19saXN0KSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9odWdldGxiLmMtMzM5Mi1cdFx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmM6MzM5MzpcdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xubW0vaHVnZXRsYi5jLTMzOTQtXHRcdFx0fVxuLS1cbm1tL2h1Z2V0bGIuYz0zNDQyPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX3BhZ2VzX2FsbG9jX2Jvb3Rfbm9kZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNDYwLVx0XHR9XG5tbS9odWdldGxiLmM6MzQ2MTpcdFx0Zm9saW8gPSBhbGxvY19wb29sX2h1Z2VfZm9saW8oaCwgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLFxubW0vaHVnZXRsYi5jLTM0NjItXHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9hbGxvY19ub3JldHJ5LCBcdTAwMjZuZXh0X25vZGUpO1xuLS1cbm1tL2h1Z2V0bGIuYz00MDQ3PXNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYi5jLTQwNjItXHRcdFx0XHRpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShcdTAwMjZub2Rlc19hbGxvd2VkKSkpXG5tbS9odWdldGxiLmM6NDA2MzpcdFx0XHRuX21hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG5tbS9odWdldGxiLmMtNDA2NC1cdFx0ZWxzZVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjc9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiX2NtYS5jLTM3LVx0aWYgKCFub2RlbWFzaylcbm1tL2h1Z2V0bGJfY21hLmM6Mzg6XHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xubW0vaHVnZXRsYl9jbWEuYy0zOS1cbi0tXG5tbS9odWdldGxiX3N5c2ZzLmM9MTgxPXN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMTk5LVx0fSBlbHNlIHtcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMDA6XHRcdG5fbWFzayA9IFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMDEtXHR9XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9NDI1PXN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDU3LVx0XHQgKi9cbm1tL21lbW9yeS10aWVycy5jOjQ1ODpcdFx0bm9kZXNfYW5kbm90KHRpZXJfbm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgdGllcl9ub2Rlcyk7XG5tbS9tZW1vcnktdGllcnMuYy00NTktXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDg4LVx0XHR0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7XG5tbS9tZW1vcnktdGllcnMuYzo0ODk6XHRcdGlmIChub2Rlc19hbmQodGllcl9ub2Rlcywgbm9kZV9zdGF0ZXNbTl9DUFVdLCB0aWVyX25vZGVzKSkge1xubW0vbWVtb3J5LXRpZXJzLmMtNDkwLVx0XHRcdC8qXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNTA0LVx0ICovXG5tbS9tZW1vcnktdGllcnMuYzo1MDU6XHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xubW0vbWVtb3J5LXRpZXJzLmMtNTA2LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcbi0tXG5tbS9tZW1vcnktdGllcnMuYz05MDY9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfaW5pdCh2b2lkKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTkzMC1cdC8qIFJlY29yZCBub2RlcyB3aXRoIG1lbW9yeSBhbmQgQ1BVIHRvIHNldCBkZWZhdWx0IERSQU0gcGVyZm9ybWFuY2UuICovXG5tbS9tZW1vcnktdGllcnMuYzo5MzE6XHRub2Rlc19hbmQoZGVmYXVsdF9kcmFtX25vZGVzLCBub2RlX3N0YXRlc1tOX01FTU9SWV0sXG5tbS9tZW1vcnktdGllcnMuYzo5MzI6XHRcdCAgbm9kZV9zdGF0ZXNbTl9DUFVdKTtcbm1tL21lbW9yeS10aWVycy5jLTkzMy1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3OTM9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg0NC1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZzb3VyY2UpKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE4NDU6XHRcdG5vZGVtYXNrX3Qgbm1hc2sgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NDYtXHRcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xuLS1cbm1tL21lbXBvbGljeS5jPTQwND1zdGF0aWMgaW50IG1wb2xfc2V0X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCxcbi0tXG5tbS9tZW1wb2xpY3kuYy00MTgtXHRub2Rlc19hbmQobnNjLVx1MDAzZW1hc2sxLFxubW0vbWVtcG9saWN5LmM6NDE5Olx0XHQgIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbm1tL21lbXBvbGljeS5jLTQyMC1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDgwPWJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxuLS1cbm1tL21lbXBvbGljeS5jLTIwODktXHQgKlxubW0vbWVtcG9saWN5LmM6MjA5MDpcdCAqIHBvbGljeS1cdTAwM2Vub2RlcyBpcyBpbnRlcnNlY3Qgd2l0aCBub2RlX3N0YXRlc1tOX01FTU9SWV0uXG5tbS9tZW1wb2xpY3kuYy0yMDkxLVx0ICogc28gaWYgdGhlIGZvbGxvd2luZyB0ZXN0IGZhaWxzLCBpdCBpbXBsaWVzXG4tLVxubW0vbWVtcG9saWN5LmMtMjA5My1cdCAqL1xubW0vbWVtcG9saWN5LmM6MjA5NDpcdGlmICghbm9kZXNfaW50ZXJzZWN0cyhwb2xpY3ktXHUwMDNlbm9kZXMsIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldKSlcbm1tL21lbXBvbGljeS5jLTIwOTUtXHRcdGR5bmFtaWNfcG9saWN5X3pvbmUgPSBaT05FX01PVkFCTEU7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQxOT1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNDM1LVx0XHRcdGdvdG8gb3V0O1xubW0vbWVtcG9saWN5LmM6MzQzNjpcdFx0aWYgKCFub2Rlc19zdWJzZXQobm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXG5tbS9tZW1wb2xpY3kuYy0zNDM3LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm1tL21lbXBvbGljeS5jLTM0NjctXHRcdGlmICghbm9kZWxpc3QpXG5tbS9tZW1wb2xpY3kuYzozNDY4Olx0XHRcdG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xubW0vbWVtcG9saWN5LmMtMzQ2OS1cdFx0YnJlYWs7XG4tLVxubW0vbW1faW5pdC5jPTM2OD1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF96b25lX21vdmFibGVfcGZuc19mb3Jfbm9kZXModm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMzczLVx0Lyogc2F2ZSB0aGUgc3RhdGUgYmVmb3JlIGJvcnJvdyB0aGUgbm9kZW1hc2sgKi9cbm1tL21tX2luaXQuYzozNzQ6XHRub2RlbWFza190IHNhdmVkX25vZGVfc3RhdGUgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG5tbS9tbV9pbml0LmMtMzc1LVx0dW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzID0gZWFybHlfY2FsY3VsYXRlX3RvdGFscGFnZXMoKTtcbm1tL21tX2luaXQuYzozNzY6XHRpbnQgdXNhYmxlX25vZGVzID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5tbS9tbV9pbml0LmMtMzc3LVx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi0tXG5tbS9tbV9pbml0LmMtNTg4LVx0LyogcmVzdG9yZSB0aGUgbm9kZV9zdGF0ZSAqL1xubW0vbW1faW5pdC5jOjU4OTpcdG5vZGVfc3RhdGVzW05fTUVNT1JZXSA9IHNhdmVkX25vZGVfc3RhdGU7XG5tbS9tbV9pbml0LmMtNTkwLX1cbi0tXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtMjgzLVx0aWYgKG9jLVx1MDAzZW5vZGVtYXNrIFx1MDAyNlx1MDAyNlxubW0vb29tX2tpbGwuYzoyODQ6XHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbm1tL29vbV9raWxsLmMtMjg1LVx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTg1PUVYUE9SVF9TWU1CT0wobGF0ZW50X2VudHJvcHkpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xOTAtICovXG5tbS9wYWdlX2FsbG9jLmM6MTkxOm5vZGVtYXNrX3Qgbm9kZV9zdGF0ZXNbTlJfTk9ERV9TVEFURVNdIF9fcmVhZF9tb3N0bHkgPSB7XG5tbS9wYWdlX2FsbG9jLmMtMTkyLVx0W05fUE9TU0lCTEVdID0gTk9ERV9NQVNLX0FMTCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjAyLX07XG5tbS9wYWdlX2FsbG9jLmM6MjAzOkVYUE9SVF9TWU1CT0wobm9kZV9zdGF0ZXMpO1xubW0vcGFnZV9hbGxvYy5jLTIwNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NDEKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUmVmaW5lbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBJIGNhbiBzYWZlbHkgaWdub3JlIGBDT05GSUdfTlVNQWAgaGVyZSDigJMgYG5vZGVfc3RhdGVzYCBpcyBleHBvc2VkIHJlZ2FyZGxlc3MuIEdvb2QuIFRoZSBpbml0aWFsIGlkZWEgb2YgbmVlZGluZyBgQ01BYCBhbmQgYEhVR0VUTEJGU2AgaXMgbG9va2luZyBzb2xpZC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSByZWZpbmUgdGhpcy4gVGhlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSBjb21waWxlZCAqb25seSogaWYgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCAqYW5kKiBgQ09ORklHX0NPTlRJR19BTExPQ2AgYXJlIGJvdGggZW5hYmxlZC4gTm93LCBgQ09ORklHX0NPTlRJR19BTExPQ2AgaXMgYXV0by1zZWxlY3RlZCBieSBgQ09ORklHX0NNQWAsIHNvIHRoYXQmIzM5O3MgdGFrZW4gY2FyZSBvZi4gQW5kLCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlLCBzbyBpdOKAmXMgbGlrZWx5IGhhbmRsZWQgaW1wbGljaXRseSBieSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gU28sIHByYWN0aWNhbGx5IHNwZWFraW5nLCBJICpkb24mIzM5O3QqIG5lZWQgdG8gbGlzdCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiBKdXN0IGBDTUFgIGFuZCBgSFVHRVRMQkZTYCBzZWVtIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2ssIGp1c3QgdG8gYmUgdGhvcm91Z2guIGBDT05GSUdfQ01BYCByZWxpZXMgb24gYE1NVWAsIG5vIHN1cnByaXNlcyB0aGVyZS4gQW5kIGBDT05GSUdfSFVHRVRMQkZTYCBuZWVkcyBgU1lTRlNgIGFuZCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBIVUdFVExCX1BBR0VgIGFsc28gZGVwZW5kcyBvbiBgTU1VYC4gVGhlIGBNTVVgIGRlcGVuZGVuY3kgaXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBTbywgYWZ0ZXIgcnVubmluZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBvcmlnaW5hbCBpZGVhIGhvbGRzOiBgQ01BYCBhbmQgYEhVR0VUTEJGU2AgYXJlIHRoZSBvbmx5IGNvbmZpZ3MgdGhhdCBJIG5lZWQuCgpPa2F5LCBsZXQmIzM5O3Mgd3JpdGUgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgSSBoYXZlIGlkZW50aWZpZWQuCgpNeSBhbmFseXNpcyBnaXZlcyB0aGUgZm9sbG93aW5nIHZhbHVlczoKCmBXb3J0aEZ1enppbmc6IHRydWVgCmBGb2N1c1N5bWJvbHM6IFsmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7XWAKYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0NNQSYjMzQ7LCAmIzM0O0hVR0VUTEJGUyYjMzQ7XWAKYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuJiMzNDtgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB3aGVuIG5vZGVtYXNrIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGh1Z2V0bGIgQ01BKSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZXBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB3aGVuIG5vZGVtYXNrIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGh1Z2V0bGIgQ01BKSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZXBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTYuNTU0MzI3MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1NzcyNzcxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gd2hlbiBub2RlbWFzayBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChodWdldGxiIENNQSkgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2VwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTYuNTU0MzM0NTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Mjg4NTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRkMWEzMDFkODdjOTVlYjM0MWMzMzM5ZDg3NTRlY2MyZmMxNmRlY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDA6NTE6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmNcXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0ZS4uNTc0NGRlMGNlZWI3MzUgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcXG5AQCAtMzQsNyArMzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChodWdldGxiX2NtYVtuaWRdKVxcbitcXHRpZiAoIW5vZGVtYXNrKVxcbitcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuK1xcbitcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG4gXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTcuMzI4MTcyMzk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTcwODAzNDIyODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNNQVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkMWEzMDFkODdjOTVlYjM0MWMzMzM5ZDg3NTRlY2MyZmMxNmRlY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwMDo1MTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0ZS4uNTc0NGRlMGNlZWI3MzUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXG4rKysgYi9tbS9odWdldGxiX2NtYS5jXG5AQCAtMzQsNyArMzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbitcdGlmICghbm9kZW1hc2spXG4rXHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuK1xuK1x0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4gXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTcuMzI4MTc0NjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MDE0NTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIE1vZGlmaWNhdGlvbioqXG5cblNvLCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9odWdldGxiX2NtYS5jYCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgaW50ZXJlc3QuIFRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBhIG1vZGlmaWNhdGlvbiB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBvZiBmcm96ZW4gZm9saW9zIHdpdGhpbiB0aGUgaHVnZSBwYWdlIENNQSBhcmVhIGlzIGJlaW5nIGFsdGVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9ucyBvZiBDTUEgd2l0aCBodWdldGxiZnMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvbiBmcmFnbWVudGF0aW9uLCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlLCBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgYGh1Z2V0bGJgIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gb3RoZXIgc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgaW4gbWluZC4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjEwOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MDAuNTc4MzIyMjY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDAwODA3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYtXFxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjgtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmgtMTktXFxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcXG5tbS9odWdldGxiX2NtYS5oLTIxLVxcdFxcdGdmcF90IGdmcF9tYXNrLFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjowMy41Nzg0MDg5NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM3OTQyNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUgY2hhbmdlLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRXhhbWluaW5nIGEgaHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBjaGVjayBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgYG5vZGVtYXNrYCBpcyBudWxsIGFuZCBpZiBzbywgZGVmYXVsdHMgaXQgdG8gYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAuIEZvbGxvd2luZyB0aGF0LCBpdCBwZXJmb3JtcyBhIGNoZWNrIHVzaW5nIGBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBgaHVnZXRsYiBDTUFgIGNvZGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5HaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBodWdldGxiX2NtYS5jYCBpcyBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyB0byBzZWUgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgaXMgdHJ5aW5nIHRvIGFjY29tcGxpc2ggaW4gZGlmZmVyZW50IHNjZW5hcmlvcyBhbmQgaWYgdGhlcmUncyBhbiBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IgYXZhaWxhYmlsaXR5LCBvciBpZiB0aGVyZSBpcyBhbnkgYWRkZWQgY29tcGxleGl0eSBvciBidWctZml4aW5nIHJlcXVpcmVkLiBUaGlzIGNoZWNrIGxvb2tzIGxpa2UgYSBnb29kIG9uZSwgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiBvciBlbnN1cmluZyBub2RlIGFmZmluaXR5IGZvciBodWdldGxiIGFsbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MDcuMTE2MzU1MTM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDgxMTUyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWEub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3Ny1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDc4OlxcdGh1Z2V0bGJfY21hX29ubHk9XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3OS1cXHRcXHRcXHRbSFcsQ01BLEVBUkxZXSBXaGVuIGFsbG9jYXRpbmcgbmV3IEh1Z2VUTEIgcGFnZXMsIG9ubHlcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cXG4tLVxcbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTMyPWVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYVxcXCIsIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTMzLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM0OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seShjaGFyICpwKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcXG5tbS9odWdldGxiX2NtYS5jOjEzNjpcXHRyZXR1cm4ga3N0cnRvYm9vbChwLCBcXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzctfVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM4LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYV9vbmx5XFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTE0MC1cXG5tbS9odWdldGxiX2NtYS5jOjE0MTp1bnNpZ25lZCBpbnQgX193ZWFrIGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5tbS9odWdldGxiX2NtYS5jLTE0Mi17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE0Nj12b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cXG5tbS9odWdldGxiX2NtYS5jOjE1NTpcXHRvcmRlciA9IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIoKTtcXG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cXHRpZiAoIW9yZGVyKSB7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYwLXtcXG5tbS9odWdldGxiX2NtYS5jOjI2MTpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI2Mi19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjcxLVxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jOjI3MjpcXHRcXHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XFxubW0vaHVnZXRsYl9jbWEuYy0yNzMtfVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjc5LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlxcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI4MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjA5Ljc2NDQ3OTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NTQ2NDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJwbGF5IG9mIENNQSBhbmQgSHVnZVRMQiBpbiBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNyb3NzLWNvbXBpbGF0aW9uIGNvbmZpZyB0ZWxscyBtZSBgbW0vaHVnZXRsYl9jbWEuY2AgZ2V0cyBidWlsdCBpZiBib3RoIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBlbmFibGVkLiBJbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBhIGRpcmVjdCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IgKENNQSkgYW5kIEh1Z2VUTEIgZmlsZSBzeXN0ZW0uIEl0J3Mgbm90IGEgY29tbW9uIGNvbmZpZ3VyYXRpb24sIGJ1dCB0aGVyZSBhcmUgZGVmaW5pdGVseSBjYXNlcyB3aGVyZSB5b3UnZCB3YW50IHRvIHVzZSBDTUEgdG8gcHJlLWFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzIHNwZWNpZmljYWxseSBmb3IgSHVnZVRMQiB1c2UuIE1ha2VzIHNlbnNlIGZvciBwZXJmb3JtYW5jZSBwcmVkaWN0YWJpbGl0eSwgZXNwZWNpYWxseSBpZiB5b3UncmUgZGVhbGluZyB3aXRoIHZlcnkgbGFyZ2UgcGFnZXMgYW5kIHdhbnQgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gYG1tL2h1Z2V0bGJfY21hLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZWdyYXRpb24gYWN0dWFsbHkgd29ya3MuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgY29yZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGhlcmUuLi4gSXQncyB2ZXJ5IGxpa2VseSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0aGF0J3MgaGFuZGxpbmcgdGhlIGtleSBwYXJ0cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IENNQSBpcyB1dGlsaXplZCB0byBwcmVwYXJlIHRoZSBwaHlzaWNhbCBjb250aWd1b3VzIG1lbW9yeSwgYW5kIGhvdyBpdCBnZXRzIHBhc3NlZCB0byB0aGUgSHVnZVRMQiBzeXN0ZW0uIERvZXMgdGhlIENNQSBhbGxvY2F0aW9uIGhhcHBlbiAqYmVmb3JlKiB0aGUgSHVnZVRMQiBhbGxvY2F0aW9uIGlzIHJlcXVlc3RlZCwgb3IgaXMgdGhlcmUgc29tZSBzb3J0IG9mIGNvb3JkaW5hdGVkIGhhbmRzaGFrZT8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyDigJMgd2hhdCBoYXBwZW5zIGlmIENNQSBmYWlscyB0byBwcm92aWRlIHRoZSBtZW1vcnk/IEhvdyBpcyB0aGlzIFwiZnJvemVuIGZvbGlvXCIgY29uY2VwdCBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBIdWdlVExCIG1hbmFnZW1lbnQ/IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgaGVyZSwgYmVjYXVzZSBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgYnVnIGhlcmUgY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgcHJvYmxlbXMsIG9yIGV2ZW4gY2F0YXN0cm9waGljIGZhaWx1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjoxMy45Mjk5NDYyNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYl9jbWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gIDIyOlxcdHtcXG4gIDIzOlxcdFxcdFdBUk5fT05fT05DRSghY21hX3JlbGVhc2VfZnJvemVuKGh1Z2V0bGJfY21hW2ZvbGlvX25pZChmb2xpbyldLFxcbiAgMjQ6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKSk7XFxuICAyNTpcXHR9XFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuICAyODpcXHRcXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdGludCBub2RlO1xcbiAgMzE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDMyOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiAgMzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdGlmICghbm9kZW1hc2spXFxuICAzODpcXHRcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGlmIChodWdldGxiX2NtYVtuaWRdIFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxcbiAgNDE6XFx0XFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAoIXBhZ2UgXFx1MDAyNlxcdTAwMjYgIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xcbiAgNDQ6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xcbiAgNDU6XFx0XFx0XFx0XFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcXG4gIDQ2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xcbiAgNDk6XFx0XFx0XFx0XFx0aWYgKHBhZ2UpXFxuICA1MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDUxOlxcdFxcdFxcdH1cXG4gIDUyOlxcdFxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0aWYgKCFwYWdlKVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gIDU4OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxuICA1OTpcXHRcXHRyZXR1cm4gZm9saW87XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxcbiAgNjM6XFx0aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0c3RydWN0IGNtYSAqY21hO1xcbiAgNjY6XFx0XFx0c3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptO1xcbiAgNjc6XFx0XFx0aW50IG5vZGUgPSAqbmlkO1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MTMuOTMwMDg2OTExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MTU5MjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gaG93IHRoZXNlIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZ2V0IGFsbG9jYXRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBUaGUgdHJhY2UgbGVhZHMgbWUgdG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIGFuZCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWwgYWxsb2NhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3by4gSSBzaG91bGQgaGVhZCBzdHJhaWdodCB0byBgbW0vaHVnZXRsYi5jYCBhbmQgZGlnIGludG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgdG8gc2VlIGhvdyBpdCdzIHV0aWxpemluZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSSdtIGhvcGluZyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyBkZWVwIHdlIG5lZWQgdG8gZ28gdG8gdW5kZXJzdGFuZCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDA1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjoxNy4xMjE2ODIyMjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzg4NTAxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzU5LSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXFxubW0vaHVnZXRsYi5jOjEzNjA6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYi5jLTEzNjEtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9odWdldGxiLmM6MTM3NzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG5tbS9odWdldGxiLmMtMTM3OC1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTg0Ni1cXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxcbm1tL2h1Z2V0bGIuYzoxODQ3OlxcdFxcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XFxubW0vaHVnZXRsYi5jLTE4NDgtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjoxOS41NjA1NDE3MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MjM4MTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBIdWdldGxiIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgY2FsbCBzdGFjay4gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXMgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoaW5ncywgY2FsbGVkIGZyb20gYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIHdoaWNoIGl0c2VsZiBicmFuY2hlcyBmcm9tIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCwgYW5kIGZpbmFsbHksIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gIGFuZCBgYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvYC4gWWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYE5VTExgIGBub2RlbWFza2AgZGVyZWZlcmVuY2UgaW4gYG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spYC4gVGhlIHByb3Bvc2VkIGZpeCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGFkZCBhIGNoZWNrOiBgaWYgKCFub2RlbWFzaykgbm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07YC4gVGhhdCBzZWVtcyBmdW5jdGlvbmFsbHkgc291bmQsIGEgdHlwaWNhbCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZvciB0aGUgYGh1Z2V0bGJfY21hLmNgIHNpZGUgb2YgdGhpbmdzLCB3ZSBjbGVhcmx5IG5lZWQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIEFuZCBmb3IgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmLCB3ZSdsbCBuZWVkIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gQnV0LCB3YWl0IGEgbWludXRlLCBkb2Vzbid0IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gICphbHdheXMqIGNhbGwgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2A/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgbW0vaHVnZXRsYi5jYCBjb2RlIGFyb3VuZCBsaW5lIDEzNjAganVzdCB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MjUuNTQyOTI2ODU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1NTpcXHRlcnI6XFxuMTM1NjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzU3OlxcdH1cXG4xMzU4OlxcdFxcbjEzNTk6XFx0I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG4xMzYwOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbjEzNjE6XFx0XFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuMTM2MjpcXHR7XFxuMTM2MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjEzNjQ6XFx0XFxuMTM2NTpcXHRcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbjEzNjY6XFx0XFx0aWYgKGZvbGlvKVxcbjEzNjc6XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRpZiAoaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKCkpXFxuMTM3MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0Zm9saW8gPSAoc3RydWN0IGZvbGlvICopYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlcygxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBnZnBfbWFzayxcXG4xMzczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmlkLCBub2RlbWFzayk7XFxuMTM3NDpcXHRcXHRyZXR1cm4gZm9saW87XFxuMTM3NTpcXHR9XFxuMTM3NjpcXHQjZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG4xMzc3OlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbjEzNzg6XFx0XFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpub2RlbWFzaylcXG4xMzc5OlxcdHtcXG4xMzgwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzODE6XFx0fVxcbjEzODI6XFx0I2VuZGlmXFxuMTM4MzpcXHRcXG4xMzg0OlxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjI1LjU0MzMwMzgwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc0ODA0MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgY29uZmlndXJhdGlvbiBwdXp6bGUsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlc2Uga2VybmVsIGludGVybmFsczpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgd2UgbmVlZCBib3RoIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGVzZSBhcmUgcmVxdWlyZWQgaW4gY29uanVuY3Rpb24uIEhtbSwgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCByaW5ncyBhIGJlbGwuIFRoYXQncyB1c3VhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjYXBhYmlsaXR5LCBpdCdzIHR5cGljYWxseSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBoYXJkd2FyZSdzIGFyY2hpdGVjdHVyZS4gSSBkb24ndCB1c3VhbGx5IGhhdmUgdG8gZGlnIGludG8gaXQgZGlyZWN0bHkuXG5cbk5vdywgYENPTkZJR19DT05USUdfQUxMT0NgLCB0aGF0J3MgZGlmZmVyZW50LiBUaGF0IHVzdWFsbHkgZ2V0cyBzZWxlY3RlZCBiYXNlZCBvbiBhbm90aGVyIGNvbmZpZywgbW9yZSBzcGVjaWZpY2FsbHksIGBDT05GSUdfQ01BYCAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKS4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBJIGtub3cgYENNQWAgbmVlZHMgdG8gYWxsb2NhdGUgY29udGlndW91cyBibG9ja3Mgb2YgcGh5c2ljYWwgbWVtb3J5LiBUbyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgbW0vS2NvbmZpZ2AsIGl0J3MgYmVlbiBhIHdoaWxlLCBidXQgSSdtIGNlcnRhaW4gSSdsbCBmaW5kIGEgY2xlYXIgZGVwZW5kZW5jeSB0aGVyZS4gQmV0dGVyIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc3MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MjkuMTE4MTEwODM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYyNTI3OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05USUdfQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03MDk9Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuLS1cXG5tbS9LY29uZmlnLTcxOC1cXG5tbS9LY29uZmlnOjcxOTpjb25maWcgQ09OVElHX0FMTE9DXFxubW0vS2NvbmZpZy03MjAtXFx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXFx1MDAyNlxcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjMxLjQ4MDY0MzI5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNzM5MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYXMgd2VsbC5cblxuKipDTUEsIEh1Z2VUTEIsIGFuZCBDb250aWd1b3VzIEFsbG9jYXRpb246IE15IEN1cnJlbnQgVGhpbmtpbmcqKlxuXG5SaWdodCwgc28gYENPTlRJR19BTExPQ2AgaXMgZGVmaW5pdGVseSBlbmFibGVkICpiZWNhdXNlKiBvZiBgQ01BYCAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKS4gVGhhdCdzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBoZXJlLiBXaGljaCwgb2YgY291cnNlLCBtZWFucyB3ZSBuZWVkICpib3RoKiBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGJ1dCB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuXG5cbkhtbSwgSSByZWNhbGwgbm93OiB0aGUgYGh1Z2V0bGJfY21hLmNgIGZpbGUgKml0c2VsZiogaXMgY29tcGlsZWQgb25seSBpZiBib3RoIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBzZXQuIFRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgdGhlIGdsdWUgYmV0d2VlbiB0aGUgdHdvLlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhpcy4gVGltZSB0byBkaWcgaW50byB0aGUgYG1tL01ha2VmaWxlYCBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFyZSBwcmVjaXNlbHkgd2hhdCBJIHRoaW5rIHRoZXkgYXJlLiBObyBwb2ludCBpbiBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGF0IHRoaXMgc3RhZ2UuIEkgd2FudCB0byBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJ1bGVzIGV4cGxpY2l0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjozNS4wOTMzODQ1OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODk1MDUxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWEub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3Ny1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDc4OlxcdGh1Z2V0bGJfY21hX29ubHk9XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3OS1cXHRcXHRcXHRbSFcsQ01BLEVBUkxZXSBXaGVuIGFsbG9jYXRpbmcgbmV3IEh1Z2VUTEIgcGFnZXMsIG9ubHlcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cXG4tLVxcbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTMyPWVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYVxcXCIsIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTMzLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM0OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seShjaGFyICpwKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcXG5tbS9odWdldGxiX2NtYS5jOjEzNjpcXHRyZXR1cm4ga3N0cnRvYm9vbChwLCBcXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzctfVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM4LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYV9vbmx5XFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTE0MC1cXG5tbS9odWdldGxiX2NtYS5jOjE0MTp1bnNpZ25lZCBpbnQgX193ZWFrIGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5tbS9odWdldGxiX2NtYS5jLTE0Mi17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE0Nj12b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cXG5tbS9odWdldGxiX2NtYS5jOjE1NTpcXHRvcmRlciA9IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIoKTtcXG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cXHRpZiAoIW9yZGVyKSB7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYwLXtcXG5tbS9odWdldGxiX2NtYS5jOjI2MTpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI2Mi19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjcxLVxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jOjI3MjpcXHRcXHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XFxubW0vaHVnZXRsYl9jbWEuYy0yNzMtfVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjc5LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlxcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI4MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjM3LjQ4Mjg5Mzk2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM3MzgwNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBHaWdhbnRpYyBQYWdlcyoqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBlc3NlbnRpYWwuIE5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIGZvciBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCB0byBldmVuICpjb21waWxlKiwgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGRlZmluZWQuIEl0J3MgYSBrZXkgZGVwZW5kZW5jeS4gU28sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3JlIGdvb2QgdG8gZ28uIE5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBzZXQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjQwLjcyMDI3Nzk0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMTI1MTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI4Mz1jb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuLS1cXG5mcy9LY29uZmlnLTI4Ni1cXG5mcy9LY29uZmlnOjI4Nzpjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmZzL0tjb25maWctMjg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6NDIuODMxNTM3MDY4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDExNzQzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIEJvb2xlYW4gU2VsZWN0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgYSBib29sZWFuIHZhbHVlIHRoYXQncyBiZWluZyBzZXQgb3Igc2VsZWN0ZWQgYnkgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hpY2ggb25lcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgbWFraW5nIHRoaXMgc2VsZWN0aW9uLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBib29sZWFuIGlzIGJlaW5nIHVzZWQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nICp3aHkqIGl0J3MgYmVpbmcgdXNlZC4gSXMgdGhpcyBhYm91dCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucywgbWVtb3J5IG1vZGVscywgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNoZWNrIGlzIGluIG9yZGVyLCBhbmQgSSBrbm93IGV4YWN0bHkgd2hlcmUgdG8gc3RhcnQgbG9va2luZy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjQ1LjU3MjcxMzk2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTc1MDU2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMi1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvYXJtNjQvS2NvbmZpZzozMzpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zNC1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEzOC1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjEzOTpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcdFxcdGlmIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTQwLVxcdHNlbGVjdCBBUkNIX0hBU19LQ09WXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMzUtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL3Jpc2N2L0tjb25maWc6MzY6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3Jpc2N2L0tjb25maWctMzctXFx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk3LVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9zMzkwL0tjb25maWc6OTg6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTktXFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxcbmFyY2gvc2gvS2NvbmZpZzoxMDpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvc2gvS2NvbmZpZy0xMS1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMTA3LVxcdHNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0lcXG5hcmNoL3NwYXJjL0tjb25maWc6MTA4OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC9zcGFyYy9LY29uZmlnLTEwOS1cXHRzZWxlY3QgSEFWRV9TT0ZUSVJRX09OX09XTl9TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2LVxcdCMgT3B0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IDY0LWJpdCBrZXJuZWwgb25seTpcXG5hcmNoL3g4Ni9LY29uZmlnOjI3OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC94ODYvS2NvbmZpZy0yOC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6NDcuODE4NDY5NDcxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTg0NzMyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIFRoaXMgcGllY2Ugb2YgY29kZSBpcyBjbGVhcmx5IHRhcmdldGVkIHRvd2FyZHMgdmFyaW91cyBhcmNoaXRlY3R1cmVzIOKAkyB4ODZfNjQsIGFybTY0LCBSSVNDLVYsIGFuZCB0aGUgbGlrZS4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdDsgdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGVkLiBTbywgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZvY3VzIGhlcmUgaXMgb24gYENNQWAgYW5kIGBIVUdFVExCRlNgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucy5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBmdW5jdGlvbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuIEFoLCBhbmQgdGhhdCdzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCB3aGljaCBpdHNlbGYgY29tZXMgZnJvbSBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gT2theSwgc28gd2UgaGF2ZSBhIGNsZWFyIGNhbGxpbmcgY2hhaW4gdGhlcmUuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHRocmVlIGZ1bmN0aW9ucy5cblxuQnV0LCBob2xkIG9uLi4uIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjYWxsZXJzPyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBmZWVscyBsaWtlIGl0IGhhcyBhIGZvY3VzZWQgcHVycG9zZS4gSWYgSSdtIHRyeWluZyB0byBvcHRpbWl6ZSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgKmVsc2UqIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIGNhbGxlZC4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIgaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMxMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjUxLjgxNjk0NzYzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3ODE1MTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTM2NC1cXG5tbS9odWdldGxiLmM6MTM2NTpcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbm1tL2h1Z2V0bGIuYy0xMzY2LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNi1cXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9Nj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cXHRcXHRcXHRcXHQgICAgICBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzayk7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0xOS1cXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjU0LjA5NTEwNTEzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzgxOTYyOTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEFsbG9jYXRpb24gUGF0aCoqXG5cblJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBcIk5vLlwiIGxpa2VseSBtZWFucyBJJ3ZlIHJlamVjdGVkIGEgcHJldmlvdXMgbGluZSBvZiBpbnF1aXJ5LiBMZXQncyBzZWUuLi4gVGhlIGtleSBmdW5jdGlvbiB3ZSdyZSBmb2N1c2VkIG9uIHNlZW1zIHRvIGJlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0J3Mgd2hlcmUgd2Ugc2hvdWxkIGJlIGxvb2tpbmcuXG5cbkhvbGQgb24sIEkgcmVtZW1iZXIgc2VlaW5nIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHNvbWV3aGVyZS4gQW5kLCB5ZXMsIGl0J3MgbWFya2VkIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgZ2V0dGluZyBpbmxpbmVkLCB3aGljaCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncy4gV2UnbGwgbmVlZCB0byBrZWVwIHRoYXQgcG9zc2liaWxpdHkgaW4gbWluZC5cblxuT2theSwgYmFjayB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSXQgaXNuJ3Qgc3RhdGljLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBvdXIgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBjb25zaWRlciB0aGlzIGFsc28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTM6NTcuOTE0NzM3MTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc1NjU4OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTgzNS1cXG5tbS9odWdldGxiLmM6MTgzNjpzdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMTgzNy1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTg2Mi0gKi9cXG5tbS9odWdldGxiLmM6MTg2MzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTE4NjQtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE4NjctXFxubW0vaHVnZXRsYi5jOjE4Njg6XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xcbm1tL2h1Z2V0bGIuYy0xODY5LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xODk2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5MDYtXFxubW0vaHVnZXRsYi5jOjE5MDc6XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXFxubW0vaHVnZXRsYi5jLTE5MDgtXFx0XFx0XFx0XFx0XFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMDc2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIwODgtXFxubW0vaHVnZXRsYi5jOjIwODk6XFx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMjA5MC1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTIxMjQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxMzEtXFxubW0vaHVnZXRsYi5jOjIxMzI6XFx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMjEzMy1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI2NDE9c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjg2LVxcdFxcdFxcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XFxubW0vaHVnZXRsYi5jOjI2ODc6XFx0XFx0XFx0bmV3X2ZvbGlvID0gYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMjY4OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBuaWQsIE5VTEwpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTMzNzI9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMzg1LVxcbm1tL2h1Z2V0bGIuYzozMzg2OlxcdFxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXFxubW0vaHVnZXRsYi5jLTMzODctXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzM5MS1cXHRcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vaHVnZXRsYi5jOjMzOTI6XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmMtMzM5My1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MDIuMjkwMzk5OTYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzU1NjM1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5Pa2F5LCBteSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV0ZXJtaW5lIGl0cyBjb21waWxhdGlvbiBhbmQgdXNhZ2UuIEl0IGxvb2tzIGxpa2UgYENNQWAgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgb2J2aW91cyBvbmVzLCBhbmQgSSB0aGluayBJJ20gY29ycmVjdCBpbiB0aGF0IGFzc3VtcHRpb24sIGJlY2F1c2UgYGh1Z2V0bGJfY21hLmNgIGlzIG9ubHkgYnVpbHQgd2l0aCBib3RoIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGVuYWJsZWQuXG5cbkJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgaW1wbGljaXQgZGVwZW5kZW5jaWVzLiBMZXQgbWUgc2VlLi4uIHRoZSBjb2RlIHVzZXMgYG5vZGVtYXNrX3RgIGFuZCBgbm9kZV9zdGF0ZXNgLiBUaG9zZSBhcmUgb2Z0ZW4gdGllZCB0byBOVU1BIHN5c3RlbXMuIE9rYXksIGxldCdzIGNoZWNrLiBJcyBgQ09ORklHX05VTUFgIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aG9zZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMsIG9yIGFyZSB0aGV5IHNvbWV0aW1lcyBhdmFpbGFibGUgZXZlbiB3aXRob3V0IE5VTUEgZW5hYmxlZD8gVGhpcyByZXF1aXJlcyBtb3JlIGRpZ2dpbmcgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NDIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MDYuMTY1OTY3MTI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE0MDAwNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfaXNzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmM9ODY9dm9pZCBfX2luaXQgcmVwbGljYXRlX2tlcm5lbF90ZXh0KHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYy0xMDAtXFx0XFx0LyogQ2hlY2sgaWYgdGhpcyBub2RlIHNob3VsZCBnZXQgYSBjb3B5IG9mIHRoZSBrZXJuZWwgKi9cXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYzoxMDE6XFx0XFx0aWYgKG5vZGVfaXNzZXQoY2xpZW50X25hc2lkLCBrdGV4dF9yZXBtYXNrKSkge1xcbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEwMi1cXHRcXHRcXHRzZXJ2ZXJfbmFzaWQgPSBjbGllbnRfbmFzaWQ7XFxuLS1cXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYz0xMTY9dW5zaWduZWQgbG9uZyBub2RlX2dldGZpcnN0ZnJlZShuYXNpZF90IG5hc2lkKVxcbi0tXFxuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMtMTI0LVxcdG9mZnNldCA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpKFxcdTAwMjZfZW5kKSkgLSBsb2FkYmFzZTtcXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYzoxMjU6XFx0aWYgKChuYXNpZCA9PSAwKSB8fCAobm9kZV9pc3NldChuYXNpZCwga3RleHRfcmVwbWFzaykpKVxcbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEyNi1cXHRcXHRyZXR1cm4gVE9fTk9ERShuYXNpZCwgb2Zmc2V0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTQ4MD1zdHJ1Y3Qgc2d4X2VwY19wYWdlICpfX3NneF9hbGxvY19lcGNfcGFnZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQ4OS1cXHQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6NDkwOlxcdGlmIChub2RlX2lzc2V0KG5pZF9vZl9jdXJyZW50LCBzZ3hfbnVtYV9tYXNrKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDkxLVxcdFxcdG5pZF9zdGFydCA9IG5pZF9vZl9jdXJyZW50O1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTc5Nz1zdGF0aWMgYm9vbCBfX2luaXQgc2d4X3BhZ2VfY2FjaGVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgzNi1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6ODM3OlxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIHNneF9udW1hX21hc2spKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgzOC1cXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c2d4X251bWFfbm9kZXNbbmlkXS5sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04NTktXFx0Zm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjg2MDpcXHRcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzZ3hfbnVtYV9tYXNrKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04NjEtXFx0XFx0ICAgIG5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgXFx1MDAyNlxcdTAwMjYgbm9kZV9zdGF0ZShuaWQsIE5fQ1BVKSlcXG4tLVxcbmFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmM9NTY9aW50IF9faW5pdCBhbWRfbnVtYV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jLTEwOC1cXHRcXHR9XFxuYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYzoxMDk6XFx0XFx0aWYgKG5vZGVfaXNzZXQobm9kZWlkLCBudW1hX25vZGVzX3BhcnNlZCkpIHtcXG5hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jLTExMC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJOb2RlICVkIGFscmVhZHkgcHJlc2VudCwgc2tpcHBpbmdcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYz0xMDY9c3RhdGljIHZvaWQgZWlvaW50Y19zZXRfaXJxX3JvdXRlKGludCBwb3MsIHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtbm9kZSwgbm9kZW1hc2tfdCAqbm9kZV9tYXApXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYy0xMjEtXFx0XFx0bm9kZSA9IGNwdV90b19laW9fbm9kZShpKTtcXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYzoxMjI6XFx0XFx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICpub2RlX21hcCkpXFxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmMtMTIzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM9MTg4PXN0YXRpYyBpbnQgZWlvaW50Y19pbmRleChpbnQgbm9kZSlcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jLTE5Mi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGljczsgaSsrKSB7XFxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM6MTkzOlxcdFxcdGlmIChub2RlX2lzc2V0KG5vZGUsIGVpb2ludGNfcHJpdltpXS1cXHUwMDNlbm9kZV9tYXApKVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jLTE5NC1cXHRcXHRcXHRyZXR1cm4gaTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMzQyPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqY2FuX2dhdGhlcl9udW1hX3N0YXRzKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM1OC1cXHRuaWQgPSBwYWdlX3RvX25pZChwYWdlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM1OTpcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMzYwLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMzNjY9c3RhdGljIHN0cnVjdCBwYWdlICpjYW5fZ2F0aGVyX251bWFfc3RhdHNfcG1kKHBtZF90IHBtZCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMzgzLVxcdG5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpO1xcbmZzL3Byb2MvdGFza19tbXUuYzozMzg0OlxcdGlmICghbm9kZV9pc3NldChuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMzODUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMjUtICogdm9pZCBub2Rlc19jbGVhcihtYXNrKVxcdFxcdGNsZWFyIGFsbCBiaXRzXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjI2OiAqIGludCBub2RlX2lzc2V0KG5vZGUsIG1hc2spXFx0XFx0dHJ1ZSBpZmYgYml0ICdub2RlJyBzZXQgaW4gbWFza1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0yNy0gKiBib29sIG5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG1hc2spXFx0dGVzdCBhbmQgc2V0IGJpdCAnbm9kZScgaW4gbWFza1xcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTc3LSAqIFN1YnRsZXR5OlxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo3ODogKiAxKSBUaGUgJ3R5cGUtY2hlY2tlZCcgZm9ybSBvZiBub2RlX2lzc2V0KCkgY2F1c2VzIGdjYyAoMy4zLjIsIGFueXdheSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNzktICogICAgdG8gZ2VuZXJhdGUgc2xpZ2h0bHkgd29yc2UgY29kZS4gIFNvIHVzZSBhIHNpbXBsZSBvbmUtbGluZSAjZGVmaW5lXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjgwOiAqICAgIGZvciBub2RlX2lzc2V0KCksIGluc3RlYWQgb2Ygd3JhcHBpbmcgYW4gaW5saW5lIGluc2lkZSBhIG1hY3JvLCB0aGVcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtODEtICogICAgd2F5IHdlIGRvIHRoZSBvdGhlciBjYWxscy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD0xNDM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fbm9kZXNfY2xlYXIobm9kZW1hc2tfdCAqZHN0cCwgdW5zaWduZWQgaW50IG5iaXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTE0OC0vKiBObyBzdGF0aWMgaW5saW5lIHR5cGUgY2hlY2tpbmcgLSBzZWUgU3VidGxldHkgKDEpIGFib3ZlLiAqL1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDoxNDk6I2RlZmluZSBub2RlX2lzc2V0KG5vZGUsIG5vZGVtYXNrKSB0ZXN0X2JpdCgobm9kZSksIChub2RlbWFzaykuYml0cylcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMTUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oPTQwNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBub2RlX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDgte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MDk6XFx0cmV0dXJuIG5vZGVfaXNzZXQobm9kZSwgbm9kZV9zdGF0ZXNbc3RhdGVdKTtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEwLX1cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDIyNj1ib29sIGNwdXNldF9jdXJyZW50X25vZGVfYWxsb3dlZChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyMzMtXFx0XFx0cmV0dXJuIHRydWU7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0MjM0OlxcdGlmIChub2RlX2lzc2V0KG5vZGUsIGN1cnJlbnQtXFx1MDAzZW1lbXNfYWxsb3dlZCkpXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjM1LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjUzLVxcdGNzID0gbmVhcmVzdF9oYXJkd2FsbF9hbmNlc3Rvcih0YXNrX2NzKGN1cnJlbnQpKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyNTQ6XFx0YWxsb3dlZCA9IG5vZGVfaXNzZXQobm9kZSwgY3MtXFx1MDAzZW1lbXNfYWxsb3dlZCk7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjU1LVxcbi0tXFxubW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTgwMy1cXHQgKi9cXG5tbS9odWdldGxiLmM6MTgwNDpcXHRpZiAobm9kZV9hbGxvY19ub3JldHJ5IFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZV9hbGxvY19ub3JldHJ5KSlcXG5tbS9odWdldGxiLmMtMTgwNS1cXHRcXHRhbGxvY190cnlfaGFyZCA9IGZhbHNlO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ1MDA9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTA5LVxcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcXG5tbS9odWdldGxiLmM6NDUxMDpcXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG5tbS9odWdldGxiLmMtNDUxMS1cXHRcXHRcXHRuciArPSBhcnJheVtub2RlXTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjc9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMzktXFxubW0vaHVnZXRsYl9jbWEuYzo0MDpcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcXG5tbS9odWdldGxiX2NtYS5jLTQxLVxcdFxcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTc2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTc3OlxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcXG5tbS9odWdldGxiX2NtYS5jLTE3OC1cXHRcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogaW52YWxpZCBub2RlICVkIHNwZWNpZmllZFxcXFxuXFxcIiwgbmlkKTtcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0zOT1zdGF0aWMgaW5saW5lIGludCBnZXRfdmFsaWRfbm9kZV9hbGxvd2VkKGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTQwLXtcXG5tbS9odWdldGxiX2ludGVybmFsLmg6NDE6XFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgKm5vZGVzX2FsbG93ZWQpKVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC00Mi1cXHRcXHRuaWQgPSBuZXh0X25vZGVfYWxsb3dlZChuaWQsIG5vZGVzX2FsbG93ZWQpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9NjQzPXN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9mb2xpb19yZXF1aXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNjQ4LVxcbm1tL21lbXBvbGljeS5jOjY0OTpcXHRyZXR1cm4gbm9kZV9pc3NldChuaWQsICpxcC1cXHUwMDNlbm1hc2spID09ICEoZmxhZ3MgXFx1MDAyNiBNUE9MX01GX0lOVkVSVCk7XFxubW0vbWVtcG9saWN5LmMtNjUwLX1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTEzMzY9aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzk5LVxcdFxcdFxcdGlmICgobm9kZXNfd2VpZ2h0KCpmcm9tKSAhPSBub2Rlc193ZWlnaHQoKnRvKSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzoxNDAwOlxcdFxcdFxcdFxcdFxcdFxcdChub2RlX2lzc2V0KHMsICp0bykpKVxcbm1tL21lbXBvbGljeS5jLTE0MDEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNDEwLVxcdFxcdFxcdC8qIGRlc3Qgbm90IGluIHJlbWFpbmluZyBmcm9tIG5vZGVzPyAqL1xcbm1tL21lbXBvbGljeS5jOjE0MTE6XFx0XFx0XFx0aWYgKCFub2RlX2lzc2V0KGRlc3QsIHRtcCkpXFxubW0vbWVtcG9saWN5LmMtMTQxMi1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxMDgtXFx0bm9kZSA9IGN1cnJlbnQtXFx1MDAzZWlsX3ByZXY7XFxubW0vbWVtcG9saWN5LmM6MjEwOTpcXHRpZiAoIWN1cnJlbnQtXFx1MDAzZWlsX3dlaWdodCB8fCAhbm9kZV9pc3NldChub2RlLCBwb2xpY3ktXFx1MDAzZW5vZGVzKSkge1xcbm1tL21lbXBvbGljeS5jLTIxMTAtXFx0XFx0bm9kZSA9IG5leHRfbm9kZV9pbihub2RlLCBwb2xpY3ktXFx1MDAzZW5vZGVzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI0NDU9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQ3MC1cXHRcXHQgICAgcG9sLVxcdTAwM2Vtb2RlICE9IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXBvbGljeS5jOjI0NzE6XFx0XFx0ICAgICghbm9kZW1hc2sgfHwgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpKSB7XFxubW0vbWVtcG9saWN5LmMtMjQ3Mi1cXHRcXHRcXHQvKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHR3ZWlnaHQgPSBtZS1cXHUwMDNlaWxfd2VpZ2h0O1xcbm1tL21lbXBvbGljeS5jOjI2Njc6XFx0aWYgKHdlaWdodCBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5vZGUsIG5vZGVzKSkge1xcbm1tL21lbXBvbGljeS5jLTI2NjgtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yOTg0PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMwMTUtXFx0Y2FzZSBNUE9MX1BSRUZFUlJFRDpcXG5tbS9tZW1wb2xpY3kuYzozMDE2OlxcdFxcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vbWVtcG9saWN5LmMtMzAxNy1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMwNDAtXFx0XFx0XFx0ICovXFxubW0vbWVtcG9saWN5LmM6MzA0MTpcXHRcXHRcXHRpZiAobm9kZV9pc3NldCh0aGlzbmlkLCBwb2wtXFx1MDAzZW5vZGVzKSlcXG5tbS9tZW1wb2xpY3kuYy0zMDQyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMzA1MC1cXHRcXHQgKi9cXG5tbS9tZW1wb2xpY3kuYzozMDUxOlxcdFxcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vbWVtcG9saWN5LmMtMzA1Mi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMzQ3PXN0YXRpYyBpbnQgZG9fcGFnZXNfbW92ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbm9kZW1hc2tfdCB0YXNrX25vZGVzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIzODYtXFx0XFx0ZXJyID0gLUVBQ0NFUztcXG5tbS9taWdyYXRlLmM6MjM4NzpcXHRcXHRpZiAoIW5vZGVfaXNzZXQobm9kZSwgdGFza19ub2RlcykpXFxubW0vbWlncmF0ZS5jLTIzODgtXFx0XFx0XFx0Z290byBvdXRfZmx1c2g7XFxuLS1cXG5tbS9tbXpvbmUuYz00Nj1zdGF0aWMgaW5saW5lIGludCB6cmVmX2luX25vZGVtYXNrKHN0cnVjdCB6b25lcmVmICp6cmVmLCBub2RlbWFza190ICpub2RlcylcXG4tLVxcbm1tL21tem9uZS5jLTQ4LSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL21tem9uZS5jOjQ5OlxcdHJldHVybiBub2RlX2lzc2V0KHpvbmVsaXN0X25vZGVfaWR4KHpyZWYpLCAqbm9kZXMpO1xcbm1tL21tem9uZS5jLTUwLSNlbHNlXFxuLS1cXG5tbS9udW1hX21lbWJsa3MuYz0zMzU9c3RhdGljIHZvaWQgX19pbml0IG51bWFfY2xlYXJfa2VybmVsX25vZGVfaG90cGx1Zyh2b2lkKVxcbi0tXFxubW0vbnVtYV9tZW1ibGtzLmMtMzkwLVxcbm1tL251bWFfbWVtYmxrcy5jOjM5MTpcXHRcXHRpZiAoIW5vZGVfaXNzZXQobWItXFx1MDAzZW5pZCwgcmVzZXJ2ZWRfbm9kZW1hc2spKVxcbm1tL251bWFfbWVtYmxrcy5jLTM5Mi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01NjcwPWludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01Njc5LVxcdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1NjgwOlxcdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFxcdTAwMjZcXHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTU2ODEtXFx0XFx0bm9kZV9zZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01Njg3LVxcdFxcdC8qIERvbid0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1Njg4OlxcdFxcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXFxubW0vcGFnZV9hbGxvYy5jLTU2ODktXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9zaG93X21lbS5jPTExOT1zdGF0aWMgYm9vbCBzaG93X21lbV9ub2RlX3NraXAodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Nob3dfbWVtLmMtMTMxLVxcbm1tL3Nob3dfbWVtLmM6MTMyOlxcdHJldHVybiAhbm9kZV9pc3NldChuaWQsICpub2RlbWFzayk7XFxubW0vc2hvd19tZW0uYy0xMzMtfVxcbi0tXFxubW0vc2x1Yi5jPTQxMjM9c3RhdGljIGludCBzbHViX2NwdV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubW0vc2x1Yi5jLTQxMzItXFx0ICovXFxubW0vc2x1Yi5jOjQxMzM6XFx0aWYgKG5vZGVfaXNzZXQobmlkLCBzbGFiX2Jhcm5fbm9kZXMpKVxcbm1tL3NsdWIuYy00MTM0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vc2x1Yi5jLTQxMzctXFxubW0vc2x1Yi5jOjQxMzg6XFx0aWYgKG5vZGVfaXNzZXQobmlkLCBzbGFiX2Jhcm5fbm9kZXMpKVxcbm1tL3NsdWIuYy00MTM5LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vc2x1Yi5jPTQ1Mjk9c3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDU0OC1cXHRcXHRcXHRpZiAobXBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcXG5tbS9zbHViLmM6NDU0OTpcXHRcXHRcXHRcXHRcXHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vc2x1Yi5jLTQ1NTAtXFx0XFx0XFx0XFx0bm9kZSA9IG1lbXBvbGljeV9zbGFiX25vZGUoKTtcXG4tLVxcbm1tL3NsdWIuYz00NzU2PXZvaWQgKmFsbG9jX2Zyb21fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXFxuLS1cXG5tbS9zbHViLmMtNDc3Ni1cXHRcXHRcXHRpZiAobXBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcXG5tbS9zbHViLmM6NDc3NzpcXHRcXHRcXHRcXHRcXHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vc2x1Yi5jLTQ3NzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjU0OjA5LjA3OTk3MjU4NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUyMTA1NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRGVwZW5kZW5jaWVzIG9mIGBub2RlX2lzc2V0YCBpbiBLZXJuZWwgQ29kZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYG5vZGVfaXNzZXRgIGlzIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L25vZGVtYXNrLmhgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJbnRlcmVzdGluZyB0aGF0IGl0J3MgZGVmaW5lZCB0aGVyZSwgYmVjYXVzZSBJIGFsd2F5cyBhc3N1bWVkIHRoYXQgaXQgd2FzIGluaGVyZW50bHkgdGllZCB0byBOVU1BLiBJdCBzZWVtcyBgQ09ORklHX05VTUFgIGlzbid0IGEgKnN0cmljdCogcmVxdWlyZW1lbnQgZm9yIGl0cyBleGlzdGVuY2UsIGJ1dCBpdCdzIGNsZWFyIHRoYXQgaXQgdXNlcyBgbm9kZW1hc2tfdGAgYW5kIGBub2RlX3N0YXRlc2AuIEhtbSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgYG5vZGVfc3RhdGVzYCBpcyBhbHNvIGRlZmluZWQgaW4gYG5vZGVtYXNrLmhgLiBUaGlzIGlzIG1ha2luZyBtZSByZWNvbnNpZGVyIHNvbWUgb2YgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYENPTkZJR19OVU1BYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBgaHVnZXRsYl9jbWEuY2AgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCdzIGRpZyBpbnRvIGBtbS9odWdldGxiX2NtYS5jYCBhbmQgc2VhcmNoIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTlVNQWAuIFRoYXQgc2hvdWxkIGNsZWFyIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDoxMy40MzIwODEwNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTUyOTk2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05VTUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYl9jbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MTQuMDAzNjIwNTAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzcyNDU5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGh1Z2V0bGJfY21hLmMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgYGh1Z2V0bGJfY21hLmNgIGFuZCBpdHMgdXNlIG9mIGBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXWAuIEkga25vdyB0aGF0IGlmIGAhQ09ORklHX05VTUFgLCB0aGVuIGBNQVhfTlVNTk9ERVNgIGlzIHNldCB0byAxLiBUaGlzIGlzIGtleS4gU28sIHRoZSBjb2RlICpzaG91bGQqIGZ1bmN0aW9uIGV2ZW4gd2l0aG91dCBOVU1BIGVuYWJsZWQuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBOb3csIG15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgY29kZSdzIG9wZXJhdGlvbmFsIHJlcXVpcmVtZW50cyBhcmUganVzdCBgQ01BYCBhbmQgYEhVR0VUTEJGU2AuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuXG5cbkJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGJvb2xlYW4gY29uZmlnIG9wdGlvbnMsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGUgY2hlY2suIExldCdzIGhlYWQgb3ZlciB0byBgbW0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBwcmVjaXNlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX0NNQWAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRpb25zaGlwcyBoZXJlIGlzIHZpdGFsIGZvciBjb3JyZWN0bHkgaW50ZXJwcmV0aW5nIGl0cyBvcGVyYXRpb25hbCByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTM2LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjU0OjE3LjY4MDg2OTA4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNTA1MzQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9kbWEvS2NvbmZpZz0xNzM9Y29uZmlnIERNQV9OVU1BX0NNQVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTE4NS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTg2OmNvbmZpZyBDTUFfU0laRV9QRVJOVU1BXFxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJEZWZhdWx0IENNQSBhcmVhIHBlciBOVU1BIG5vZGVcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MTk2PWNvbW1lbnQgXFxcIkRlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMTk3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTktXFx0aW50IFxcXCJTaXplIGluIE1lZ2EgQnl0ZXNcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMDk6Y29uZmlnIENNQV9TSVpFX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjEwLVxcdGludCBcXFwiUGVyY2VudGFnZSBvZiB0b3RhbCBtZW1vcnlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjIwPWNob2ljZVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjI0OmNvbmZpZyBDTUFfU0laRV9TRUxfTUJZVEVTXFxua2VybmVsL2RtYS9LY29uZmlnLTIyNS1cXHRib29sIFxcXCJVc2UgbWVnYSBieXRlcyB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNzpjb25maWcgQ01BX1NJWkVfU0VMX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjI4LVxcdGJvb2wgXFxcIlVzZSBwZXJjZW50YWdlIHZhbHVlIG9ubHlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjMwOmNvbmZpZyBDTUFfU0laRV9TRUxfTUlOXFxua2VybmVsL2RtYS9LY29uZmlnLTIzMS1cXHRib29sIFxcXCJVc2UgbG93ZXIgdmFsdWUgKG1pbmltdW0pXFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMzpjb25maWcgQ01BX1NJWkVfU0VMX01BWFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzQtXFx0Ym9vbCBcXFwiVXNlIGhpZ2hlciB2YWx1ZSAobWF4aW11bSlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjM2PWVuZGNob2ljZVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzctXFxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzktXFx0aW50IFxcXCJNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4tLVxcbm1tL0tjb25maWctMTA2Ni1cXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxcbm1tL0tjb25maWctMTA2OC1cXHRib29sIFxcXCJDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODEtXFxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xcbm1tL0tjb25maWctMTA4My1cXHRib29sIFxcXCJDTUEgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODctXFxubW0vS2NvbmZpZzoxMDg4OmNvbmZpZyBDTUFfU1lTRlNcXG5tbS9LY29uZmlnLTEwODktXFx0Ym9vbCBcXFwiQ01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDk0LVxcbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXFxubW0vS2NvbmZpZy0xMDk2LVxcdGludCBcXFwiTWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDoxOS44ODU5MzA2OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NzEwMzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG5vdy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYENNQWAg4oCTIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgY29uZmlnIG9wdGlvbiBpbiB0aGlzIHNjZW5hcmlvLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBleHBlcmllbmNlIGlzIGtpY2tpbmcgaW4sIGFuZCBJIGhhdmUgdG8gYXNrIG15c2VsZiDigJMgd2hhdCdzIHRoZSByZWxhdGlvbnNoaXAsIGlmIGFueSwgYmV0d2VlbiBgQ01BYCBhbmQgYEhVR0VUTEJGU2A/IEFyZSB0aGV5IG9ydGhvZ29uYWw/IERvZXMgZW5hYmxpbmcgb25lIGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3RoZXI/IEFyZSB0aGVyZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBoZXJlPyBUaGlzIHJlbGF0aW9uc2hpcCByZXF1aXJlcyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0LCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MjIuOTMzMDM2NDUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA3OTY4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MjUuMzQxMDEyNjMxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDgxODgwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUgZm9yIEh1Z2VUTEIgYW5kIENNQSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGtleSBwbGF5ZXIgaGVyZSBzZWVtcyB0byBiZSBgSFVHRVRMQkZTYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGNvbmZpZyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gV2FpdCwgaGFuZyBvbi4uLiBJIHJlbWVtYmVyIGBodWdldGxiX2NtYS5jYCBnZXRzIGNvbXBpbGVkICpjb25kaXRpb25hbGx5Kiwgc3BlY2lmaWNhbGx5IHdoZW4gYm90aCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgZW5hYmxlZC4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCwgaGlnaGxpZ2h0aW5nIHRoZWlyIGludGVycGxheS4gSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgYmUgbWlzc2luZz8gVGltZSB0byBiZSB0aG9yb3VnaC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gR290dGEgYmUgc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgZmxhZ3Mgb3Igb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMzOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjU0OjI4Ljg0OTIwNDQyN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NzczMzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwNzg6XFx0aHVnZXRsYl9jbWFfb25seT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVxcdFxcdFxcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM4LSNpZmRlZiBDT05GSUdfQ01BXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTQwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwMi1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYzoyMDM6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00NDg9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTAtXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjQ1MTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcXG4tLVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jPTIyNT1ib29sIF9faW5pdCBhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzQtXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MjM1OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTQyPWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ1LVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM6NDY6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNzY9dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNzg6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc5LVxcbi0tXFxubW0vTWFrZWZpbGU9ODI9aWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7XFxubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9odWdldGxiX2NtYS5jLTE5LXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xMzI9ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hXFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzMtXFxubW0vaHVnZXRsYl9jbWEuYzoxMzQ6c3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KGNoYXIgKnApXFxubW0vaHVnZXRsYl9jbWEuYy0xMzUte1xcbm1tL2h1Z2V0bGJfY21hLmM6MTM2OlxcdHJldHVybiBrc3RydG9ib29sKHAsIFxcdTAwMjZodWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTEzNy19XFxubW0vaHVnZXRsYl9jbWEuYy0xMzgtXFxubW0vaHVnZXRsYl9jbWEuYzoxMzk6ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hX29ubHlcXFwiLCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTQwLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTQxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTQyLXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTU0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTU1OlxcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTU2LVxcdGlmICghb3JkZXIpIHtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjU5PWJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yNjAte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjYxOlxcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjYyLX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjY5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNzEtXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmM6MjcyOlxcdFxcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcXG5tbS9odWdldGxiX2NtYS5jLTI3My19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI3NT1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNzktXFxubW0vaHVnZXRsYl9jbWEuYzoyODA6XFx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjgxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MzEuNzE2OTQ1NDI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjA2NjEzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBHb29kLCBnb29kLCB3ZSd2ZSBnb3QgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgY29uZmlybWVkLiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyBhY3R1YWxseSBhY2Nlc3NpYmxlLiBJcyBpdCBleHBvcnRlZCwgb3IgaXMgaXQgYnVyaWVkIGF3YXkgYXMgYSBzdGF0aWMgZnVuY3Rpb24/IEFscmlnaHQsIGNoZWNraW5nIHRoZSBzb3VyY2XigKYgTm9wZSwgaXQncyBub3Qgc3RhdGljLiBJdCdzIGRlY2xhcmVkIGluIGBtbS9odWdldGxiX2NtYS5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIFBlcmZlY3QhIFRoYXQgbWFrZXMgaXQgYW4gZXhjZWxsZW50IGZvY2FsIHBvaW50LlxuXG5XYWl0LCB0aG91Z2jigKYgYSBxdWljayBzYW5pdHkgY2hlY2vigKYgaXQncyBvbmx5IGNhbGxlZCBieSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggKmlzKiBzdGF0aWMuIEhtbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXNuJ3QgaW5saW5pbmcgdGhhdCwgYmVjYXVzZSB0aGF0IHdvdWxkIGNoYW5nZSB0aGluZ3MuIEhvbGQgb24uIE9rYXksIHRoZSBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIGl0ICpjb3VsZCogYmUgaW5saW5lZC4gQnV0IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGl0c2VsZiBpcyAqbm90KiBzdGF0aWMsIHNvIGl0IHdvbid0IGJlIGlubGluZWQgYWNyb3NzIHRyYW5zbGF0aW9uIHVuaXRzIHVubGVzcyB3ZSdyZSB1c2luZyBMaW5rIFRpbWUgT3B0aW1pemF0aW9uIChMVE8pLiBBbmQgdGhhdCBtZWFucyB0aGF0IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0aWxsIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG5cbk9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBnb3RjaGFzIHRvIGNvbnNpZGVyIGhlcmUuIFdlIGRvIG5lZWQgdG8gbG9vayBhdCBgQ09ORklHX05VTUFgLCBzaW5jZSB0aGUgY29kZSB1c2VzIGBub2RlbWFza2AuIExldCBtZSBjaGVjayBgbm9kZV9zdGF0ZXNgLiBBbHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE5NiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDozOC41Mzc2MDk1MzFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjAyNjg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9zdGF0ZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MjI0PWNwdV9vbmxpbmVfbWFzayB1c2luZyBhIENQVSBob3RwbHVnIG5vdGlmaWVyLCBhbmQgdGhlIG1lbXMgZmlsZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0OjIyNTphdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLS1pLmUuLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0LTIyNi1ub2RlcyB3aXRoIG1lbW9yeS0tdXNpbmcgdGhlIGNwdXNldF90cmFja19vbmxpbmVfbm9kZXMoKSBob29rLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdD00OD1ub2RlX29ubGluZV9tYXBcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAvdm1jb3JlaW5mby5yc3QtNTAtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdDo1MTpBbiBhcnJheSBub2RlX3N0YXRlc1tOX09OTElORV0gd2hpY2ggcmVwcmVzZW50cyB0aGUgc2V0IG9mIG9ubGluZSBub2Rlc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAvdm1jb3JlaW5mby5yc3QtNTItaW4gYSBzeXN0ZW0sIG9uZSBiaXQgcG9zaXRpb24gcGVyIG5vZGUgbnVtYmVyLiBVc2VkIHRvIGtlZXAgdHJhY2sgb2ZcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0xNTc9QWxvbmcgd2l0aCB0aGUgbm9kZSBzdHJ1Y3R1cmVzLCBrZXJuZWwgbWFpbnRhaW5zIGFuIGFycmF5IG9mIGBgbm9kZW1hc2tfdGBgXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE1ODpiaXRtYXNrcyBjYWxsZWQgYGBub2RlX3N0YXRlc2BgLiBFYWNoIGJpdG1hc2sgaW4gdGhpcyBhcnJheSByZXByZXNlbnRzIGEgc2V0IG9mXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE1OTpub2RlcyB3aXRoIHBhcnRpY3VsYXIgcHJvcGVydGllcyBhcyBkZWZpbmVkIGJ5IGBgZW51bSBub2RlX3N0YXRlc2BgOlxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNjAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MTc3PUZvciBlYWNoIG5vZGUgdGhhdCBoYXMgYSBwcm9wZXJ0eSBkZXNjcmliZWQgYWJvdmUsIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc4Om5vZGUgSUQgaW4gdGhlIGBgbm9kZV9zdGF0ZXNbXFx1MDAzY3Byb3BlcnR5XFx1MDAzZV1gYCBiaXRtYXNrIGlzIHNldC5cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTc5LVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0xODA9Rm9yIGV4YW1wbGUsIGZvciBub2RlIDIgd2l0aCBub3JtYWwgbWVtb3J5IGFuZCBDUFVzLCBiaXQgMiB3aWxsIGJlIHNldCBpbiA6OlxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xODEtXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4MjogIG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4MzogIG5vZGVfc3RhdGVzW05fT05MSU5FXVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxODQ6ICBub2RlX3N0YXRlc1tOX05PUk1BTF9NRU1PUlldXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4NTogIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4NjogIG5vZGVfc3RhdGVzW05fTUVNT1JZXVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxODc6ICBub2RlX3N0YXRlc1tOX0NQVV1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTg4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD05NT1SQU3lubPlnYfliIbphY3lnKjkuKTkuKroioLngrnkuIrnmoRhcm02NOacuuWZqOS4iu+8jOS9v+eUqCBgYG1vdmFibGVjb3JlPTgwJWBgIOWPguaVsFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNDMtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNDQ66Zmk5LqG6IqC54K557uT5p6E77yM5YaF5qC46L+Y57u05oqk5LqG5LiA5Liq5ZCN5Li6IGBgbm9kZV9zdGF0ZXNgYCDnmoQgYGBub2RlbWFza190YGBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0NS3kvY3mjqnnoIHmlbDnu4TjgILov5nkuKrmlbDnu4TkuK3nmoTmr4/kuKrkvY3mjqnnoIHku6PooajkuIDnu4TnibnlrprlsZ7mgKfnmoToioLngrnvvIzov5nkupvlsZ7mgKfnlLFcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE0NjpgYGVudW0gbm9kZV9zdGF0ZXNgYCDlrprkuYnvvIzlrprkuYnlpoLkuIvvvJpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTY2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTY3OuWvueS6juWFt+acieS4iui/sOWxnuaAp+eahOavj+S4quiKgueCue+8jGBgbm9kZV9zdGF0ZXNbXFx1MDAzY3Byb3BlcnR5XFx1MDAzZV1gYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTY4LeaOqeeggeS4reWvueW6lOS6juiKgueCuUlE55qE5L2N5Lya6KKr572u5L2N44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE3MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3MjogIG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzM6ICBub2RlX3N0YXRlc1tOX09OTElORV1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3NDogIG5vZGVfc3RhdGVzW05fTk9STUFMX01FTU9SWV1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3NTogIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzY6ICBub2RlX3N0YXRlc1tOX01FTU9SWV1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3NzogIG5vZGVfc3RhdGVzW05fQ1BVXVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTc4LVxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYz05NDQ9c3RydWN0IG5vZGVfYXR0ciB7XFxuZHJpdmVycy9iYXNlL25vZGUuYy05NDUtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjtcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjk0NjpcXHRlbnVtIG5vZGVfc3RhdGVzIHN0YXRlO1xcbmRyaXZlcnMvYmFzZS9ub2RlLmMtOTQ3LX07XFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTk0OT1zdGF0aWMgc3NpemVfdCBzaG93X25vZGVfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy05NTQtXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJSpwYmxcXFxcblxcXCIsXFxuZHJpdmVycy9iYXNlL25vZGUuYzo5NTU6XFx0XFx0XFx0ICBub2RlbWFza19wcl9hcmdzKFxcdTAwMjZub2RlX3N0YXRlc1tuYS1cXHUwMDNlc3RhdGVdKSk7XFxuZHJpdmVycy9iYXNlL25vZGUuYy05NTYtfVxcbi0tXFxuZnMvbmZzL25mczRfZnMuaD0xODQ9c3RydWN0IG5mczRfc3RhdGUge1xcbmZzL25mcy9uZnM0X2ZzLmgtMTg1LVxcdHN0cnVjdCBsaXN0X2hlYWQgb3Blbl9zdGF0ZXM7XFx0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIHN0YXRlX293bmVyICovXFxuZnMvbmZzL25mczRfZnMuaDoxODY6XFx0c3RydWN0IGxpc3RfaGVhZCBpbm9kZV9zdGF0ZXM7XFx0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIGlub2RlICovXFxuZnMvbmZzL25mczRfZnMuaC0xODctXFx0c3RydWN0IGxpc3RfaGVhZCBsb2NrX3N0YXRlcztcXHQvKiBMaXN0IG9mIHN1YnNlcnZpZW50IGxvY2sgc3RhdGVpZHMgKi9cXG4tLVxcbmZzL25mcy9uZnM0c3RhdGUuYz02NDI9X19uZnM0X2ZpbmRfc3RhdGVfYnlvd25lcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqb3duZXIpXFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmMtNjQ2LVxcbmZzL25mcy9uZnM0c3RhdGUuYzo2NDc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhdGUsIFxcdTAwMjZuZnNpLVxcdTAwM2VvcGVuX3N0YXRlcywgaW5vZGVfc3RhdGVzKSB7XFxuZnMvbmZzL25mczRzdGF0ZS5jLTY0OC1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZW93bmVyICE9IG93bmVyKVxcbi0tXFxuZnMvbmZzL25mczRzdGF0ZS5jPTY2NT1uZnM0X2dldF9vcGVuX3N0YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpvd25lcilcXG4tLVxcbmZzL25mcy9uZnM0c3RhdGUuYy02ODQtXFx0XFx0c3RhdGUtXFx1MDAzZWlub2RlID0gaW5vZGU7XFxuZnMvbmZzL25mczRzdGF0ZS5jOjY4NTpcXHRcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNnN0YXRlLVxcdTAwM2Vpbm9kZV9zdGF0ZXMsIFxcdTAwMjZuZnNpLVxcdTAwM2VvcGVuX3N0YXRlcyk7XFxuZnMvbmZzL25mczRzdGF0ZS5jLTY4Ni1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmM9NzAxPXZvaWQgbmZzNF9wdXRfb3Blbl9zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmMtNzA4LVxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuZnMvbmZzL25mczRzdGF0ZS5jOjcwOTpcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnN0YXRlLVxcdTAwM2Vpbm9kZV9zdGF0ZXMpO1xcbmZzL25mcy9uZnM0c3RhdGUuYy03MTAtXFx0bGlzdF9kZWwoXFx1MDAyNnN0YXRlLVxcdTAwM2VvcGVuX3N0YXRlcyk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzM0Mj1zdGF0aWMgc3RydWN0IHBhZ2UgKmNhbl9nYXRoZXJfbnVtYV9zdGF0cyhwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMzNTgtXFx0bmlkID0gcGFnZV90b19uaWQocGFnZSk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMzNTk6XFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM2MC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMzY2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqY2FuX2dhdGhlcl9udW1hX3N0YXRzX3BtZChwbWRfdCBwbWQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM4My1cXHRuaWQgPSBwYWdlX3RvX25pZChwYWdlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM4NDpcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMzg1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMTk9c3RhdGljIGlubGluZSBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyMjQ6I2RlZmluZSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTIyNS1zdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCkge31cXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MzAyPXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfbm9kZXNfYWxsb3dlZChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIG5vZGVtYXNrX3QgKm1hc2spXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDMte1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MzA0OlxcdG5vZGVzX2NvcHkoKm1hc2ssIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oPTM2NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19ub2Rlc19mb2xkKG5vZGVtYXNrX3QgKmRzdHAsIGNvbnN0IG5vZGVtYXNrX3QgKm9yaWdwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTM4My0gKi9cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6Mzg0OmVudW0gbm9kZV9zdGF0ZXMge1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0zODUtXFx0Tl9QT1NTSUJMRSxcXHRcXHQvKiBUaGUgbm9kZSBjb3VsZCBiZWNvbWUgb25saW5lIGF0IHNvbWUgcG9pbnQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDMtXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwNDpleHRlcm4gbm9kZW1hc2tfdCBub2RlX3N0YXRlc1tOUl9OT0RFX1NUQVRFU107XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQwNS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDA2LSNpZiBNQVhfTlVNTk9ERVMgXFx1MDAzZSAxXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBub2RlX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDgte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MDk6XFx0cmV0dXJuIG5vZGVfaXNzZXQobm9kZSwgbm9kZV9zdGF0ZXNbc3RhdGVdKTtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEwLX1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDExLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5vZGVfc2V0X3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MTMte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTQ6XFx0X19ub2RlX3NldChub2RlLCBcXHUwMDI2bm9kZV9zdGF0ZXNbc3RhdGVdKTtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDE1LX1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDE2LVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5vZGVfY2xlYXJfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQxOC17XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQxOTpcXHRfX25vZGVfY2xlYXIobm9kZSwgXFx1MDAyNm5vZGVfc3RhdGVzW3N0YXRlXSk7XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyMC19XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyMS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDIyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IG51bV9ub2RlX3N0YXRlKGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyMy17XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQyNDpcXHRyZXR1cm4gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW3N0YXRlXSk7XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDI3LSNkZWZpbmUgZm9yX2VhY2hfbm9kZV9zdGF0ZShfX25vZGUsIF9fc3RhdGUpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDI4OlxcdGZvcl9lYWNoX25vZGVfbWFzaygoX19ub2RlKSwgbm9kZV9zdGF0ZXNbX19zdGF0ZV0pXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyOS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDMwOiNkZWZpbmUgZmlyc3Rfb25saW5lX25vZGVcXHRmaXJzdF9ub2RlKG5vZGVfc3RhdGVzW05fT05MSU5FXSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDMxOiNkZWZpbmUgZmlyc3RfbWVtb3J5X25vZGVcXHRmaXJzdF9ub2RlKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDMyLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50IG5leHRfb25saW5lX25vZGUoaW50IG5pZClcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDMzLXtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDM0OlxcdHJldHVybiBuZXh0X25vZGUobmlkLCBub2RlX3N0YXRlc1tOX09OTElORV0pO1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MzUtfVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00MzY9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9tZW1vcnlfbm9kZShpbnQgbmlkKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00Mzcte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0Mzg6XFx0cmV0dXJuIG5leHRfbm9kZShuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQzOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg9NDUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX3NldF9vZmZsaW5lKGludCBuaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDU3LVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NTg6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDU5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjItXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQ2MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbm9kZV9zZXRfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ2NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDY2LVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0Njc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5vZGVfY2xlYXJfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ2OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDcwLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NzE6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbnVtX25vZGVfc3RhdGUoZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDcyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00OTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9yYW5kb20oY29uc3Qgbm9kZW1hc2tfdCAqbWFza3ApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNTAxLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo1MDI6I2RlZmluZSBub2RlX29ubGluZV9tYXAgXFx0bm9kZV9zdGF0ZXNbTl9PTkxJTkVdXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjUwMzojZGVmaW5lIG5vZGVfcG9zc2libGVfbWFwIFxcdG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTUwNC1cXG4tLVxcbmluaXQvbWFpbi5jPTE2Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGtlcm5lbF9pbml0X2ZyZWVhYmxlKHZvaWQpXFxuLS1cXG5pbml0L21haW4uYy0xNjM2LVxcdCAqL1xcbmluaXQvbWFpbi5jOjE2Mzc6XFx0c2V0X21lbXNfYWxsb3dlZChub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbmluaXQvbWFpbi5jLTE2MzgtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQ2OT1zdGF0aWMgdm9pZCBndWFyYW50ZWVfYWN0aXZlX2NwdXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQ5NC0gKiBPbmUgd2F5IG9yIGFub3RoZXIsIHdlIGd1YXJhbnRlZSB0byByZXR1cm4gc29tZSBub24tZW1wdHkgc3Vic2V0XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0OTU6ICogb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLlxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDk2LSAqXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQ5OT1zdGF0aWMgdm9pZCBndWFyYW50ZWVfb25saW5lX21lbXMoc3RydWN0IGNwdXNldCAqY3MsIG5vZGVtYXNrX3QgKnBtYXNrKVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNTAwLXtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjUwMTpcXHR3aGlsZSAoIW5vZGVzX2FuZCgqcG1hc2ssIGNzLVxcdTAwM2VlZmZlY3RpdmVfbWVtcywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTUwMi1cXHRcXHRjcyA9IHBhcmVudF9jcyhjcyk7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTM4NzA9c3RhdGljIHZvaWQgY3B1c2V0X2hhbmRsZV9ob3RwbHVnKHZvaWQpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM4ODYtXFx0Y3B1bWFza19jb3B5KFxcdTAwMjZuZXdfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjM4ODc6XFx0bmV3X21lbXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zODg4LVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0zOTc3PXZvaWQgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cyh2b2lkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zOTg3LS8qXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozOTg4OiAqIEtlZXAgdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgdHJhY2tpbmcgbm9kZV9zdGF0ZXNbTl9NRU1PUlldLlxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzk4OTogKiBDYWxsIHRoaXMgcm91dGluZSBhbnl0aW1lIGFmdGVyIG5vZGVfc3RhdGVzW05fTUVNT1JZXSBjaGFuZ2VzLlxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzk5MC0gKiBTZWUgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cygpIGZvciBDUFUgaG90cGx1ZyBoYW5kbGluZy5cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDAwND12b2lkIF9faW5pdCBjcHVzZXRfaW5pdF9zbXAodm9pZClcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDAxMy1cXHRjcHVtYXNrX2NvcHkodG9wX2NwdXNldC5lZmZlY3RpdmVfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQwMTQ6XFx0dG9wX2NwdXNldC5lZmZlY3RpdmVfbWVtcyA9IG5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQwMTUtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQxMzI9dm9pZCBfX2luaXQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZClcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDE0Mi0gKiBhdHRhY2hlZCB0byB0aGUgc3BlY2lmaWVkIEB0c2suICBHdWFyYW50ZWVkIHRvIHJldHVybiBzb21lIG5vbi1lbXB0eVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDE0MzogKiBzdWJzZXQgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBldmVuIGlmIHRoaXMgbWVhbnMgZ29pbmcgb3V0c2lkZSB0aGVcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQxNDQtICogdGFza3MgY3B1c2V0Llxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00MjI2PWJvb2wgY3B1c2V0X2N1cnJlbnRfbm9kZV9hbGxvd2VkKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDI2NS0gKiBSZXR1cm5zIGVmZmVjdGl2ZV9tZW1zIG1hc2sgZnJvbSBhIGNncm91cCBjcHVzZXQgaWYgaXQgaXMgY2dyb3VwIHYyIGFuZFxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDI2NjogKiBoYXMgY3B1c2V0IHN1YnN5cy4gT3RoZXJ3aXNlLCByZXR1cm5zIG5vZGVfc3RhdGVzW05fTUVNT1JZXS5cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyNjctICpcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDI3OD12b2lkIGNwdXNldF9ub2Rlc19hbGxvd2VkKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgbm9kZW1hc2tfdCAqbWFzaylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDI4OC1cXHRpZiAoIWNncm91cCB8fCAhY3B1c2V0X3YyKCkpIHtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyODk6XFx0XFx0bm9kZXNfY29weSgqbWFzaywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyOTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjk0LVxcdGlmICghY3NzKSB7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0Mjk1OlxcdFxcdG5vZGVzX2NvcHkoKm1hc2ssIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjk2LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9rdGhyZWFkLmM9Nzg3PWludCBrdGhyZWFkZCh2b2lkICp1bnVzZWQpXFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTc5NC1cXHRpZ25vcmVfc2lnbmFscyh0c2spO1xcbmtlcm5lbC9rdGhyZWFkLmM6Nzk1OlxcdHNldF9tZW1zX2FsbG93ZWQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5rZXJuZWwva3RocmVhZC5jLTc5Ni1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4MS1cXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODI6XFx0a2hvX3NjcmF0Y2hfY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgKyAyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjgzLVxcdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcXG4tLVxcbmtlcm5lbC9wYWRhdGEuYz00NDQ9dm9pZCBfX2luaXQgcGFkYXRhX2RvX211bHRpdGhyZWFkZWQoc3RydWN0IHBhZGF0YV9tdF9qb2IgKmpvYilcXG4tLVxcbmtlcm5lbC9wYWRhdGEuYy00OTAtXFx0XFx0XFx0ZG8ge1xcbmtlcm5lbC9wYWRhdGEuYzo0OTE6XFx0XFx0XFx0XFx0bmlkID0gbmV4dF9ub2RlX2luKG9sZF9ub2RlLCBub2RlX3N0YXRlc1tOX0NQVV0pO1xcbmtlcm5lbC9wYWRhdGEuYy00OTItXFx0XFx0XFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcXHUwMDI2bGFzdF91c2VkX25pZCwgXFx1MDAyNm9sZF9ub2RlLCBuaWQpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1MD1zdGF0aWMgczMyIHBpY2tfaWRsZV9jcHVfZnJvbV9vbmxpbmVfbm9kZXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXNfYWxsb3dlZCwgaW50IG5vZGUsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE2MS1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNjI6XFx0bm9kZXNfY29weSgqdW52aXNpdGVkLCBub2RlX3N0YXRlc1tOX09OTElORV0pO1xcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE2My1cXHRub2RlX2NsZWFyKG5vZGUsICp1bnZpc2l0ZWQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0zNTU2PXN0YXRpYyBpbnQgcHJlZmVycmVkX2dyb3VwX25pZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1OTQtXFx0ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzozNTk1OlxcdG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9DUFVdO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzU5Ni1cXHRmb3IgKGRpc3QgPSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsgZGlzdCBcXHUwMDNlIExPQ0FMX0RJU1RBTkNFOyBkaXN0LS0pIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMzUwPXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIzNzktXFxubW0vaHVnZXRsYi5jOjIzODA6XFx0XFx0Zm9saW8gPSByZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKGgsIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIDEpO1xcbm1tL2h1Z2V0bGIuYy0yMzgxLVxcdFxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmM9MzM3Mj1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTMzODYtXFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmM6MzM4NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5tbS9odWdldGxiLmMtMzM4OC1cXHRcXHRcXHRpZiAoIWZvbGlvIFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZmb2xpb19saXN0KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vaHVnZXRsYi5jLTMzOTItXFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmM6MzM5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5tbS9odWdldGxiLmMtMzM5NC1cXHRcXHRcXHR9XFxuLS1cXG5tbS9odWdldGxiLmM9MzQ0Mj1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9wYWdlc19hbGxvY19ib290X25vZGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDYwLVxcdFxcdH1cXG5tbS9odWdldGxiLmM6MzQ2MTpcXHRcXHRmb2xpbyA9IGFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhoLCBcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLFxcbm1tL2h1Z2V0bGIuYy0zNDYyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX2FsbG9jX25vcmV0cnksIFxcdTAwMjZuZXh0X25vZGUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQwNDc9c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDYyLVxcdFxcdFxcdFxcdGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KFxcdTAwMjZub2Rlc19hbGxvd2VkKSkpXFxubW0vaHVnZXRsYi5jOjQwNjM6XFx0XFx0XFx0bl9tYXNrID0gXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5tbS9odWdldGxiLmMtNDA2NC1cXHRcXHRlbHNlXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI3PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTM3LVxcdGlmICghbm9kZW1hc2spXFxubW0vaHVnZXRsYl9jbWEuYzozODpcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxubW0vaHVnZXRsYl9jbWEuYy0zOS1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0xODE9c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTE5OS1cXHR9IGVsc2Uge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMDA6XFx0XFx0bl9tYXNrID0gXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjAxLVxcdH1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTQyNT1zdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNDU3LVxcdFxcdCAqL1xcbm1tL21lbW9yeS10aWVycy5jOjQ1ODpcXHRcXHRub2Rlc19hbmRub3QodGllcl9ub2Rlcywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldLCB0aWVyX25vZGVzKTtcXG5tbS9tZW1vcnktdGllcnMuYy00NTktXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00ODgtXFx0XFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xcbm1tL21lbW9yeS10aWVycy5jOjQ4OTpcXHRcXHRpZiAobm9kZXNfYW5kKHRpZXJfbm9kZXMsIG5vZGVfc3RhdGVzW05fQ1BVXSwgdGllcl9ub2RlcykpIHtcXG5tbS9tZW1vcnktdGllcnMuYy00OTAtXFx0XFx0XFx0LypcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTUwNC1cXHQgKi9cXG5tbS9tZW1vcnktdGllcnMuYzo1MDU6XFx0bG93ZXJfdGllciA9IG5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5tbS9tZW1vcnktdGllcnMuYy01MDYtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcXHUwMDI2bWVtb3J5X3RpZXJzLCBsaXN0KSB7XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz05MDY9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtOTMwLVxcdC8qIFJlY29yZCBub2RlcyB3aXRoIG1lbW9yeSBhbmQgQ1BVIHRvIHNldCBkZWZhdWx0IERSQU0gcGVyZm9ybWFuY2UuICovXFxubW0vbWVtb3J5LXRpZXJzLmM6OTMxOlxcdG5vZGVzX2FuZChkZWZhdWx0X2RyYW1fbm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSxcXG5tbS9tZW1vcnktdGllcnMuYzo5MzI6XFx0XFx0ICBub2RlX3N0YXRlc1tOX0NQVV0pO1xcbm1tL21lbW9yeS10aWVycy5jLTkzMy1cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc5Mz1zdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NDQtXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZzb3VyY2UpKSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxODQ1OlxcdFxcdG5vZGVtYXNrX3Qgbm1hc2sgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODQ2LVxcdFxcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmM9NDA0PXN0YXRpYyBpbnQgbXBvbF9zZXRfbm9kZW1hc2soc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNDE4LVxcdG5vZGVzX2FuZChuc2MtXFx1MDAzZW1hc2sxLFxcbm1tL21lbXBvbGljeS5jOjQxOTpcXHRcXHQgIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5tbS9tZW1wb2xpY3kuYy00MjAtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDgwPWJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA4OS1cXHQgKlxcbm1tL21lbXBvbGljeS5jOjIwOTA6XFx0ICogcG9saWN5LVxcdTAwM2Vub2RlcyBpcyBpbnRlcnNlY3Qgd2l0aCBub2RlX3N0YXRlc1tOX01FTU9SWV0uXFxubW0vbWVtcG9saWN5LmMtMjA5MS1cXHQgKiBzbyBpZiB0aGUgZm9sbG93aW5nIHRlc3QgZmFpbHMsIGl0IGltcGxpZXNcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwOTMtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MjA5NDpcXHRpZiAoIW5vZGVzX2ludGVyc2VjdHMocG9saWN5LVxcdTAwM2Vub2Rlcywgbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pKVxcbm1tL21lbXBvbGljeS5jLTIwOTUtXFx0XFx0ZHluYW1pY19wb2xpY3lfem9uZSA9IFpPTkVfTU9WQUJMRTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM0MTk9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNDM1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbXBvbGljeS5jOjM0MzY6XFx0XFx0aWYgKCFub2Rlc19zdWJzZXQobm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXFxubW0vbWVtcG9saWN5LmMtMzQzNy1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0NjctXFx0XFx0aWYgKCFub2RlbGlzdClcXG5tbS9tZW1wb2xpY3kuYzozNDY4OlxcdFxcdFxcdG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbm1tL21lbXBvbGljeS5jLTM0NjktXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9tbV9pbml0LmM9MzY4PXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3pvbmVfbW92YWJsZV9wZm5zX2Zvcl9ub2Rlcyh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTM3My1cXHQvKiBzYXZlIHRoZSBzdGF0ZSBiZWZvcmUgYm9ycm93IHRoZSBub2RlbWFzayAqL1xcbm1tL21tX2luaXQuYzozNzQ6XFx0bm9kZW1hc2tfdCBzYXZlZF9ub2RlX3N0YXRlID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbm1tL21tX2luaXQuYy0zNzUtXFx0dW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzID0gZWFybHlfY2FsY3VsYXRlX3RvdGFscGFnZXMoKTtcXG5tbS9tbV9pbml0LmM6Mzc2OlxcdGludCB1c2FibGVfbm9kZXMgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5tbS9tbV9pbml0LmMtMzc3LVxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7XFxuLS1cXG5tbS9tbV9pbml0LmMtNTg4LVxcdC8qIHJlc3RvcmUgdGhlIG5vZGVfc3RhdGUgKi9cXG5tbS9tbV9pbml0LmM6NTg5OlxcdG5vZGVfc3RhdGVzW05fTUVNT1JZXSA9IHNhdmVkX25vZGVfc3RhdGU7XFxubW0vbW1faW5pdC5jLTU5MC19XFxuLS1cXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0yODMtXFx0aWYgKG9jLVxcdTAwM2Vub2RlbWFzayBcXHUwMDI2XFx1MDAyNlxcbm1tL29vbV9raWxsLmM6Mjg0OlxcdCAgICAhbm9kZXNfc3Vic2V0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgKm9jLVxcdTAwM2Vub2RlbWFzaykpIHtcXG5tbS9vb21fa2lsbC5jLTI4NS1cXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTg1PUVYUE9SVF9TWU1CT0wobGF0ZW50X2VudHJvcHkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE5MC0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6MTkxOm5vZGVtYXNrX3Qgbm9kZV9zdGF0ZXNbTlJfTk9ERV9TVEFURVNdIF9fcmVhZF9tb3N0bHkgPSB7XFxubW0vcGFnZV9hbGxvYy5jLTE5Mi1cXHRbTl9QT1NTSUJMRV0gPSBOT0RFX01BU0tfQUxMLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIwMi19O1xcbm1tL3BhZ2VfYWxsb2MuYzoyMDM6RVhQT1JUX1NZTUJPTChub2RlX3N0YXRlcyk7XFxubW0vcGFnZV9hbGxvYy5jLTIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6NDAuODk3ODgyNjMxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTY3NzkxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBSZWZpbmVtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBJIGNhbiBzYWZlbHkgaWdub3JlIGBDT05GSUdfTlVNQWAgaGVyZSDigJMgYG5vZGVfc3RhdGVzYCBpcyBleHBvc2VkIHJlZ2FyZGxlc3MuIEdvb2QuIFRoZSBpbml0aWFsIGlkZWEgb2YgbmVlZGluZyBgQ01BYCBhbmQgYEhVR0VUTEJGU2AgaXMgbG9va2luZyBzb2xpZC5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHJlZmluZSB0aGlzLiBUaGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IGNvbXBpbGVkICpvbmx5KiBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICphbmQqIGBDT05GSUdfQ09OVElHX0FMTE9DYCBhcmUgYm90aCBlbmFibGVkLiBOb3csIGBDT05GSUdfQ09OVElHX0FMTE9DYCBpcyBhdXRvLXNlbGVjdGVkIGJ5IGBDT05GSUdfQ01BYCwgc28gdGhhdCdzIHRha2VuIGNhcmUgb2YuIEFuZCwgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZSwgc28gaXTigJlzIGxpa2VseSBoYW5kbGVkIGltcGxpY2l0bHkgYnkgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFNvLCBwcmFjdGljYWxseSBzcGVha2luZywgSSAqZG9uJ3QqIG5lZWQgdG8gbGlzdCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiBKdXN0IGBDTUFgIGFuZCBgSFVHRVRMQkZTYCBzZWVtIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuTGV0J3MgZG8gYSBxdWljayBkZXBlbmRlbmN5IGNoZWNrLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBgQ09ORklHX0NNQWAgcmVsaWVzIG9uIGBNTVVgLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCBgQ09ORklHX0hVR0VUTEJGU2AgbmVlZHMgYFNZU0ZTYCBhbmQgYEhVR0VUTEJfUEFHRWAsIGFuZCBgSFVHRVRMQl9QQUdFYCBhbHNvIGRlcGVuZHMgb24gYE1NVWAuIFRoZSBgTU1VYCBkZXBlbmRlbmN5IGlzIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gU28sIGFmdGVyIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgb3JpZ2luYWwgaWRlYSBob2xkczogYENNQWAgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgb25seSBjb25maWdzIHRoYXQgSSBuZWVkLlxuXG5Pa2F5LCBsZXQncyB3cml0ZSBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBJIGhhdmUgaWRlbnRpZmllZC5cblxuTXkgYW5hbHlzaXMgZ2l2ZXMgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgXG5gRm9jdXNTeW1ib2xzOiBbXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIl1gXG5gRW5hYmxlQ29uZmlnczogW1wiQ01BXCIsIFwiSFVHRVRMQkZTXCJdYFxuYFJlYXNvbmluZzogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuXCJgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjQxLCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDo0OC4wNTQ2NjUzMDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkyNzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gd2hlbiBub2RlbWFzayBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChodWdldGxiIENNQSkgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2VwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB3aGVuIG5vZGVtYXNrIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGh1Z2V0bGIgQ01BKSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZXBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6pvsw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 00:14:36 +0000 UTC FinishedAt: 2026-07-27 00:54:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "40de8160ca7f67d14619ee0351ce5d68fc4a237a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "40de8160ca7f67d14619ee0351ce5d68fc4a237a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "HUGETLBFS" ], "series_id": "9e7ed6ab-9f68-435a-8d90-874ec81b8b94" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZDFhMzAxZDg3Yzk1ZWIzNDFjMzMzOWQ4NzU0ZWNjMmZjMTZkZWNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDA6NTE6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmNcbmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NzQ0ZGUwY2VlYjczNSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfY21hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmNcbkBAIC0zNCw3ICYjNDM7MzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiYjNDM7XHRpZiAoIW5vZGVtYXNrKVxuJiM0MztcdFx0bm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG4mIzQzO1xuJiM0MztcdGlmIChodWdldGxiX2NtYVtuaWRdIFx1MDAyNlx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuIFxuIFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gd2hlbiBub2RlbWFzayBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChodWdldGxiIENNQSkgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2VwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkMWEzMDFkODdjOTVlYjM0MWMzMzM5ZDg3NTRlY2MyZmMxNmRlY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwMDo1MTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jCmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NzQ0ZGUwY2VlYjczNSAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jCkBAIC0zNCw3ICYjNDM7MzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAlpZiAoIWh1Z2V0bGJfY21hX3NpemUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKGh1Z2V0bGJfY21hW25pZF0pCiYjNDM7CWlmICghbm9kZW1hc2spCiYjNDM7CQlub2RlbWFzayA9ICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldOwomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIE1vZGlmaWNhdGlvbioqCgpTbywgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vaHVnZXRsYl9jbWEuY2AsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0LiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBtb2RpZmljYXRpb24gdG8gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBvZiBmcm96ZW4gZm9saW9zIHdpdGhpbiB0aGUgaHVnZSBwYWdlIENNQSBhcmVhIGlzIGJlaW5nIGFsdGVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9ucyBvZiBDTUEgd2l0aCBodWdldGxiZnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gZnJhZ21lbnRhdGlvbiwgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZSwgYW5kIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGBodWdldGxiYCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBvdGhlciBzeXN0ZW0gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbiBtaW5kLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGdldCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYtXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI4LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBjaGFuZ2UsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjoKCioqRXhhbWluaW5nIGEgaHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIGBub2RlbWFza2AgaXMgbnVsbCBhbmQgaWYgc28sIGRlZmF1bHRzIGl0IHRvIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAuIEZvbGxvd2luZyB0aGF0LCBpdCBwZXJmb3JtcyBhIGNoZWNrIHVzaW5nIGBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBgaHVnZXRsYiBDTUFgIGNvZGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaHVnZXRsYl9jbWEuY2AgaXMgY29uZmlndXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIHNlZSB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjaGVjayBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zIGFuZCBpZiB0aGVyZSYjMzk7cyBhbiBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IgYXZhaWxhYmlsaXR5LCBvciBpZiB0aGVyZSBpcyBhbnkgYWRkZWQgY29tcGxleGl0eSBvciBidWctZml4aW5nIHJlcXVpcmVkLiBUaGlzIGNoZWNrIGxvb2tzIGxpa2UgYSBnb29kIG9uZSwgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiBvciBlbnN1cmluZyBub2RlIGFmZmluaXR5IGZvciBodWdldGxiIGFsbG9jYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjAyLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1MC1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNC1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDUtXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI3ODp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cbi0tXG5tbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmMtMTktc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xMzI9ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xMzMtXG5tbS9odWdldGxiX2NtYS5jOjEzNDpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTM2Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTEzNy19XG5tbS9odWdldGxiX2NtYS5jLTEzOC1cbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTQxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNDIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cbm1tL2h1Z2V0bGJfY21hLmM6MTU1Olx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cdGlmICghb3JkZXIpIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0yNjAte1xubW0vaHVnZXRsYl9jbWEuYzoyNjE6XHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjYyLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3MS1cdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmM6MjcyOlx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG5tbS9odWdldGxiX2NtYS5jLTI3My19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3OS1cbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjgxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEludGVycGxheSBvZiBDTUEgYW5kIEh1Z2VUTEIgaW4gQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY3Jvc3MtY29tcGlsYXRpb24gY29uZmlnIHRlbGxzIG1lIGBtbS9odWdldGxiX2NtYS5jYCBnZXRzIGJ1aWx0IGlmIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGVuYWJsZWQuIEludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGEgZGlyZWN0IGludGVyYWN0aW9uIGJldHdlZW4gdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciAoQ01BKSBhbmQgSHVnZVRMQiBmaWxlIHN5c3RlbS4gSXQmIzM5O3Mgbm90IGEgY29tbW9uIGNvbmZpZ3VyYXRpb24sIGJ1dCB0aGVyZSBhcmUgZGVmaW5pdGVseSBjYXNlcyB3aGVyZSB5b3UmIzM5O2Qgd2FudCB0byB1c2UgQ01BIHRvIHByZS1hbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGNodW5rcyBzcGVjaWZpY2FsbHkgZm9yIEh1Z2VUTEIgdXNlLiBNYWtlcyBzZW5zZSBmb3IgcGVyZm9ybWFuY2UgcHJlZGljdGFiaWxpdHksIGVzcGVjaWFsbHkgaWYgeW91JiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyeSBsYXJnZSBwYWdlcyBhbmQgd2FudCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGlzc3Vlcy4KClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9odWdldGxiX2NtYS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVncmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24gaGVyZS4uLiBJdCYjMzk7cyB2ZXJ5IGxpa2VseSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0aGF0JiMzOTtzIGhhbmRsaW5nIHRoZSBrZXkgcGFydHMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBDTUEgaXMgdXRpbGl6ZWQgdG8gcHJlcGFyZSB0aGUgcGh5c2ljYWwgY29udGlndW91cyBtZW1vcnksIGFuZCBob3cgaXQgZ2V0cyBwYXNzZWQgdG8gdGhlIEh1Z2VUTEIgc3lzdGVtLiBEb2VzIHRoZSBDTUEgYWxsb2NhdGlvbiBoYXBwZW4gKmJlZm9yZSogdGhlIEh1Z2VUTEIgYWxsb2NhdGlvbiBpcyByZXF1ZXN0ZWQsIG9yIGlzIHRoZXJlIHNvbWUgc29ydCBvZiBjb29yZGluYXRlZCBoYW5kc2hha2U/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIHdoYXQgaGFwcGVucyBpZiBDTUEgZmFpbHMgdG8gcHJvdmlkZSB0aGUgbWVtb3J5PyBIb3cgaXMgdGhpcyAmIzM0O2Zyb3plbiBmb2xpbyYjMzQ7IGNvbmNlcHQgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgSHVnZVRMQiBtYW5hZ2VtZW50PyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGhlcmUsIGJlY2F1c2UgYSBtaXNjb25maWd1cmF0aW9uIG9yIGJ1ZyBoZXJlIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHByb2JsZW1zLCBvciBldmVuIGNhdGFzdHJvcGhpYyBmYWlsdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHR2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gIDIyOlx0e1xuICAyMzpcdFx0V0FSTl9PTl9PTkNFKCFjbWFfcmVsZWFzZV9mcm96ZW4oaHVnZXRsYl9jbWFbZm9saW9fbmlkKGZvbGlvKV0sXG4gIDI0Olx0XHRcdFx0XHRcdCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpKTtcbiAgMjU6XHR9XG4gIDI2Olx0XG4gIDI3Olx0c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiAgMjg6XHRcdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4gIDI5Olx0e1xuICAzMDpcdFx0aW50IG5vZGU7XG4gIDMxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICAzMjpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuICAzMzpcdFxuICAzNDpcdFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxuICAzNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzY6XHRcbiAgMzc6XHRcdGlmICghbm9kZW1hc2spXG4gIDM4Olx0XHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuICAzOTpcdFxuICA0MDpcdFx0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuICA0MTpcdFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuICA0NDpcdFx0XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKSB7XG4gIDQ1Olx0XHRcdFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcbiAgNDY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuICA0NzpcdFxuICA0ODpcdFx0XHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25vZGVdLCBvcmRlcik7XG4gIDQ5Olx0XHRcdFx0aWYgKHBhZ2UpXG4gIDUwOlx0XHRcdFx0XHRicmVhaztcbiAgNTE6XHRcdFx0fVxuICA1MjpcdFx0fVxuICA1MzpcdFxuICA1NDpcdFx0aWYgKCFwYWdlKVxuICA1NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNTY6XHRcbiAgNTc6XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiAgNTg6XHRcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4gIDU5Olx0XHRyZXR1cm4gZm9saW87XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxuICA2MzpcdGh1Z2V0bGJfY21hX2FsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50ICpuaWQsIGJvb2wgbm9kZV9leGFjdClcbiAgNjQ6XHR7XG4gIDY1Olx0XHRzdHJ1Y3QgY21hICpjbWE7XG4gIDY2Olx0XHRzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm07XG4gIDY3Olx0XHRpbnQgbm9kZSA9ICpuaWQ7XG4gIDY4Olx0XG4gIDY5Olx0XHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEh1Z2VUTEIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gaG93IHRoZXNlIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZ2V0IGFsbG9jYXRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBUaGUgdHJhY2UgbGVhZHMgbWUgdG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIGFuZCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsIGFsbG9jYXRpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28uIEkgc2hvdWxkIGhlYWQgc3RyYWlnaHQgdG8gYG1tL2h1Z2V0bGIuY2AgYW5kIGRpZyBpbnRvIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHRvIHNlZSBob3cgaXQmIzM5O3MgdXRpbGl6aW5nIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJJiMzOTttIGhvcGluZyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB3ZSBuZWVkIHRvIGdvIHRvIHVuZGVyc3RhbmQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OS0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcbm1tL2h1Z2V0bGIuYzoxMzYwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTEzNjEtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vaHVnZXRsYi5jOjEzNzc6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG5tbS9odWdldGxiLmMtMTM3OC1cdFx0XHRcdFx0ICBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg0Ni1cdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXG5tbS9odWdldGxiLmM6MTg0NzpcdFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0xODQ4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2V0bGIgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGNhbGwgc3RhY2suIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGlzIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiB0aGluZ3MsIGNhbGxlZCBmcm9tIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLCB3aGljaCBpdHNlbGYgYnJhbmNoZXMgZnJvbSBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIGFuZCBmaW5hbGx5LCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBhbmQgYGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpb2AuIFllYWgsIHRoaXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBjcnVjaWFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBgTlVMTGAgYG5vZGVtYXNrYCBkZXJlZmVyZW5jZSBpbiBgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaylgLiBUaGUgcHJvcG9zZWQgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYWRkIGEgY2hlY2s6IGBpZiAoIW5vZGVtYXNrKSBub2RlbWFzayA9ICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldO2AuIFRoYXQgc2VlbXMgZnVuY3Rpb25hbGx5IHNvdW5kLCBhIHR5cGljYWwgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZvciB0aGUgYGh1Z2V0bGJfY21hLmNgIHNpZGUgb2YgdGhpbmdzLCB3ZSBjbGVhcmx5IG5lZWQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIEFuZCBmb3IgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmLCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGFuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgZG9lc24mIzM5O3QgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgKmFsd2F5cyogY2FsbCBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYD8gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgbW0vaHVnZXRsYi5jYCBjb2RlIGFyb3VuZCBsaW5lIDEzNjAganVzdCB0byBiZSBzdXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU1Olx0ZXJyOlxuMTM1NjpcdFx0cmV0dXJuIE5VTEw7XG4xMzU3Olx0fVxuMTM1ODpcdFxuMTM1OTpcdCNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuMTM2MDpcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuMTM2MTpcdFx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbjEzNjI6XHR7XG4xMzYzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTM2NDpcdFxuMTM2NTpcdFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbjEzNjY6XHRcdGlmIChmb2xpbylcbjEzNjc6XHRcdFx0cmV0dXJuIGZvbGlvO1xuMTM2ODpcdFxuMTM2OTpcdFx0aWYgKGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYygpKVxuMTM3MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzNzE6XHRcbjEzNzI6XHRcdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKWFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXMoMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGdmcF9tYXNrLFxuMTM3MzpcdFx0XHRcdFx0XHRcdFx0ICBuaWQsIG5vZGVtYXNrKTtcbjEzNzQ6XHRcdHJldHVybiBmb2xpbztcbjEzNzU6XHR9XG4xMzc2Olx0I2Vsc2UgLyogIUNPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFIHx8ICFDT05GSUdfQ09OVElHX0FMTE9DICovXG4xMzc3Olx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4xMzc4Olx0XHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4xMzc5Olx0e1xuMTM4MDpcdFx0cmV0dXJuIE5VTEw7XG4xMzgxOlx0fVxuMTM4MjpcdCNlbmRpZlxuMTM4MzpcdFxuMTM4NDpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NzEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHB1enpsZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGVzZSBrZXJuZWwgaW50ZXJuYWxzOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSBuZWVkIGJvdGggYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBhbmQgYENPTkZJR19DT05USUdfQUxMT0NgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGFyZSByZXF1aXJlZCBpbiBjb25qdW5jdGlvbi4gSG1tLCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIHJpbmdzIGEgYmVsbC4gVGhhdCYjMzk7cyB1c3VhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjYXBhYmlsaXR5LCBpdCYjMzk7cyB0eXBpY2FsbHkgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgaGFyZHdhcmUmIzM5O3MgYXJjaGl0ZWN0dXJlLiBJIGRvbiYjMzk7dCB1c3VhbGx5IGhhdmUgdG8gZGlnIGludG8gaXQgZGlyZWN0bHkuCgpOb3csIGBDT05GSUdfQ09OVElHX0FMTE9DYCwgdGhhdCYjMzk7cyBkaWZmZXJlbnQuIFRoYXQgdXN1YWxseSBnZXRzIHNlbGVjdGVkIGJhc2VkIG9uIGFub3RoZXIgY29uZmlnLCBtb3JlIHNwZWNpZmljYWxseSwgYENPTkZJR19DTUFgIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIEkga25vdyBgQ01BYCBuZWVkcyB0byBhbGxvY2F0ZSBjb250aWd1b3VzIGJsb2NrcyBvZiBwaHlzaWNhbCBtZW1vcnkuIFRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5IEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBtbS9LY29uZmlnYCwgaXQmIzM5O3MgYmVlbiBhIHdoaWxlLCBidXQgSSYjMzk7bSBjZXJ0YWluIEkmIzM5O2xsIGZpbmQgYSBjbGVhciBkZXBlbmRlbmN5IHRoZXJlLiBCZXR0ZXIgY2hlY2sgdGhlIEtjb25maWcgZmlsZSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09OVElHX0FMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYXMgd2VsbC4KCioqQ01BLCBIdWdlVExCLCBhbmQgQ29udGlndW91cyBBbGxvY2F0aW9uOiBNeSBDdXJyZW50IFRoaW5raW5nKioKClJpZ2h0LCBzbyBgQ09OVElHX0FMTE9DYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgKmJlY2F1c2UqIG9mIGBDTUFgIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBoZXJlLiBXaGljaCwgb2YgY291cnNlLCBtZWFucyB3ZSBuZWVkICpib3RoKiBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGJ1dCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LgoKSG1tLCBJIHJlY2FsbCBub3c6IHRoZSBgaHVnZXRsYl9jbWEuY2AgZmlsZSAqaXRzZWxmKiBpcyBjb21waWxlZCBvbmx5IGlmIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIHNldC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgdGhlIGdsdWUgYmV0d2VlbiB0aGUgdHdvLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIHByZWNpc2VseSB3aGF0IEkgdGhpbmsgdGhleSBhcmUuIE5vIHBvaW50IGluIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYXQgdGhpcyBzdGFnZS4gSSB3YW50IHRvIHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcnVsZXMgZXhwbGljaXRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWEubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNzctXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDc4Olx0aHVnZXRsYl9jbWFfb25seT1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNzktXHRcdFx0W0hXLENNQSxFQVJMWV0gV2hlbiBhbGxvY2F0aW5nIG5ldyBIdWdlVExCIHBhZ2VzLCBvbmx5XG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM4LSNpZmRlZiBDT05GSUdfQ01BXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6Mzk6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XG4tLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM9MjAxPWFyY2hfaW5pdGNhbGwoaHVnZXRsYnBhZ2VfaW5pdCk7XG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYzoyMDM6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDQte1xuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00NDg9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjQ1MTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTIte1xuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jPTIyNT1ib29sIF9faW5pdCBhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MjM1OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM2LXtcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTQyPWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM6NDY6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNzY9dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc3LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc5LVxuLS1cbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYl9jbWEub1xubW0vTWFrZWZpbGUtODQtZW5kaWZcbi0tXG5tbS9odWdldGxiX2NtYS5jPTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7XG5tbS9odWdldGxiX2NtYS5jOjE4OnN0YXRpYyBib29sIGh1Z2V0bGJfY21hX29ubHkgX19yb19hZnRlcl9pbml0O1xubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTEzMj1lYXJseV9wYXJhbShcJiMzNDtodWdldGxiX2NtYVwmIzM0OywgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYSk7XG5tbS9odWdldGxiX2NtYS5jLTEzMy1cbm1tL2h1Z2V0bGJfY21hLmM6MTM0OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seShjaGFyICpwKVxubW0vaHVnZXRsYl9jbWEuYy0xMzUte1xubW0vaHVnZXRsYl9jbWEuYzoxMzY6XHRyZXR1cm4ga3N0cnRvYm9vbChwLCBcdTAwMjZodWdldGxiX2NtYV9vbmx5KTtcbm1tL2h1Z2V0bGJfY21hLmMtMTM3LX1cbm1tL2h1Z2V0bGJfY21hLmMtMTM4LVxubW0vaHVnZXRsYl9jbWEuYzoxMzk6ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFfb25seVwmIzM0OywgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KTtcbm1tL2h1Z2V0bGJfY21hLmMtMTQwLVxubW0vaHVnZXRsYl9jbWEuYzoxNDE6dW5zaWduZWQgaW50IF9fd2VhayBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTE0Mi17XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNDY9dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTU0LVxubW0vaHVnZXRsYl9jbWEuYzoxNTU6XHRvcmRlciA9IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIoKTtcbm1tL2h1Z2V0bGJfY21hLmMtMTU2LVx0aWYgKCFvcmRlcikge1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjU5PWJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI2MC17XG5tbS9odWdldGxiX2NtYS5jOjI2MTpcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yNjItfVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjY5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjcxLVx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYzoyNzI6XHRcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcbm1tL2h1Z2V0bGJfY21hLmMtMjczLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI3NT1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjc5LVxubW0vaHVnZXRsYl9jbWEuYzoyODA6XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yODEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE0MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBHaWdhbnRpYyBQYWdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoYXQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGVzc2VudGlhbC4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgZm9yIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHRvIGV2ZW4gKmNvbXBpbGUqLCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgZGVmaW5lZC4gSXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeS4gU28sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHdlJiMzOTtyZSBnb29kIHRvIGdvLiBOZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIHNldCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjgzPWNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbi0tXG5mcy9LY29uZmlnLTI4Ni1cbmZzL0tjb25maWc6Mjg3OmNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5mcy9LY29uZmlnLTI4OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgQm9vbGVhbiBTZWxlY3Rpb24qKgoKUmlnaHQsIHNvIHRoaXMgaXMgYSBib29sZWFuIHZhbHVlIHRoYXQmIzM5O3MgYmVpbmcgc2V0IG9yIHNlbGVjdGVkIGJ5IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoaWNoIG9uZXM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIG1ha2luZyB0aGlzIHNlbGVjdGlvbi4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgYm9vbGVhbiBpcyBiZWluZyB1c2VkIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyAqd2h5KiBpdCYjMzk7cyBiZWluZyB1c2VkLiBJcyB0aGlzIGFib3V0IGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLCBtZW1vcnkgbW9kZWxzLCBoYXJkd2FyZSBmZWF0dXJlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgaXMgaW4gb3JkZXIsIGFuZCBJIGtub3cgZXhhY3RseSB3aGVyZSB0byBzdGFydCBsb29raW5nLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMzItXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuYXJjaC9hcm02NC9LY29uZmlnOjMzOlx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gvYXJtNjQvS2NvbmZpZy0zNC1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xMzgtXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTM5Olx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcdFx0aWYgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE0MC1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0zNS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL3Jpc2N2L0tjb25maWc6MzY6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9yaXNjdi9LY29uZmlnLTM3LVx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTctXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuYXJjaC9zMzkwL0tjb25maWc6OTg6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9zMzkwL0tjb25maWctOTktXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxuLS1cbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcbi0tXG5hcmNoL3NoL0tjb25maWctOS1cdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcbmFyY2gvc2gvS2NvbmZpZzoxMDpcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5hcmNoL3NoL0tjb25maWctMTEtXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZz03MD1jb25maWcgU1BBUkM2NFxuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZy0xMDctXHRzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJXG5hcmNoL3NwYXJjL0tjb25maWc6MTA4Olx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gvc3BhcmMvS2NvbmZpZy0xMDktXHRzZWxlY3QgSEFWRV9TT0ZUSVJRX09OX09XTl9TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWc9MjM9Y29uZmlnIFg4Nl82NFxuLS1cbmFyY2gveDg2L0tjb25maWctMjYtXHQjIE9wdGlvbnMgdGhhdCBhcmUgaW5oZXJlbnRseSA2NC1iaXQga2VybmVsIG9ubHk6XG5hcmNoL3g4Ni9LY29uZmlnOjI3Olx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gveDg2L0tjb25maWctMjgtXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWdpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoaXMgcGllY2Ugb2YgY29kZSBpcyBjbGVhcmx5IHRhcmdldGVkIHRvd2FyZHMgdmFyaW91cyBhcmNoaXRlY3R1cmVzIOKAkyB4ODZfNjQsIGFybTY0LCBSSVNDLVYsIGFuZCB0aGUgbGlrZS4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdDsgdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGVkLiBTbywgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZvY3VzIGhlcmUgaXMgb24gYENNQWAgYW5kIGBIVUdFVExCRlNgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gVGhlIGZ1bmN0aW9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEFoLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggaXRzZWxmIGNvbWVzIGZyb20gYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AuIE9rYXksIHNvIHdlIGhhdmUgYSBjbGVhciBjYWxsaW5nIGNoYWluIHRoZXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdGhyZWUgZnVuY3Rpb25zLgoKQnV0LCBob2xkIG9uLi4uIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjYWxsZXJzPyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBmZWVscyBsaWtlIGl0IGhhcyBhIGZvY3VzZWQgcHVycG9zZS4gSWYgSSYjMzk7bSB0cnlpbmcgdG8gb3B0aW1pemUsIEkgbmVlZCB0byBrbm93IHdoZXJlICplbHNlKiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyBjYWxsZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNjQtXG5tbS9odWdldGxiLmM6MTM2NTpcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG5tbS9odWdldGxiLmMtMTM2Ni1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI2LVxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cdFx0XHRcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbi0tXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmgtMTktXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cdFx0Z2ZwX3QgZ2ZwX21hc2ssXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQWxsb2NhdGlvbiBQYXRoKioKClJpZ2h0LCBzbyB0aGUgaW5pdGlhbCAmIzM0O05vLiYjMzQ7IGxpa2VseSBtZWFucyBJJiMzOTt2ZSByZWplY3RlZCBhIHByZXZpb3VzIGxpbmUgb2YgaW5xdWlyeS4gTGV0JiMzOTtzIHNlZS4uLiBUaGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBmb2N1c2VkIG9uIHNlZW1zIHRvIGJlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0JiMzOTtzIHdoZXJlIHdlIHNob3VsZCBiZSBsb29raW5nLgoKSG9sZCBvbiwgSSByZW1lbWJlciBzZWVpbmcgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2Agc29tZXdoZXJlLiBBbmQsIHllcywgaXQmIzM5O3MgbWFya2VkIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IGdldHRpbmcgaW5saW5lZCwgd2hpY2ggY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIFdlJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBwb3NzaWJpbGl0eSBpbiBtaW5kLgoKT2theSwgYmFjayB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSXQgaXNuJiMzOTt0IHN0YXRpYywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG91ciBhbmFseXNpcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgdGhpcyBhbHNvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNzkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xODM1LVxubW0vaHVnZXRsYi5jOjE4MzY6c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTgzNy1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xODYyLSAqL1xubW0vaHVnZXRsYi5jOjE4NjM6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTE4NjQtXHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzaylcbi0tXG5tbS9odWdldGxiLmMtMTg2Ny1cbm1tL2h1Z2V0bGIuYzoxODY4Olx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xubW0vaHVnZXRsYi5jLTE4NjktXHRpZiAoZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5MDYtXG5tbS9odWdldGxiLmM6MTkwNzpcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXG5tbS9odWdldGxiLmMtMTkwOC1cdFx0XHRcdFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcbi0tXG5tbS9odWdldGxiLmM9MjA3Nj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjA4OC1cbm1tL2h1Z2V0bGIuYzoyMDg5Olx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0yMDkwLVx0aWYgKCFmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MjEyND1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTIxMzEtXG5tbS9odWdldGxiLmM6MjEzMjpcdGZvbGlvID0gYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XG5tbS9odWdldGxiLmMtMjEzMy1cdGlmICghZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTI2NDE9c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMjY4Ni1cdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1RISVNOT0RFO1xubW0vaHVnZXRsYi5jOjI2ODc6XHRcdFx0bmV3X2ZvbGlvID0gYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzayxcbm1tL2h1Z2V0bGIuYy0yNjg4LVx0XHRcdFx0XHRcdFx0ICAgICAgbmlkLCBOVUxMKTtcbi0tXG5tbS9odWdldGxiLmM9MzM3Mj1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzg1LVxubW0vaHVnZXRsYi5jOjMzODY6XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbm1tL2h1Z2V0bGIuYy0zMzg3LVx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0zMzkxLVx0XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW9fbGlzdCk7XG5tbS9odWdldGxiLmM6MzM5MjpcdFx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmMtMzM5My1cdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU0MgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqCgpPa2F5LCBteSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGRldGVybWluZSBpdHMgY29tcGlsYXRpb24gYW5kIHVzYWdlLiBJdCBsb29rcyBsaWtlIGBDTUFgIGFuZCBgSFVHRVRMQkZTYCBhcmUgdGhlIG9idmlvdXMgb25lcywgYW5kIEkgdGhpbmsgSSYjMzk7bSBjb3JyZWN0IGluIHRoYXQgYXNzdW1wdGlvbiwgYmVjYXVzZSBgaHVnZXRsYl9jbWEuY2AgaXMgb25seSBidWlsdCB3aXRoIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgZW5hYmxlZC4KCkJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gTGV0IG1lIHNlZS4uLiB0aGUgY29kZSB1c2VzIGBub2RlbWFza190YCBhbmQgYG5vZGVfc3RhdGVzYC4gVGhvc2UgYXJlIG9mdGVuIHRpZWQgdG8gTlVNQSBzeXN0ZW1zLiBPa2F5LCBsZXQmIzM5O3MgY2hlY2suIElzIGBDT05GSUdfTlVNQWAgYWN0dWFsbHkgcmVxdWlyZWQgZm9yIHRob3NlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgc29tZXRpbWVzIGF2YWlsYWJsZSBldmVuIHdpdGhvdXQgTlVNQSBlbmFibGVkPyBUaGlzIHJlcXVpcmVzIG1vcmUgZGlnZ2luZyB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX2lzc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jPTg2PXZvaWQgX19pbml0IHJlcGxpY2F0ZV9rZXJuZWxfdGV4dCh2b2lkKVxuLS1cbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEwMC1cdFx0LyogQ2hlY2sgaWYgdGhpcyBub2RlIHNob3VsZCBnZXQgYSBjb3B5IG9mIHRoZSBrZXJuZWwgKi9cbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jOjEwMTpcdFx0aWYgKG5vZGVfaXNzZXQoY2xpZW50X25hc2lkLCBrdGV4dF9yZXBtYXNrKSkge1xuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMtMTAyLVx0XHRcdHNlcnZlcl9uYXNpZCA9IGNsaWVudF9uYXNpZDtcbi0tXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYz0xMTY9dW5zaWduZWQgbG9uZyBub2RlX2dldGZpcnN0ZnJlZShuYXNpZF90IG5hc2lkKVxuLS1cbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEyNC1cdG9mZnNldCA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpKFx1MDAyNl9lbmQpKSAtIGxvYWRiYXNlO1xuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmM6MTI1Olx0aWYgKChuYXNpZCA9PSAwKSB8fCAobm9kZV9pc3NldChuYXNpZCwga3RleHRfcmVwbWFzaykpKVxuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMtMTI2LVx0XHRyZXR1cm4gVE9fTk9ERShuYXNpZCwgb2Zmc2V0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9NDgwPXN0cnVjdCBzZ3hfZXBjX3BhZ2UgKl9fc2d4X2FsbG9jX2VwY19wYWdlKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQ4OS1cdCAqL1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjQ5MDpcdGlmIChub2RlX2lzc2V0KG5pZF9vZl9jdXJyZW50LCBzZ3hfbnVtYV9tYXNrKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy00OTEtXHRcdG5pZF9zdGFydCA9IG5pZF9vZl9jdXJyZW50O1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz03OTc9c3RhdGljIGJvb2wgX19pbml0IHNneF9wYWdlX2NhY2hlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtODM2LVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjgzNzpcdFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgc2d4X251bWFfbWFzaykpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MzgtXHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2d4X251bWFfbm9kZXNbbmlkXS5sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtODU5LVx0Zm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6ODYwOlx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzZ3hfbnVtYV9tYXNrKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04NjEtXHRcdCAgICBub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIFx1MDAyNlx1MDAyNiBub2RlX3N0YXRlKG5pZCwgTl9DUFUpKVxuLS1cbmFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmM9NTY9aW50IF9faW5pdCBhbWRfbnVtYV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYy0xMDgtXHRcdH1cbmFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmM6MTA5Olx0XHRpZiAobm9kZV9pc3NldChub2RlaWQsIG51bWFfbm9kZXNfcGFyc2VkKSkge1xuYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYy0xMTAtXHRcdFx0cHJfaW5mbyhcJiMzNDtOb2RlICVkIGFscmVhZHkgcHJlc2VudCwgc2tpcHBpbmdcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM9MTA2PXN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X2lycV9yb3V0ZShpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbW5vZGUsIG5vZGVtYXNrX3QgKm5vZGVfbWFwKVxuLS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jLTEyMS1cdFx0bm9kZSA9IGNwdV90b19laW9fbm9kZShpKTtcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jOjEyMjpcdFx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICpub2RlX21hcCkpXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYy0xMjMtXHRcdFx0Y29udGludWU7XG4tLVxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM9MTg4PXN0YXRpYyBpbnQgZWlvaW50Y19pbmRleChpbnQgbm9kZSlcbi0tXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYy0xOTItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9waWNzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM6MTkzOlx0XHRpZiAobm9kZV9pc3NldChub2RlLCBlaW9pbnRjX3ByaXZbaV0tXHUwMDNlbm9kZV9tYXApKVxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmMtMTk0LVx0XHRcdHJldHVybiBpO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zMzQyPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqY2FuX2dhdGhlcl9udW1hX3N0YXRzKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMzNTgtXHRuaWQgPSBwYWdlX3RvX25pZChwYWdlKTtcbmZzL3Byb2MvdGFza19tbXUuYzozMzU5Olx0aWYgKCFub2RlX2lzc2V0KG5pZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcbmZzL3Byb2MvdGFza19tbXUuYy0zMzYwLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzM2Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKmNhbl9nYXRoZXJfbnVtYV9zdGF0c19wbWQocG1kX3QgcG1kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMzgzLVx0bmlkID0gcGFnZV90b19uaWQocGFnZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM4NDpcdGlmICghbm9kZV9pc3NldChuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM4NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTI1LSAqIHZvaWQgbm9kZXNfY2xlYXIobWFzaylcdFx0Y2xlYXIgYWxsIGJpdHNcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDoyNjogKiBpbnQgbm9kZV9pc3NldChub2RlLCBtYXNrKVx0XHR0cnVlIGlmZiBiaXQgJiMzOTtub2RlJiMzOTsgc2V0IGluIG1hc2tcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0yNy0gKiBib29sIG5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG1hc2spXHR0ZXN0IGFuZCBzZXQgYml0ICYjMzk7bm9kZSYjMzk7IGluIG1hc2tcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNzctICogU3VidGxldHk6XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6Nzg6ICogMSkgVGhlICYjMzk7dHlwZS1jaGVja2VkJiMzOTsgZm9ybSBvZiBub2RlX2lzc2V0KCkgY2F1c2VzIGdjYyAoMy4zLjIsIGFueXdheSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC03OS0gKiAgICB0byBnZW5lcmF0ZSBzbGlnaHRseSB3b3JzZSBjb2RlLiAgU28gdXNlIGEgc2ltcGxlIG9uZS1saW5lICNkZWZpbmVcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo4MDogKiAgICBmb3Igbm9kZV9pc3NldCgpLCBpbnN0ZWFkIG9mIHdyYXBwaW5nIGFuIGlubGluZSBpbnNpZGUgYSBtYWNybywgdGhlXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtODEtICogICAgd2F5IHdlIGRvIHRoZSBvdGhlciBjYWxscy5cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg9MTQzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX25vZGVzX2NsZWFyKG5vZGVtYXNrX3QgKmRzdHAsIHVuc2lnbmVkIGludCBuYml0cylcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMTQ4LS8qIE5vIHN0YXRpYyBpbmxpbmUgdHlwZSBjaGVja2luZyAtIHNlZSBTdWJ0bGV0eSAoMSkgYWJvdmUuICovXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6MTQ5OiNkZWZpbmUgbm9kZV9pc3NldChub2RlLCBub2RlbWFzaykgdGVzdF9iaXQoKG5vZGUpLCAobm9kZW1hc2spLmJpdHMpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMTUwLVxuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00MDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDgte1xuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwOTpcdHJldHVybiBub2RlX2lzc2V0KG5vZGUsIG5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEwLX1cbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQyMjY9Ym9vbCBjcHVzZXRfY3VycmVudF9ub2RlX2FsbG93ZWQoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDIzMy1cdFx0cmV0dXJuIHRydWU7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyMzQ6XHRpZiAobm9kZV9pc3NldChub2RlLCBjdXJyZW50LVx1MDAzZW1lbXNfYWxsb3dlZCkpXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyMzUtXHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDI1My1cdGNzID0gbmVhcmVzdF9oYXJkd2FsbF9hbmNlc3Rvcih0YXNrX2NzKGN1cnJlbnQpKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDI1NDpcdGFsbG93ZWQgPSBub2RlX2lzc2V0KG5vZGUsIGNzLVx1MDAzZW1lbXNfYWxsb3dlZCk7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyNTUtXG4tLVxubW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTE4MDMtXHQgKi9cbm1tL2h1Z2V0bGIuYzoxODA0Olx0aWYgKG5vZGVfYWxsb2Nfbm9yZXRyeSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpub2RlX2FsbG9jX25vcmV0cnkpKVxubW0vaHVnZXRsYi5jLTE4MDUtXHRcdGFsbG9jX3RyeV9oYXJkID0gZmFsc2U7XG4tLVxubW0vaHVnZXRsYi5jPTQ1MDA9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtNDUwOS1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbm1tL2h1Z2V0bGIuYzo0NTEwOlx0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbm1tL2h1Z2V0bGIuYy00NTExLVx0XHRcdG5yICYjNDM7PSBhcnJheVtub2RlXTtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI3PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0zOS1cbm1tL2h1Z2V0bGJfY21hLmM6NDA6XHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpXG5tbS9odWdldGxiX2NtYS5jLTQxLVx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNDY9dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTc2LVxubW0vaHVnZXRsYl9jbWEuYzoxNzc6XHRcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcbm1tL2h1Z2V0bGJfY21hLmMtMTc4LVx0XHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IGludmFsaWQgbm9kZSAlZCBzcGVjaWZpZWRcXG5cJiMzNDssIG5pZCk7XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTM5PXN0YXRpYyBpbmxpbmUgaW50IGdldF92YWxpZF9ub2RlX2FsbG93ZWQoaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZClcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC00MC17XG5tbS9odWdldGxiX2ludGVybmFsLmg6NDE6XHRpZiAoIW5vZGVfaXNzZXQobmlkLCAqbm9kZXNfYWxsb3dlZCkpXG5tbS9odWdldGxiX2ludGVybmFsLmgtNDItXHRcdG5pZCA9IG5leHRfbm9kZV9hbGxvd2VkKG5pZCwgbm9kZXNfYWxsb3dlZCk7XG4tLVxubW0vbWVtcG9saWN5LmM9NjQzPXN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9mb2xpb19yZXF1aXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbXBvbGljeS5jLTY0OC1cbm1tL21lbXBvbGljeS5jOjY0OTpcdHJldHVybiBub2RlX2lzc2V0KG5pZCwgKnFwLVx1MDAzZW5tYXNrKSA9PSAhKGZsYWdzIFx1MDAyNiBNUE9MX01GX0lOVkVSVCk7XG5tbS9tZW1wb2xpY3kuYy02NTAtfVxuLS1cbm1tL21lbXBvbGljeS5jPTEzMzY9aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG4tLVxubW0vbWVtcG9saWN5LmMtMTM5OS1cdFx0XHRpZiAoKG5vZGVzX3dlaWdodCgqZnJvbSkgIT0gbm9kZXNfd2VpZ2h0KCp0bykpIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmM6MTQwMDpcdFx0XHRcdFx0XHQobm9kZV9pc3NldChzLCAqdG8pKSlcbm1tL21lbXBvbGljeS5jLTE0MDEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDEwLVx0XHRcdC8qIGRlc3Qgbm90IGluIHJlbWFpbmluZyBmcm9tIG5vZGVzPyAqL1xubW0vbWVtcG9saWN5LmM6MTQxMTpcdFx0XHRpZiAoIW5vZGVfaXNzZXQoZGVzdCwgdG1wKSlcbm1tL21lbXBvbGljeS5jLTE0MTItXHRcdFx0XHRicmVhaztcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTAwPXN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vbWVtcG9saWN5LmMtMjEwOC1cdG5vZGUgPSBjdXJyZW50LVx1MDAzZWlsX3ByZXY7XG5tbS9tZW1wb2xpY3kuYzoyMTA5Olx0aWYgKCFjdXJyZW50LVx1MDAzZWlsX3dlaWdodCB8fCAhbm9kZV9pc3NldChub2RlLCBwb2xpY3ktXHUwMDNlbm9kZXMpKSB7XG5tbS9tZW1wb2xpY3kuYy0yMTEwLVx0XHRub2RlID0gbmV4dF9ub2RlX2luKG5vZGUsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjQ0NT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX21wb2woZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vbWVtcG9saWN5LmMtMjQ3MC1cdFx0ICAgIHBvbC1cdTAwM2Vtb2RlICE9IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jOjI0NzE6XHRcdCAgICAoIW5vZGVtYXNrIHx8IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKSkge1xubW0vbWVtcG9saWN5LmMtMjQ3Mi1cdFx0XHQvKlxuLS1cbm1tL21lbXBvbGljeS5jPTI2MzA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjY2LVx0d2VpZ2h0ID0gbWUtXHUwMDNlaWxfd2VpZ2h0O1xubW0vbWVtcG9saWN5LmM6MjY2NzpcdGlmICh3ZWlnaHQgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgbm9kZXMpKSB7XG5tbS9tZW1wb2xpY3kuYy0yNjY4LVx0XHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yOTg0PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDE1LVx0Y2FzZSBNUE9MX1BSRUZFUlJFRDpcbm1tL21lbXBvbGljeS5jOjMwMTY6XHRcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVx1MDAzZW5vZGVzKSlcbm1tL21lbXBvbGljeS5jLTMwMTctXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vbWVtcG9saWN5LmMtMzA0MC1cdFx0XHQgKi9cbm1tL21lbXBvbGljeS5jOjMwNDE6XHRcdFx0aWYgKG5vZGVfaXNzZXQodGhpc25pZCwgcG9sLVx1MDAzZW5vZGVzKSlcbm1tL21lbXBvbGljeS5jLTMwNDItXHRcdFx0XHRicmVhaztcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDUwLVx0XHQgKi9cbm1tL21lbXBvbGljeS5jOjMwNTE6XHRcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVx1MDAzZW5vZGVzKSlcbm1tL21lbXBvbGljeS5jLTMwNTItXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vbWlncmF0ZS5jPTIzNDc9c3RhdGljIGludCBkb19wYWdlc19tb3ZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBub2RlbWFza190IHRhc2tfbm9kZXMsXG4tLVxubW0vbWlncmF0ZS5jLTIzODYtXHRcdGVyciA9IC1FQUNDRVM7XG5tbS9taWdyYXRlLmM6MjM4NzpcdFx0aWYgKCFub2RlX2lzc2V0KG5vZGUsIHRhc2tfbm9kZXMpKVxubW0vbWlncmF0ZS5jLTIzODgtXHRcdFx0Z290byBvdXRfZmx1c2g7XG4tLVxubW0vbW16b25lLmM9NDY9c3RhdGljIGlubGluZSBpbnQgenJlZl9pbl9ub2RlbWFzayhzdHJ1Y3Qgem9uZXJlZiAqenJlZiwgbm9kZW1hc2tfdCAqbm9kZXMpXG4tLVxubW0vbW16b25lLmMtNDgtI2lmZGVmIENPTkZJR19OVU1BXG5tbS9tbXpvbmUuYzo0OTpcdHJldHVybiBub2RlX2lzc2V0KHpvbmVsaXN0X25vZGVfaWR4KHpyZWYpLCAqbm9kZXMpO1xubW0vbW16b25lLmMtNTAtI2Vsc2Vcbi0tXG5tbS9udW1hX21lbWJsa3MuYz0zMzU9c3RhdGljIHZvaWQgX19pbml0IG51bWFfY2xlYXJfa2VybmVsX25vZGVfaG90cGx1Zyh2b2lkKVxuLS1cbm1tL251bWFfbWVtYmxrcy5jLTM5MC1cbm1tL251bWFfbWVtYmxrcy5jOjM5MTpcdFx0aWYgKCFub2RlX2lzc2V0KG1iLVx1MDAzZW5pZCwgcmVzZXJ2ZWRfbm9kZW1hc2spKVxubW0vbnVtYV9tZW1ibGtzLmMtMzkyLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01NjcwPWludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTY3OS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjU2ODA6XHRpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSBcdTAwMjZcdTAwMjYgbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkpIHtcbm1tL3BhZ2VfYWxsb2MuYy01NjgxLVx0XHRub2RlX3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy01Njg3LVx0XHQvKiBEb24mIzM5O3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXG5tbS9wYWdlX2FsbG9jLmM6NTY4ODpcdFx0aWYgKG5vZGVfaXNzZXQobiwgKnVzZWRfbm9kZV9tYXNrKSlcbm1tL3BhZ2VfYWxsb2MuYy01Njg5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Nob3dfbWVtLmMtMTMxLVxubW0vc2hvd19tZW0uYzoxMzI6XHRyZXR1cm4gIW5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spO1xubW0vc2hvd19tZW0uYy0xMzMtfVxuLS1cbm1tL3NsdWIuYz00MTIzPXN0YXRpYyBpbnQgc2x1Yl9jcHVfc2V0dXAodW5zaWduZWQgaW50IGNwdSlcbi0tXG5tbS9zbHViLmMtNDEzMi1cdCAqL1xubW0vc2x1Yi5jOjQxMzM6XHRpZiAobm9kZV9pc3NldChuaWQsIHNsYWJfYmFybl9ub2RlcykpXG5tbS9zbHViLmMtNDEzNC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vc2x1Yi5jLTQxMzctXG5tbS9zbHViLmM6NDEzODpcdGlmIChub2RlX2lzc2V0KG5pZCwgc2xhYl9iYXJuX25vZGVzKSlcbm1tL3NsdWIuYy00MTM5LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9zbHViLmM9NDUyOT1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtNDU0OC1cdFx0XHRpZiAobXBvbC1cdTAwM2Vtb2RlICE9IE1QT0xfQklORCB8fFxubW0vc2x1Yi5jOjQ1NDk6XHRcdFx0XHRcdCFub2RlX2lzc2V0KG51bWFfbWVtX2lkKCksIG1wb2wtXHUwMDNlbm9kZXMpKVxubW0vc2x1Yi5jLTQ1NTAtXHRcdFx0XHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xuLS1cbm1tL3NsdWIuYz00NzU2PXZvaWQgKmFsbG9jX2Zyb21fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXG4tLVxubW0vc2x1Yi5jLTQ3NzYtXHRcdFx0aWYgKG1wb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcbm1tL3NsdWIuYzo0Nzc3Olx0XHRcdFx0XHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVx1MDAzZW5vZGVzKSlcbm1tL3NsdWIuYy00Nzc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBvZiBgbm9kZV9pc3NldGAgaW4gS2VybmVsIENvZGUqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbm9kZV9pc3NldGAgaXMgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbm9kZW1hc2suaGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJbnRlcmVzdGluZyB0aGF0IGl0JiMzOTtzIGRlZmluZWQgdGhlcmUsIGJlY2F1c2UgSSBhbHdheXMgYXNzdW1lZCB0aGF0IGl0IHdhcyBpbmhlcmVudGx5IHRpZWQgdG8gTlVNQS4gSXQgc2VlbXMgYENPTkZJR19OVU1BYCBpc24mIzM5O3QgYSAqc3RyaWN0KiByZXF1aXJlbWVudCBmb3IgaXRzIGV4aXN0ZW5jZSwgYnV0IGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgdXNlcyBgbm9kZW1hc2tfdGAgYW5kIGBub2RlX3N0YXRlc2AuIEhtbSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgYG5vZGVfc3RhdGVzYCBpcyBhbHNvIGRlZmluZWQgaW4gYG5vZGVtYXNrLmhgLiBUaGlzIGlzIG1ha2luZyBtZSByZWNvbnNpZGVyIHNvbWUgb2YgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX05VTUFgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGBodWdldGxiX2NtYS5jYCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byBgbW0vaHVnZXRsYl9jbWEuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGAjaWZkZWYgQ09ORklHX05VTUFgLiBUaGF0IHNob3VsZCBjbGVhciBpdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTlVNQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY21hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkzNgoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgaHVnZXRsYl9jbWEuYyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGBodWdldGxiX2NtYS5jYCBhbmQgaXRzIHVzZSBvZiBgaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW01BWF9OVU1OT0RFU11gLiBJIGtub3cgdGhhdCBpZiBgIUNPTkZJR19OVU1BYCwgdGhlbiBgTUFYX05VTU5PREVTYCBpcyBzZXQgdG8gMS4gVGhpcyBpcyBrZXkuIFNvLCB0aGUgY29kZSAqc2hvdWxkKiBmdW5jdGlvbiBldmVuIHdpdGhvdXQgTlVNQSBlbmFibGVkLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gTm93LCBteSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIGNvZGUmIzM5O3Mgb3BlcmF0aW9uYWwgcmVxdWlyZW1lbnRzIGFyZSBqdXN0IGBDTUFgIGFuZCBgSFVHRVRMQkZTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCkJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGJvb2xlYW4gY29uZmlnIG9wdGlvbnMsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGUgY2hlY2suIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgcHJlY2lzZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19DTUFgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0aW9uc2hpcHMgaGVyZSBpcyB2aXRhbCBmb3IgY29ycmVjdGx5IGludGVycHJldGluZyBpdHMgb3BlcmF0aW9uYWwgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9kbWEvS2NvbmZpZz0xNzM9Y29uZmlnIERNQV9OVU1BX0NNQVxuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZy0xODUtXG5rZXJuZWwvZG1hL0tjb25maWc6MTg2OmNvbmZpZyBDTUFfU0laRV9QRVJOVU1BXG5rZXJuZWwvZG1hL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtEZWZhdWx0IENNQSBhcmVhIHBlciBOVU1BIG5vZGVcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWc9MTk2PWNvbW1lbnQgXCYjMzQ7RGVmYXVsdCBjb250aWd1b3VzIG1lbW9yeSBhcmVhIHNpemU6XCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMTk3LVxua2VybmVsL2RtYS9LY29uZmlnOjE5ODpjb25maWcgQ01BX1NJWkVfTUJZVEVTXG5rZXJuZWwvZG1hL0tjb25maWctMTk5LVx0aW50IFwmIzM0O1NpemUgaW4gTWVnYSBCeXRlc1wmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMDgtXG5rZXJuZWwvZG1hL0tjb25maWc6MjA5OmNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFXG5rZXJuZWwvZG1hL0tjb25maWctMjEwLVx0aW50IFwmIzM0O1BlcmNlbnRhZ2Ugb2YgdG90YWwgbWVtb3J5XCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTIyMD1jaG9pY2Vcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjIzLVxua2VybmVsL2RtYS9LY29uZmlnOjIyNDpjb25maWcgQ01BX1NJWkVfU0VMX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTIyNS1cdGJvb2wgXCYjMzQ7VXNlIG1lZ2EgYnl0ZXMgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyNi1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjc6Y29uZmlnIENNQV9TSVpFX1NFTF9QRVJDRU5UQUdFXG5rZXJuZWwvZG1hL0tjb25maWctMjI4LVx0Ym9vbCBcJiMzNDtVc2UgcGVyY2VudGFnZSB2YWx1ZSBvbmx5XCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMjI5LVxua2VybmVsL2RtYS9LY29uZmlnOjIzMDpjb25maWcgQ01BX1NJWkVfU0VMX01JTlxua2VybmVsL2RtYS9LY29uZmlnLTIzMS1cdGJvb2wgXCYjMzQ7VXNlIGxvd2VyIHZhbHVlIChtaW5pbXVtKVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIzMi1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzM6Y29uZmlnIENNQV9TSVpFX1NFTF9NQVhcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzQtXHRib29sIFwmIzM0O1VzZSBoaWdoZXIgdmFsdWUgKG1heGltdW0pXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTIzNj1lbmRjaG9pY2Vcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzctXG5rZXJuZWwvZG1hL0tjb25maWc6MjM4OmNvbmZpZyBDTUFfQUxJR05NRU5UXG5rZXJuZWwvZG1hL0tjb25maWctMjM5LVx0aW50IFwmIzM0O01heGltdW0gUEFHRV9TSVpFIG9yZGVyIG9mIGFsaWdubWVudCBmb3IgY29udGlndW91cyBidWZmZXJzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuLS1cbm1tL0tjb25maWctMTA2Ni1cbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXG5tbS9LY29uZmlnLTEwNjgtXHRib29sIFwmIzM0O0NvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4MS1cbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcbm1tL0tjb25maWctMTA4My1cdGJvb2wgXCYjMzQ7Q01BIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDg3LVxubW0vS2NvbmZpZzoxMDg4OmNvbmZpZyBDTUFfU1lTRlNcbm1tL0tjb25maWctMTA4OS1cdGJvb2wgXCYjMzQ7Q01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDk0LVxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcbm1tL0tjb25maWctMTA5Ni1cdGludCBcJiMzNDtNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBub3cuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQ01BYCDigJMgdGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBjb25maWcgb3B0aW9uIGluIHRoaXMgc2NlbmFyaW8uIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIG15IGV4cGVyaWVuY2UgaXMga2lja2luZyBpbiwgYW5kIEkgaGF2ZSB0byBhc2sgbXlzZWxmIOKAkyB3aGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAsIGlmIGFueSwgYmV0d2VlbiBgQ01BYCBhbmQgYEhVR0VUTEJGU2A/IEFyZSB0aGV5IG9ydGhvZ29uYWw/IERvZXMgZW5hYmxpbmcgb25lIGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3RoZXI/IEFyZSB0aGVyZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBoZXJlPyBUaGlzIHJlbGF0aW9uc2hpcCByZXF1aXJlcyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0LCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMzOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIGZvciBIdWdlVExCIGFuZCBDTUEgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGtleSBwbGF5ZXIgaGVyZSBzZWVtcyB0byBiZSBgSFVHRVRMQkZTYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWcgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFdhaXQsIGhhbmcgb24uLi4gSSByZW1lbWJlciBgaHVnZXRsYl9jbWEuY2AgZ2V0cyBjb21waWxlZCAqY29uZGl0aW9uYWxseSosIHNwZWNpZmljYWxseSB3aGVuIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBvaW50LCBoaWdobGlnaHRpbmcgdGhlaXIgaW50ZXJwbGF5LiBIbW0sIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBtaWdodCBiZSBtaXNzaW5nPyBUaW1lIHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIG1hcCBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEdvdHRhIGJlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciBmbGFncyBvciBvcHRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoaXMgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjAyLVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1MC1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNC1cbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XG4tLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDUtXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI3ODp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cbi0tXG5tbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmMtMTktc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0xMzI9ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xMzMtXG5tbS9odWdldGxiX2NtYS5jOjEzNDpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTM2Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTEzNy19XG5tbS9odWdldGxiX2NtYS5jLTEzOC1cbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTQxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNDIte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cbm1tL2h1Z2V0bGJfY21hLmM6MTU1Olx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cdGlmICghb3JkZXIpIHtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0yNjAte1xubW0vaHVnZXRsYl9jbWEuYzoyNjE6XHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjYyLX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3MS1cdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbm1tL2h1Z2V0bGJfY21hLmM6MjcyOlx0XHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XG5tbS9odWdldGxiX2NtYS5jLTI3My19XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3OS1cbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcbm1tL2h1Z2V0bGJfY21hLmMtMjgxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxOTYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEdvb2QsIGdvb2QsIHdlJiMzOTt2ZSBnb3QgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgY29uZmlybWVkLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIGFjdHVhbGx5IGFjY2Vzc2libGUuIElzIGl0IGV4cG9ydGVkLCBvciBpcyBpdCBidXJpZWQgYXdheSBhcyBhIHN0YXRpYyBmdW5jdGlvbj8gQWxyaWdodCwgY2hlY2tpbmcgdGhlIHNvdXJjZeKApiBOb3BlLCBpdCYjMzk7cyBub3Qgc3RhdGljLiBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgbW0vaHVnZXRsYl9jbWEuaGAgYW5kIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLiBQZXJmZWN0ISBUaGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBmb2NhbCBwb2ludC4KCldhaXQsIHRob3VnaOKApiBhIHF1aWNrIHNhbml0eSBjaGVja+KApiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBieSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggKmlzKiBzdGF0aWMuIEhtbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXNuJiMzOTt0IGlubGluaW5nIHRoYXQsIGJlY2F1c2UgdGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzLiBIb2xkIG9uLiBPa2F5LCB0aGUgZnVuY3Rpb24gaXMgc3RhdGljLCBzbyBpdCAqY291bGQqIGJlIGlubGluZWQuIEJ1dCBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpdHNlbGYgaXMgKm5vdCogc3RhdGljLCBzbyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCBhY3Jvc3MgdHJhbnNsYXRpb24gdW5pdHMgdW5sZXNzIHdlJiMzOTtyZSB1c2luZyBMaW5rIFRpbWUgT3B0aW1pemF0aW9uIChMVE8pLiBBbmQgdGhhdCBtZWFucyB0aGF0IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0aWxsIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGdvdGNoYXMgdG8gY29uc2lkZXIgaGVyZS4gV2UgZG8gbmVlZCB0byBsb29rIGF0IGBDT05GSUdfTlVNQWAsIHNpbmNlIHRoZSBjb2RlIHVzZXMgYG5vZGVtYXNrYC4gTGV0IG1lIGNoZWNrIGBub2RlX3N0YXRlc2AuIEFscmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfc3RhdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0PTIyND1jcHVfb25saW5lX21hc2sgdXNpbmcgYSBDUFUgaG90cGx1ZyBub3RpZmllciwgYW5kIHRoZSBtZW1zIGZpbGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0OjIyNTphdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLS1pLmUuLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMjI2LW5vZGVzIHdpdGggbWVtb3J5LS11c2luZyB0aGUgY3B1c2V0X3RyYWNrX29ubGluZV9ub2RlcygpIGhvb2suXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdD00OD1ub2RlX29ubGluZV9tYXBcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tkdW1wL3ZtY29yZWluZm8ucnN0LTUwLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdDo1MTpBbiBhcnJheSBub2RlX3N0YXRlc1tOX09OTElORV0gd2hpY2ggcmVwcmVzZW50cyB0aGUgc2V0IG9mIG9ubGluZSBub2Rlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdC01Mi1pbiBhIHN5c3RlbSwgb25lIGJpdCBwb3NpdGlvbiBwZXIgbm9kZSBudW1iZXIuIFVzZWQgdG8ga2VlcCB0cmFjayBvZlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0xNTc9QWxvbmcgd2l0aCB0aGUgbm9kZSBzdHJ1Y3R1cmVzLCBrZXJuZWwgbWFpbnRhaW5zIGFuIGFycmF5IG9mIGBgbm9kZW1hc2tfdGBgXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTU4OmJpdG1hc2tzIGNhbGxlZCBgYG5vZGVfc3RhdGVzYGAuIEVhY2ggYml0bWFzayBpbiB0aGlzIGFycmF5IHJlcHJlc2VudHMgYSBzZXQgb2ZcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNTk6bm9kZXMgd2l0aCBwYXJ0aWN1bGFyIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBieSBgYGVudW0gbm9kZV9zdGF0ZXNgYDpcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNjAtXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTE3Nz1Gb3IgZWFjaCBub2RlIHRoYXQgaGFzIGEgcHJvcGVydHkgZGVzY3JpYmVkIGFib3ZlLCB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gdGhlXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc4Om5vZGUgSUQgaW4gdGhlIGBgbm9kZV9zdGF0ZXNbXHUwMDNjcHJvcGVydHlcdTAwM2VdYGAgYml0bWFzayBpcyBzZXQuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTc5LVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTE4MD1Gb3IgZXhhbXBsZSwgZm9yIG5vZGUgMiB3aXRoIG5vcm1hbCBtZW1vcnkgYW5kIENQVXMsIGJpdCAyIHdpbGwgYmUgc2V0IGluIDo6XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTgxLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4MjogIG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTgzOiAgbm9kZV9zdGF0ZXNbTl9PTkxJTkVdXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTg0OiAgbm9kZV9zdGF0ZXNbTl9OT1JNQUxfTUVNT1JZXVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4NTogIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTg2OiAgbm9kZV9zdGF0ZXNbTl9NRU1PUlldXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTg3OiAgbm9kZV9zdGF0ZXNbTl9DUFVdXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTg4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9OTU9UkFN5bmz5Z2H5YiG6YWN5Zyo5Lik5Liq6IqC54K55LiK55qEYXJtNjTmnLrlmajkuIrvvIzkvb/nlKggYGBtb3ZhYmxlY29yZT04MCVgYCDlj4LmlbBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0My1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTQ0OumZpOS6huiKgueCuee7k+aehO+8jOWGheaguOi/mOe7tOaKpOS6huS4gOS4quWQjeS4uiBgYG5vZGVfc3RhdGVzYGAg55qEIGBgbm9kZW1hc2tfdGBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0NS3kvY3mjqnnoIHmlbDnu4TjgILov5nkuKrmlbDnu4TkuK3nmoTmr4/kuKrkvY3mjqnnoIHku6PooajkuIDnu4TnibnlrprlsZ7mgKfnmoToioLngrnvvIzov5nkupvlsZ7mgKfnlLFcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTQ2OmBgZW51bSBub2RlX3N0YXRlc2BgIOWumuS5ie+8jOWumuS5ieWmguS4i++8mlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNDctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNjYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE2Nzrlr7nkuo7lhbfmnInkuIrov7DlsZ7mgKfnmoTmr4/kuKroioLngrnvvIxgYG5vZGVfc3RhdGVzW1x1MDAzY3Byb3BlcnR5XHUwMDNlXWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE2OC3mjqnnoIHkuK3lr7nlupTkuo7oioLngrlJROeahOS9jeS8muiiq+e9ruS9jeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTcxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzI6ICBub2RlX3N0YXRlc1tOX1BPU1NJQkxFXVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzM6ICBub2RlX3N0YXRlc1tOX09OTElORV1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc0OiAgbm9kZV9zdGF0ZXNbTl9OT1JNQUxfTUVNT1JZXVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzU6ICBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzY6ICBub2RlX3N0YXRlc1tOX01FTU9SWV1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc3OiAgbm9kZV9zdGF0ZXNbTl9DUFVdXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE3OC1cbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTk0ND1zdHJ1Y3Qgbm9kZV9hdHRyIHtcbmRyaXZlcnMvYmFzZS9ub2RlLmMtOTQ1LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjtcbmRyaXZlcnMvYmFzZS9ub2RlLmM6OTQ2Olx0ZW51bSBub2RlX3N0YXRlcyBzdGF0ZTtcbmRyaXZlcnMvYmFzZS9ub2RlLmMtOTQ3LX07XG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYz05NDk9c3RhdGljIHNzaXplX3Qgc2hvd19ub2RlX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTk1NC1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JSpwYmxcXG5cJiMzNDssXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjk1NTpcdFx0XHQgIG5vZGVtYXNrX3ByX2FyZ3MoXHUwMDI2bm9kZV9zdGF0ZXNbbmEtXHUwMDNlc3RhdGVdKSk7XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTk1Ni19XG4tLVxuZnMvbmZzL25mczRfZnMuaD0xODQ9c3RydWN0IG5mczRfc3RhdGUge1xuZnMvbmZzL25mczRfZnMuaC0xODUtXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fc3RhdGVzO1x0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIHN0YXRlX293bmVyICovXG5mcy9uZnMvbmZzNF9mcy5oOjE4NjpcdHN0cnVjdCBsaXN0X2hlYWQgaW5vZGVfc3RhdGVzO1x0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIGlub2RlICovXG5mcy9uZnMvbmZzNF9mcy5oLTE4Ny1cdHN0cnVjdCBsaXN0X2hlYWQgbG9ja19zdGF0ZXM7XHQvKiBMaXN0IG9mIHN1YnNlcnZpZW50IGxvY2sgc3RhdGVpZHMgKi9cbi0tXG5mcy9uZnMvbmZzNHN0YXRlLmM9NjQyPV9fbmZzNF9maW5kX3N0YXRlX2J5b3duZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKm93bmVyKVxuLS1cbmZzL25mcy9uZnM0c3RhdGUuYy02NDYtXG5mcy9uZnMvbmZzNHN0YXRlLmM6NjQ3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhdGUsIFx1MDAyNm5mc2ktXHUwMDNlb3Blbl9zdGF0ZXMsIGlub2RlX3N0YXRlcykge1xuZnMvbmZzL25mczRzdGF0ZS5jLTY0OC1cdFx0aWYgKHN0YXRlLVx1MDAzZW93bmVyICE9IG93bmVyKVxuLS1cbmZzL25mcy9uZnM0c3RhdGUuYz02NjU9bmZzNF9nZXRfb3Blbl9zdGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqb3duZXIpXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jLTY4NC1cdFx0c3RhdGUtXHUwMDNlaW5vZGUgPSBpbm9kZTtcbmZzL25mcy9uZnM0c3RhdGUuYzo2ODU6XHRcdGxpc3RfYWRkX3JjdShcdTAwMjZzdGF0ZS1cdTAwM2Vpbm9kZV9zdGF0ZXMsIFx1MDAyNm5mc2ktXHUwMDNlb3Blbl9zdGF0ZXMpO1xuZnMvbmZzL25mczRzdGF0ZS5jLTY4Ni1cdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi0tXG5mcy9uZnMvbmZzNHN0YXRlLmM9NzAxPXZvaWQgbmZzNF9wdXRfb3Blbl9zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jLTcwOC1cdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuZnMvbmZzL25mczRzdGF0ZS5jOjcwOTpcdGxpc3RfZGVsX3JjdShcdTAwMjZzdGF0ZS1cdTAwM2Vpbm9kZV9zdGF0ZXMpO1xuZnMvbmZzL25mczRzdGF0ZS5jLTcxMC1cdGxpc3RfZGVsKFx1MDAyNnN0YXRlLVx1MDAzZW9wZW5fc3RhdGVzKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzM0Mj1zdGF0aWMgc3RydWN0IHBhZ2UgKmNhbl9nYXRoZXJfbnVtYV9zdGF0cyhwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMzU4LVx0bmlkID0gcGFnZV90b19uaWQocGFnZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM1OTpcdGlmICghbm9kZV9pc3NldChuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM2MC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMzNjY9c3RhdGljIHN0cnVjdCBwYWdlICpjYW5fZ2F0aGVyX251bWFfc3RhdHNfcG1kKHBtZF90IHBtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM4My1cdG5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpO1xuZnMvcHJvYy90YXNrX21tdS5jOjMzODQ6XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKVxuZnMvcHJvYy90YXNrX21tdS5jLTMzODUtXHRcdHJldHVybiBOVUxMO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE5PXN0YXRpYyBpbmxpbmUgbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTIyMy1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjI0OiNkZWZpbmUgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIChub2RlX3N0YXRlc1tOX01FTU9SWV0pXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTIyNS1zdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCkge31cbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X25vZGVzX2FsbG93ZWQoc3RydWN0IGNncm91cCAqY2dyb3VwLCBub2RlbWFza190ICptYXNrKVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDMte1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDozMDQ6XHRub2Rlc19jb3B5KCptYXNrLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDUtfVxuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD0zNjU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fbm9kZXNfZm9sZChub2RlbWFza190ICpkc3RwLCBjb25zdCBub2RlbWFza190ICpvcmlncCxcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMzgzLSAqL1xuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjM4NDplbnVtIG5vZGVfc3RhdGVzIHtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0zODUtXHROX1BPU1NJQkxFLFx0XHQvKiBUaGUgbm9kZSBjb3VsZCBiZWNvbWUgb25saW5lIGF0IHNvbWUgcG9pbnQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDAzLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwNDpleHRlcm4gbm9kZW1hc2tfdCBub2RlX3N0YXRlc1tOUl9OT0RFX1NUQVRFU107XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDA1LVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQwNi0jaWYgTUFYX05VTU5PREVTIFx1MDAzZSAxXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDA3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IG5vZGVfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDA4LXtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MDk6XHRyZXR1cm4gbm9kZV9pc3NldChub2RlLCBub2RlX3N0YXRlc1tzdGF0ZV0pO1xuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQxMC19XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDExLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQxMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbm9kZV9zZXRfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEzLXtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTQ6XHRfX25vZGVfc2V0KG5vZGUsIFx1MDAyNm5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDE1LX1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MTYtXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDE3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX2NsZWFyX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQxOC17XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDE5Olx0X19ub2RlX2NsZWFyKG5vZGUsIFx1MDAyNm5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDIwLX1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MjEtXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDIyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IG51bV9ub2RlX3N0YXRlKGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDIzLXtcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MjQ6XHRyZXR1cm4gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW3N0YXRlXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDI1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDI3LSNkZWZpbmUgZm9yX2VhY2hfbm9kZV9zdGF0ZShfX25vZGUsIF9fc3RhdGUpIFxcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDI4Olx0Zm9yX2VhY2hfbm9kZV9tYXNrKChfX25vZGUpLCBub2RlX3N0YXRlc1tfX3N0YXRlXSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MjktXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDMwOiNkZWZpbmUgZmlyc3Rfb25saW5lX25vZGVcdGZpcnN0X25vZGUobm9kZV9zdGF0ZXNbTl9PTkxJTkVdKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQzMTojZGVmaW5lIGZpcnN0X21lbW9yeV9ub2RlXHRmaXJzdF9ub2RlKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MzItc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9vbmxpbmVfbm9kZShpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQzMy17XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDM0Olx0cmV0dXJuIG5leHRfbm9kZShuaWQsIG5vZGVfc3RhdGVzW05fT05MSU5FXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDM1LX1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00MzY9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9tZW1vcnlfbm9kZShpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQzNy17XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDM4Olx0cmV0dXJuIG5leHRfbm9kZShuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDM5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg9NDUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX3NldF9vZmZsaW5lKGludCBuaWQpXG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ1Ny1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NTg6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NTkte1xuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjItXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDYzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX3NldF9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjQte1xuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjYtXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDY3OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX2NsZWFyX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ2OC17XG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ3MC1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NzE6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbnVtX25vZGVfc3RhdGUoZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NzIte1xuLS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00OTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9yYW5kb20oY29uc3Qgbm9kZW1hc2tfdCAqbWFza3ApXG4tLVxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTUwMS1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo1MDI6I2RlZmluZSBub2RlX29ubGluZV9tYXAgXHRub2RlX3N0YXRlc1tOX09OTElORV1cbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo1MDM6I2RlZmluZSBub2RlX3Bvc3NpYmxlX21hcCBcdG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNTA0LVxuLS1cbmluaXQvbWFpbi5jPTE2Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGtlcm5lbF9pbml0X2ZyZWVhYmxlKHZvaWQpXG4tLVxuaW5pdC9tYWluLmMtMTYzNi1cdCAqL1xuaW5pdC9tYWluLmM6MTYzNzpcdHNldF9tZW1zX2FsbG93ZWQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbmluaXQvbWFpbi5jLTE2MzgtXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00Njk9c3RhdGljIHZvaWQgZ3VhcmFudGVlX2FjdGl2ZV9jcHVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDk0LSAqIE9uZSB3YXkgb3IgYW5vdGhlciwgd2UgZ3VhcmFudGVlIHRvIHJldHVybiBzb21lIG5vbi1lbXB0eSBzdWJzZXRcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDk1OiAqIG9mIG5vZGVfc3RhdGVzW05fTUVNT1JZXS5cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDk2LSAqXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00OTk9c3RhdGljIHZvaWQgZ3VhcmFudGVlX29ubGluZV9tZW1zKHN0cnVjdCBjcHVzZXQgKmNzLCBub2RlbWFza190ICpwbWFzaylcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNTAwLXtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NTAxOlx0d2hpbGUgKCFub2Rlc19hbmQoKnBtYXNrLCBjcy1cdTAwM2VlZmZlY3RpdmVfbWVtcywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNTAyLVx0XHRjcyA9IHBhcmVudF9jcyhjcyk7XG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0zODcwPXN0YXRpYyB2b2lkIGNwdXNldF9oYW5kbGVfaG90cGx1Zyh2b2lkKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzg4Ni1cdGNwdW1hc2tfY29weShcdTAwMjZuZXdfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzg4NzpcdG5ld19tZW1zID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zODg4LVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9Mzk3Nz12b2lkIGNwdXNldF91cGRhdGVfYWN0aXZlX2NwdXModm9pZClcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM5ODctLypcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzk4ODogKiBLZWVwIHRvcF9jcHVzZXQubWVtc19hbGxvd2VkIHRyYWNraW5nIG5vZGVfc3RhdGVzW05fTUVNT1JZXS5cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzk4OTogKiBDYWxsIHRoaXMgcm91dGluZSBhbnl0aW1lIGFmdGVyIG5vZGVfc3RhdGVzW05fTUVNT1JZXSBjaGFuZ2VzLlxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zOTkwLSAqIFNlZSBjcHVzZXRfdXBkYXRlX2FjdGl2ZV9jcHVzKCkgZm9yIENQVSBob3RwbHVnIGhhbmRsaW5nLlxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDAwND12b2lkIF9faW5pdCBjcHVzZXRfaW5pdF9zbXAodm9pZClcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQwMTMtXHRjcHVtYXNrX2NvcHkodG9wX2NwdXNldC5lZmZlY3RpdmVfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDAxNDpcdHRvcF9jcHVzZXQuZWZmZWN0aXZlX21lbXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQwMTUtXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00MTMyPXZvaWQgX19pbml0IGNwdXNldF9pbml0X2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MTQyLSAqIGF0dGFjaGVkIHRvIHRoZSBzcGVjaWZpZWQgQHRzay4gIEd1YXJhbnRlZWQgdG8gcmV0dXJuIHNvbWUgbm9uLWVtcHR5XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQxNDM6ICogc3Vic2V0IG9mIG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgZXZlbiBpZiB0aGlzIG1lYW5zIGdvaW5nIG91dHNpZGUgdGhlXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQxNDQtICogdGFza3MgY3B1c2V0LlxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDIyNj1ib29sIGNwdXNldF9jdXJyZW50X25vZGVfYWxsb3dlZChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjY1LSAqIFJldHVybnMgZWZmZWN0aXZlX21lbXMgbWFzayBmcm9tIGEgY2dyb3VwIGNwdXNldCBpZiBpdCBpcyBjZ3JvdXAgdjIgYW5kXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyNjY6ICogaGFzIGNwdXNldCBzdWJzeXMuIE90aGVyd2lzZSwgcmV0dXJucyBub2RlX3N0YXRlc1tOX01FTU9SWV0uXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyNjctICpcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQyNzg9dm9pZCBjcHVzZXRfbm9kZXNfYWxsb3dlZChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIG5vZGVtYXNrX3QgKm1hc2spXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjg4LVx0aWYgKCFjZ3JvdXAgfHwgIWNwdXNldF92MigpKSB7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyODk6XHRcdG5vZGVzX2NvcHkoKm1hc2ssIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyOTAtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyOTQtXHRpZiAoIWNzcykge1xua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0Mjk1Olx0XHRub2Rlc19jb3B5KCptYXNrLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjk2LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2t0aHJlYWQuYz03ODc9aW50IGt0aHJlYWRkKHZvaWQgKnVudXNlZClcbi0tXG5rZXJuZWwva3RocmVhZC5jLTc5NC1cdGlnbm9yZV9zaWduYWxzKHRzayk7XG5rZXJuZWwva3RocmVhZC5jOjc5NTpcdHNldF9tZW1zX2FsbG93ZWQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbmtlcm5lbC9rdGhyZWFkLmMtNzk2LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODEtXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY4MjpcdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICYjNDM7IDI7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4My1cdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcbi0tXG5rZXJuZWwvcGFkYXRhLmM9NDQ0PXZvaWQgX19pbml0IHBhZGF0YV9kb19tdWx0aXRocmVhZGVkKHN0cnVjdCBwYWRhdGFfbXRfam9iICpqb2IpXG4tLVxua2VybmVsL3BhZGF0YS5jLTQ5MC1cdFx0XHRkbyB7XG5rZXJuZWwvcGFkYXRhLmM6NDkxOlx0XHRcdFx0bmlkID0gbmV4dF9ub2RlX2luKG9sZF9ub2RlLCBub2RlX3N0YXRlc1tOX0NQVV0pO1xua2VybmVsL3BhZGF0YS5jLTQ5Mi1cdFx0XHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmxhc3RfdXNlZF9uaWQsIFx1MDAyNm9sZF9ub2RlLCBuaWQpKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz0xNTA9c3RhdGljIHMzMiBwaWNrX2lkbGVfY3B1X2Zyb21fb25saW5lX25vZGVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzX2FsbG93ZWQsIGludCBub2RlLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTYxLVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNjI6XHRub2Rlc19jb3B5KCp1bnZpc2l0ZWQsIG5vZGVfc3RhdGVzW05fT05MSU5FXSk7XG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy0xNjMtXHRub2RlX2NsZWFyKG5vZGUsICp1bnZpc2l0ZWQpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzU1Nj1zdGF0aWMgaW50IHByZWZlcnJlZF9ncm91cF9uaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzU5NC1cdCAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzozNTk1Olx0bm9kZXMgPSBub2RlX3N0YXRlc1tOX0NQVV07XG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1OTYtXHRmb3IgKGRpc3QgPSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsgZGlzdCBcdTAwM2UgTE9DQUxfRElTVEFOQ0U7IGRpc3QtLSkge1xuLS1cbm1tL2h1Z2V0bGIuYz0yMzUwPXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMzc5LVxubW0vaHVnZXRsYi5jOjIzODA6XHRcdGZvbGlvID0gcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhoLCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIDEpO1xubW0vaHVnZXRsYi5jLTIzODEtXHRcdGlmICghZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTMzNzI9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzM4Ni1cdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxubW0vaHVnZXRsYi5jOjMzODc6XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG5tbS9odWdldGxiLmMtMzM4OC1cdFx0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZmb2xpb19saXN0KSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9odWdldGxiLmMtMzM5Mi1cdFx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmM6MzM5MzpcdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xubW0vaHVnZXRsYi5jLTMzOTQtXHRcdFx0fVxuLS1cbm1tL2h1Z2V0bGIuYz0zNDQyPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX3BhZ2VzX2FsbG9jX2Jvb3Rfbm9kZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNDYwLVx0XHR9XG5tbS9odWdldGxiLmM6MzQ2MTpcdFx0Zm9saW8gPSBhbGxvY19wb29sX2h1Z2VfZm9saW8oaCwgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLFxubW0vaHVnZXRsYi5jLTM0NjItXHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9hbGxvY19ub3JldHJ5LCBcdTAwMjZuZXh0X25vZGUpO1xuLS1cbm1tL2h1Z2V0bGIuYz00MDQ3PXNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYi5jLTQwNjItXHRcdFx0XHRpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShcdTAwMjZub2Rlc19hbGxvd2VkKSkpXG5tbS9odWdldGxiLmM6NDA2MzpcdFx0XHRuX21hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG5tbS9odWdldGxiLmMtNDA2NC1cdFx0ZWxzZVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjc9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiX2NtYS5jLTM3LVx0aWYgKCFub2RlbWFzaylcbm1tL2h1Z2V0bGJfY21hLmM6Mzg6XHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xubW0vaHVnZXRsYl9jbWEuYy0zOS1cbi0tXG5tbS9odWdldGxiX3N5c2ZzLmM9MTgxPXN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMTk5LVx0fSBlbHNlIHtcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMDA6XHRcdG5fbWFzayA9IFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMDEtXHR9XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9NDI1PXN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDU3LVx0XHQgKi9cbm1tL21lbW9yeS10aWVycy5jOjQ1ODpcdFx0bm9kZXNfYW5kbm90KHRpZXJfbm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgdGllcl9ub2Rlcyk7XG5tbS9tZW1vcnktdGllcnMuYy00NTktXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDg4LVx0XHR0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7XG5tbS9tZW1vcnktdGllcnMuYzo0ODk6XHRcdGlmIChub2Rlc19hbmQodGllcl9ub2Rlcywgbm9kZV9zdGF0ZXNbTl9DUFVdLCB0aWVyX25vZGVzKSkge1xubW0vbWVtb3J5LXRpZXJzLmMtNDkwLVx0XHRcdC8qXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNTA0LVx0ICovXG5tbS9tZW1vcnktdGllcnMuYzo1MDU6XHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xubW0vbWVtb3J5LXRpZXJzLmMtNTA2LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcbi0tXG5tbS9tZW1vcnktdGllcnMuYz05MDY9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfaW5pdCh2b2lkKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTkzMC1cdC8qIFJlY29yZCBub2RlcyB3aXRoIG1lbW9yeSBhbmQgQ1BVIHRvIHNldCBkZWZhdWx0IERSQU0gcGVyZm9ybWFuY2UuICovXG5tbS9tZW1vcnktdGllcnMuYzo5MzE6XHRub2Rlc19hbmQoZGVmYXVsdF9kcmFtX25vZGVzLCBub2RlX3N0YXRlc1tOX01FTU9SWV0sXG5tbS9tZW1vcnktdGllcnMuYzo5MzI6XHRcdCAgbm9kZV9zdGF0ZXNbTl9DUFVdKTtcbm1tL21lbW9yeS10aWVycy5jLTkzMy1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3OTM9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg0NC1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZzb3VyY2UpKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE4NDU6XHRcdG5vZGVtYXNrX3Qgbm1hc2sgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NDYtXHRcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xuLS1cbm1tL21lbXBvbGljeS5jPTQwND1zdGF0aWMgaW50IG1wb2xfc2V0X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCxcbi0tXG5tbS9tZW1wb2xpY3kuYy00MTgtXHRub2Rlc19hbmQobnNjLVx1MDAzZW1hc2sxLFxubW0vbWVtcG9saWN5LmM6NDE5Olx0XHQgIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbm1tL21lbXBvbGljeS5jLTQyMC1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDgwPWJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxuLS1cbm1tL21lbXBvbGljeS5jLTIwODktXHQgKlxubW0vbWVtcG9saWN5LmM6MjA5MDpcdCAqIHBvbGljeS1cdTAwM2Vub2RlcyBpcyBpbnRlcnNlY3Qgd2l0aCBub2RlX3N0YXRlc1tOX01FTU9SWV0uXG5tbS9tZW1wb2xpY3kuYy0yMDkxLVx0ICogc28gaWYgdGhlIGZvbGxvd2luZyB0ZXN0IGZhaWxzLCBpdCBpbXBsaWVzXG4tLVxubW0vbWVtcG9saWN5LmMtMjA5My1cdCAqL1xubW0vbWVtcG9saWN5LmM6MjA5NDpcdGlmICghbm9kZXNfaW50ZXJzZWN0cyhwb2xpY3ktXHUwMDNlbm9kZXMsIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldKSlcbm1tL21lbXBvbGljeS5jLTIwOTUtXHRcdGR5bmFtaWNfcG9saWN5X3pvbmUgPSBaT05FX01PVkFCTEU7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQxOT1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNDM1LVx0XHRcdGdvdG8gb3V0O1xubW0vbWVtcG9saWN5LmM6MzQzNjpcdFx0aWYgKCFub2Rlc19zdWJzZXQobm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXG5tbS9tZW1wb2xpY3kuYy0zNDM3LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm1tL21lbXBvbGljeS5jLTM0NjctXHRcdGlmICghbm9kZWxpc3QpXG5tbS9tZW1wb2xpY3kuYzozNDY4Olx0XHRcdG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xubW0vbWVtcG9saWN5LmMtMzQ2OS1cdFx0YnJlYWs7XG4tLVxubW0vbW1faW5pdC5jPTM2OD1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF96b25lX21vdmFibGVfcGZuc19mb3Jfbm9kZXModm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMzczLVx0Lyogc2F2ZSB0aGUgc3RhdGUgYmVmb3JlIGJvcnJvdyB0aGUgbm9kZW1hc2sgKi9cbm1tL21tX2luaXQuYzozNzQ6XHRub2RlbWFza190IHNhdmVkX25vZGVfc3RhdGUgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG5tbS9tbV9pbml0LmMtMzc1LVx0dW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzID0gZWFybHlfY2FsY3VsYXRlX3RvdGFscGFnZXMoKTtcbm1tL21tX2luaXQuYzozNzY6XHRpbnQgdXNhYmxlX25vZGVzID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5tbS9tbV9pbml0LmMtMzc3LVx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi0tXG5tbS9tbV9pbml0LmMtNTg4LVx0LyogcmVzdG9yZSB0aGUgbm9kZV9zdGF0ZSAqL1xubW0vbW1faW5pdC5jOjU4OTpcdG5vZGVfc3RhdGVzW05fTUVNT1JZXSA9IHNhdmVkX25vZGVfc3RhdGU7XG5tbS9tbV9pbml0LmMtNTkwLX1cbi0tXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtMjgzLVx0aWYgKG9jLVx1MDAzZW5vZGVtYXNrIFx1MDAyNlx1MDAyNlxubW0vb29tX2tpbGwuYzoyODQ6XHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbm1tL29vbV9raWxsLmMtMjg1LVx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTg1PUVYUE9SVF9TWU1CT0wobGF0ZW50X2VudHJvcHkpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xOTAtICovXG5tbS9wYWdlX2FsbG9jLmM6MTkxOm5vZGVtYXNrX3Qgbm9kZV9zdGF0ZXNbTlJfTk9ERV9TVEFURVNdIF9fcmVhZF9tb3N0bHkgPSB7XG5tbS9wYWdlX2FsbG9jLmMtMTkyLVx0W05fUE9TU0lCTEVdID0gTk9ERV9NQVNLX0FMTCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjAyLX07XG5tbS9wYWdlX2FsbG9jLmM6MjAzOkVYUE9SVF9TWU1CT0wobm9kZV9zdGF0ZXMpO1xubW0vcGFnZV9hbGxvYy5jLTIwNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NDEKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUmVmaW5lbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBJIGNhbiBzYWZlbHkgaWdub3JlIGBDT05GSUdfTlVNQWAgaGVyZSDigJMgYG5vZGVfc3RhdGVzYCBpcyBleHBvc2VkIHJlZ2FyZGxlc3MuIEdvb2QuIFRoZSBpbml0aWFsIGlkZWEgb2YgbmVlZGluZyBgQ01BYCBhbmQgYEhVR0VUTEJGU2AgaXMgbG9va2luZyBzb2xpZC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSByZWZpbmUgdGhpcy4gVGhlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uIGlzIHNwZWNpZmljYWxseSBjb21waWxlZCAqb25seSogaWYgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCAqYW5kKiBgQ09ORklHX0NPTlRJR19BTExPQ2AgYXJlIGJvdGggZW5hYmxlZC4gTm93LCBgQ09ORklHX0NPTlRJR19BTExPQ2AgaXMgYXV0by1zZWxlY3RlZCBieSBgQ09ORklHX0NNQWAsIHNvIHRoYXQmIzM5O3MgdGFrZW4gY2FyZSBvZi4gQW5kLCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlLCBzbyBpdOKAmXMgbGlrZWx5IGhhbmRsZWQgaW1wbGljaXRseSBieSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gU28sIHByYWN0aWNhbGx5IHNwZWFraW5nLCBJICpkb24mIzM5O3QqIG5lZWQgdG8gbGlzdCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiBKdXN0IGBDTUFgIGFuZCBgSFVHRVRMQkZTYCBzZWVtIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2ssIGp1c3QgdG8gYmUgdGhvcm91Z2guIGBDT05GSUdfQ01BYCByZWxpZXMgb24gYE1NVWAsIG5vIHN1cnByaXNlcyB0aGVyZS4gQW5kIGBDT05GSUdfSFVHRVRMQkZTYCBuZWVkcyBgU1lTRlNgIGFuZCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBIVUdFVExCX1BBR0VgIGFsc28gZGVwZW5kcyBvbiBgTU1VYC4gVGhlIGBNTVVgIGRlcGVuZGVuY3kgaXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBTbywgYWZ0ZXIgcnVubmluZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBvcmlnaW5hbCBpZGVhIGhvbGRzOiBgQ01BYCBhbmQgYEhVR0VUTEJGU2AgYXJlIHRoZSBvbmx5IGNvbmZpZ3MgdGhhdCBJIG5lZWQuCgpPa2F5LCBsZXQmIzM5O3Mgd3JpdGUgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgSSBoYXZlIGlkZW50aWZpZWQuCgpNeSBhbmFseXNpcyBnaXZlcyB0aGUgZm9sbG93aW5nIHZhbHVlczoKCmBXb3J0aEZ1enppbmc6IHRydWVgCmBGb2N1c1N5bWJvbHM6IFsmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7XWAKYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0NNQSYjMzQ7LCAmIzM0O0hVR0VUTEJGUyYjMzQ7XWAKYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuJiMzNDtgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB3aGVuIG5vZGVtYXNrIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGh1Z2V0bGIgQ01BKSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZXBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB3aGVuIG5vZGVtYXNrIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGh1Z2V0bGIgQ01BKSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZXBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTYuNTU0MzI3MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1NzcyNzcxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gd2hlbiBub2RlbWFzayBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChodWdldGxiIENNQSkgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2VwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTYuNTU0MzM0NTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Mjg4NTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRkMWEzMDFkODdjOTVlYjM0MWMzMzM5ZDg3NTRlY2MyZmMxNmRlY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDA6NTE6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmNcXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0ZS4uNTc0NGRlMGNlZWI3MzUgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcXG5AQCAtMzQsNyArMzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChodWdldGxiX2NtYVtuaWRdKVxcbitcXHRpZiAoIW5vZGVtYXNrKVxcbitcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuK1xcbitcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG4gXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTcuMzI4MTcyMzk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTcwODAzNDIyODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNNQVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkMWEzMDFkODdjOTVlYjM0MWMzMzM5ZDg3NTRlY2MyZmMxNmRlY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwMDo1MTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0ZS4uNTc0NGRlMGNlZWI3MzUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXG4rKysgYi9tbS9odWdldGxiX2NtYS5jXG5AQCAtMzQsNyArMzQsMTAgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbitcdGlmICghbm9kZW1hc2spXG4rXHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuK1xuK1x0aWYgKGh1Z2V0bGJfY21hW25pZF0gXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4gXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTE6NTcuMzI4MTc0NjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MDE0NTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIE1vZGlmaWNhdGlvbioqXG5cblNvLCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9odWdldGxiX2NtYS5jYCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgaW50ZXJlc3QuIFRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBhIG1vZGlmaWNhdGlvbiB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBvZiBmcm96ZW4gZm9saW9zIHdpdGhpbiB0aGUgaHVnZSBwYWdlIENNQSBhcmVhIGlzIGJlaW5nIGFsdGVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9ucyBvZiBDTUEgd2l0aCBodWdldGxiZnMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvbiBmcmFnbWVudGF0aW9uLCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlLCBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgYGh1Z2V0bGJgIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gb3RoZXIgc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgaW4gbWluZC4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjEwOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MDAuNTc4MzIyMjY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDAwODA3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYtXFxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjgtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmgtMTktXFxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcXG5tbS9odWdldGxiX2NtYS5oLTIxLVxcdFxcdGdmcF90IGdmcF9tYXNrLFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjowMy41Nzg0MDg5NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM3OTQyNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUgY2hhbmdlLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRXhhbWluaW5nIGEgaHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBjaGVjayBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgYG5vZGVtYXNrYCBpcyBudWxsIGFuZCBpZiBzbywgZGVmYXVsdHMgaXQgdG8gYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAuIEZvbGxvd2luZyB0aGF0LCBpdCBwZXJmb3JtcyBhIGNoZWNrIHVzaW5nIGBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBgaHVnZXRsYiBDTUFgIGNvZGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5HaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBodWdldGxiX2NtYS5jYCBpcyBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyB0byBzZWUgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgaXMgdHJ5aW5nIHRvIGFjY29tcGxpc2ggaW4gZGlmZmVyZW50IHNjZW5hcmlvcyBhbmQgaWYgdGhlcmUncyBhbiBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IgYXZhaWxhYmlsaXR5LCBvciBpZiB0aGVyZSBpcyBhbnkgYWRkZWQgY29tcGxleGl0eSBvciBidWctZml4aW5nIHJlcXVpcmVkLiBUaGlzIGNoZWNrIGxvb2tzIGxpa2UgYSBnb29kIG9uZSwgcG90ZW50aWFsbHkgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiBvciBlbnN1cmluZyBub2RlIGFmZmluaXR5IGZvciBodWdldGxiIGFsbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MDcuMTE2MzU1MTM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDgxMTUyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWEub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3Ny1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDc4OlxcdGh1Z2V0bGJfY21hX29ubHk9XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3OS1cXHRcXHRcXHRbSFcsQ01BLEVBUkxZXSBXaGVuIGFsbG9jYXRpbmcgbmV3IEh1Z2VUTEIgcGFnZXMsIG9ubHlcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cXG4tLVxcbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTMyPWVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYVxcXCIsIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTMzLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM0OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seShjaGFyICpwKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcXG5tbS9odWdldGxiX2NtYS5jOjEzNjpcXHRyZXR1cm4ga3N0cnRvYm9vbChwLCBcXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzctfVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM4LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYV9vbmx5XFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTE0MC1cXG5tbS9odWdldGxiX2NtYS5jOjE0MTp1bnNpZ25lZCBpbnQgX193ZWFrIGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5tbS9odWdldGxiX2NtYS5jLTE0Mi17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE0Nj12b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cXG5tbS9odWdldGxiX2NtYS5jOjE1NTpcXHRvcmRlciA9IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIoKTtcXG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cXHRpZiAoIW9yZGVyKSB7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYwLXtcXG5tbS9odWdldGxiX2NtYS5jOjI2MTpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI2Mi19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjcxLVxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jOjI3MjpcXHRcXHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XFxubW0vaHVnZXRsYl9jbWEuYy0yNzMtfVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjc5LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlxcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI4MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjA5Ljc2NDQ3OTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NTQ2NDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJwbGF5IG9mIENNQSBhbmQgSHVnZVRMQiBpbiBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNyb3NzLWNvbXBpbGF0aW9uIGNvbmZpZyB0ZWxscyBtZSBgbW0vaHVnZXRsYl9jbWEuY2AgZ2V0cyBidWlsdCBpZiBib3RoIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBlbmFibGVkLiBJbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBhIGRpcmVjdCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IgKENNQSkgYW5kIEh1Z2VUTEIgZmlsZSBzeXN0ZW0uIEl0J3Mgbm90IGEgY29tbW9uIGNvbmZpZ3VyYXRpb24sIGJ1dCB0aGVyZSBhcmUgZGVmaW5pdGVseSBjYXNlcyB3aGVyZSB5b3UnZCB3YW50IHRvIHVzZSBDTUEgdG8gcHJlLWFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzIHNwZWNpZmljYWxseSBmb3IgSHVnZVRMQiB1c2UuIE1ha2VzIHNlbnNlIGZvciBwZXJmb3JtYW5jZSBwcmVkaWN0YWJpbGl0eSwgZXNwZWNpYWxseSBpZiB5b3UncmUgZGVhbGluZyB3aXRoIHZlcnkgbGFyZ2UgcGFnZXMgYW5kIHdhbnQgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gYG1tL2h1Z2V0bGJfY21hLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZWdyYXRpb24gYWN0dWFsbHkgd29ya3MuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgY29yZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGhlcmUuLi4gSXQncyB2ZXJ5IGxpa2VseSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0aGF0J3MgaGFuZGxpbmcgdGhlIGtleSBwYXJ0cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IENNQSBpcyB1dGlsaXplZCB0byBwcmVwYXJlIHRoZSBwaHlzaWNhbCBjb250aWd1b3VzIG1lbW9yeSwgYW5kIGhvdyBpdCBnZXRzIHBhc3NlZCB0byB0aGUgSHVnZVRMQiBzeXN0ZW0uIERvZXMgdGhlIENNQSBhbGxvY2F0aW9uIGhhcHBlbiAqYmVmb3JlKiB0aGUgSHVnZVRMQiBhbGxvY2F0aW9uIGlzIHJlcXVlc3RlZCwgb3IgaXMgdGhlcmUgc29tZSBzb3J0IG9mIGNvb3JkaW5hdGVkIGhhbmRzaGFrZT8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyDigJMgd2hhdCBoYXBwZW5zIGlmIENNQSBmYWlscyB0byBwcm92aWRlIHRoZSBtZW1vcnk/IEhvdyBpcyB0aGlzIFwiZnJvemVuIGZvbGlvXCIgY29uY2VwdCBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBIdWdlVExCIG1hbmFnZW1lbnQ/IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgaGVyZSwgYmVjYXVzZSBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgYnVnIGhlcmUgY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgcHJvYmxlbXMsIG9yIGV2ZW4gY2F0YXN0cm9waGljIGZhaWx1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjoxMy45Mjk5NDYyNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYl9jbWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gIDIyOlxcdHtcXG4gIDIzOlxcdFxcdFdBUk5fT05fT05DRSghY21hX3JlbGVhc2VfZnJvemVuKGh1Z2V0bGJfY21hW2ZvbGlvX25pZChmb2xpbyldLFxcbiAgMjQ6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKSk7XFxuICAyNTpcXHR9XFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuICAyODpcXHRcXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdGludCBub2RlO1xcbiAgMzE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDMyOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiAgMzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdGlmICghbm9kZW1hc2spXFxuICAzODpcXHRcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGlmIChodWdldGxiX2NtYVtuaWRdIFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKVxcbiAgNDE6XFx0XFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAoIXBhZ2UgXFx1MDAyNlxcdTAwMjYgIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xcbiAgNDQ6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xcbiAgNDU6XFx0XFx0XFx0XFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcXG4gIDQ2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xcbiAgNDk6XFx0XFx0XFx0XFx0aWYgKHBhZ2UpXFxuICA1MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDUxOlxcdFxcdFxcdH1cXG4gIDUyOlxcdFxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0aWYgKCFwYWdlKVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gIDU4OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxuICA1OTpcXHRcXHRyZXR1cm4gZm9saW87XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxcbiAgNjM6XFx0aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0c3RydWN0IGNtYSAqY21hO1xcbiAgNjY6XFx0XFx0c3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptO1xcbiAgNjc6XFx0XFx0aW50IG5vZGUgPSAqbmlkO1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MTMuOTMwMDg2OTExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MTU5MjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gaG93IHRoZXNlIGdpZ2FudGljIGZyb3plbiBmb2xpb3MgZ2V0IGFsbG9jYXRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBUaGUgdHJhY2UgbGVhZHMgbWUgdG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIGFuZCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWwgYWxsb2NhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3by4gSSBzaG91bGQgaGVhZCBzdHJhaWdodCB0byBgbW0vaHVnZXRsYi5jYCBhbmQgZGlnIGludG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgdG8gc2VlIGhvdyBpdCdzIHV0aWxpemluZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSSdtIGhvcGluZyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyBkZWVwIHdlIG5lZWQgdG8gZ28gdG8gdW5kZXJzdGFuZCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDA1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjoxNy4xMjE2ODIyMjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzg4NTAxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzU5LSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXFxubW0vaHVnZXRsYi5jOjEzNjA6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYi5jLTEzNjEtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9odWdldGxiLmM6MTM3NzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG5tbS9odWdldGxiLmMtMTM3OC1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTg0Ni1cXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxcbm1tL2h1Z2V0bGIuYzoxODQ3OlxcdFxcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XFxubW0vaHVnZXRsYi5jLTE4NDgtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjoxOS41NjA1NDE3MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MjM4MTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBIdWdldGxiIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgY2FsbCBzdGFjay4gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXMgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoaW5ncywgY2FsbGVkIGZyb20gYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIHdoaWNoIGl0c2VsZiBicmFuY2hlcyBmcm9tIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCwgYW5kIGZpbmFsbHksIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gIGFuZCBgYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvYC4gWWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNydWNpYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYE5VTExgIGBub2RlbWFza2AgZGVyZWZlcmVuY2UgaW4gYG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spYC4gVGhlIHByb3Bvc2VkIGZpeCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGFkZCBhIGNoZWNrOiBgaWYgKCFub2RlbWFzaykgbm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07YC4gVGhhdCBzZWVtcyBmdW5jdGlvbmFsbHkgc291bmQsIGEgdHlwaWNhbCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZvciB0aGUgYGh1Z2V0bGJfY21hLmNgIHNpZGUgb2YgdGhpbmdzLCB3ZSBjbGVhcmx5IG5lZWQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIEFuZCBmb3IgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmLCB3ZSdsbCBuZWVkIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gQnV0LCB3YWl0IGEgbWludXRlLCBkb2Vzbid0IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gICphbHdheXMqIGNhbGwgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2A/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgbW0vaHVnZXRsYi5jYCBjb2RlIGFyb3VuZCBsaW5lIDEzNjAganVzdCB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MjUuNTQyOTI2ODU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1NTpcXHRlcnI6XFxuMTM1NjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzU3OlxcdH1cXG4xMzU4OlxcdFxcbjEzNTk6XFx0I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG4xMzYwOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbjEzNjE6XFx0XFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuMTM2MjpcXHR7XFxuMTM2MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjEzNjQ6XFx0XFxuMTM2NTpcXHRcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbjEzNjY6XFx0XFx0aWYgKGZvbGlvKVxcbjEzNjc6XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRpZiAoaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKCkpXFxuMTM3MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0Zm9saW8gPSAoc3RydWN0IGZvbGlvICopYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlcygxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBnZnBfbWFzayxcXG4xMzczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmlkLCBub2RlbWFzayk7XFxuMTM3NDpcXHRcXHRyZXR1cm4gZm9saW87XFxuMTM3NTpcXHR9XFxuMTM3NjpcXHQjZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG4xMzc3OlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbjEzNzg6XFx0XFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpub2RlbWFzaylcXG4xMzc5OlxcdHtcXG4xMzgwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzODE6XFx0fVxcbjEzODI6XFx0I2VuZGlmXFxuMTM4MzpcXHRcXG4xMzg0OlxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjI1LjU0MzMwMzgwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc0ODA0MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgY29uZmlndXJhdGlvbiBwdXp6bGUsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlc2Uga2VybmVsIGludGVybmFsczpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgd2UgbmVlZCBib3RoIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGVzZSBhcmUgcmVxdWlyZWQgaW4gY29uanVuY3Rpb24uIEhtbSwgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCByaW5ncyBhIGJlbGwuIFRoYXQncyB1c3VhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjYXBhYmlsaXR5LCBpdCdzIHR5cGljYWxseSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBoYXJkd2FyZSdzIGFyY2hpdGVjdHVyZS4gSSBkb24ndCB1c3VhbGx5IGhhdmUgdG8gZGlnIGludG8gaXQgZGlyZWN0bHkuXG5cbk5vdywgYENPTkZJR19DT05USUdfQUxMT0NgLCB0aGF0J3MgZGlmZmVyZW50LiBUaGF0IHVzdWFsbHkgZ2V0cyBzZWxlY3RlZCBiYXNlZCBvbiBhbm90aGVyIGNvbmZpZywgbW9yZSBzcGVjaWZpY2FsbHksIGBDT05GSUdfQ01BYCAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKS4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBJIGtub3cgYENNQWAgbmVlZHMgdG8gYWxsb2NhdGUgY29udGlndW91cyBibG9ja3Mgb2YgcGh5c2ljYWwgbWVtb3J5LiBUbyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgbW0vS2NvbmZpZ2AsIGl0J3MgYmVlbiBhIHdoaWxlLCBidXQgSSdtIGNlcnRhaW4gSSdsbCBmaW5kIGEgY2xlYXIgZGVwZW5kZW5jeSB0aGVyZS4gQmV0dGVyIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc3MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6MjkuMTE4MTEwODM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYyNTI3OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05USUdfQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03MDk9Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuLS1cXG5tbS9LY29uZmlnLTcxOC1cXG5tbS9LY29uZmlnOjcxOTpjb25maWcgQ09OVElHX0FMTE9DXFxubW0vS2NvbmZpZy03MjAtXFx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXFx1MDAyNlxcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjMxLjQ4MDY0MzI5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNzM5MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYXMgd2VsbC5cblxuKipDTUEsIEh1Z2VUTEIsIGFuZCBDb250aWd1b3VzIEFsbG9jYXRpb246IE15IEN1cnJlbnQgVGhpbmtpbmcqKlxuXG5SaWdodCwgc28gYENPTlRJR19BTExPQ2AgaXMgZGVmaW5pdGVseSBlbmFibGVkICpiZWNhdXNlKiBvZiBgQ01BYCAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKS4gVGhhdCdzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBoZXJlLiBXaGljaCwgb2YgY291cnNlLCBtZWFucyB3ZSBuZWVkICpib3RoKiBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMsIGJ1dCB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuXG5cbkhtbSwgSSByZWNhbGwgbm93OiB0aGUgYGh1Z2V0bGJfY21hLmNgIGZpbGUgKml0c2VsZiogaXMgY29tcGlsZWQgb25seSBpZiBib3RoIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBzZXQuIFRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgdGhlIGdsdWUgYmV0d2VlbiB0aGUgdHdvLlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhpcy4gVGltZSB0byBkaWcgaW50byB0aGUgYG1tL01ha2VmaWxlYCBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFyZSBwcmVjaXNlbHkgd2hhdCBJIHRoaW5rIHRoZXkgYXJlLiBObyBwb2ludCBpbiBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGF0IHRoaXMgc3RhZ2UuIEkgd2FudCB0byBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHJ1bGVzIGV4cGxpY2l0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1MjozNS4wOTMzODQ1OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODk1MDUxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWEub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3Ny1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDc4OlxcdGh1Z2V0bGJfY21hX29ubHk9XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA3OS1cXHRcXHRcXHRbSFcsQ01BLEVBUkxZXSBXaGVuIGFsbG9jYXRpbmcgbmV3IEh1Z2VUTEIgcGFnZXMsIG9ubHlcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cXG4tLVxcbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYy0xOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTMyPWVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYVxcXCIsIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTMzLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM0OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seShjaGFyICpwKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM1LXtcXG5tbS9odWdldGxiX2NtYS5jOjEzNjpcXHRyZXR1cm4ga3N0cnRvYm9vbChwLCBcXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzctfVxcbm1tL2h1Z2V0bGJfY21hLmMtMTM4LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTM5OmVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2NtYV9vbmx5XFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTE0MC1cXG5tbS9odWdldGxiX2NtYS5jOjE0MTp1bnNpZ25lZCBpbnQgX193ZWFrIGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5tbS9odWdldGxiX2NtYS5jLTE0Mi17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE0Nj12b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE1NC1cXG5tbS9odWdldGxiX2NtYS5jOjE1NTpcXHRvcmRlciA9IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIoKTtcXG5tbS9odWdldGxiX2NtYS5jLTE1Ni1cXHRpZiAoIW9yZGVyKSB7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI1OT1ib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYwLXtcXG5tbS9odWdldGxiX2NtYS5jOjI2MTpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI2Mi19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI2OT12b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjcxLVxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jOjI3MjpcXHRcXHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XFxubW0vaHVnZXRsYl9jbWEuYy0yNzMtfVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yNzU9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjc5LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjgwOlxcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI4MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjM3LjQ4Mjg5Mzk2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM3MzgwNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBHaWdhbnRpYyBQYWdlcyoqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBlc3NlbnRpYWwuIE5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIGZvciBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCB0byBldmVuICpjb21waWxlKiwgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGRlZmluZWQuIEl0J3MgYSBrZXkgZGVwZW5kZW5jeS4gU28sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3JlIGdvb2QgdG8gZ28uIE5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBzZXQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjQwLjcyMDI3Nzk0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMTI1MTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI4Mz1jb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuLS1cXG5mcy9LY29uZmlnLTI4Ni1cXG5mcy9LY29uZmlnOjI4Nzpjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmZzL0tjb25maWctMjg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6NDIuODMxNTM3MDY4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDExNzQzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIEJvb2xlYW4gU2VsZWN0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgYSBib29sZWFuIHZhbHVlIHRoYXQncyBiZWluZyBzZXQgb3Igc2VsZWN0ZWQgYnkgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hpY2ggb25lcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgbWFraW5nIHRoaXMgc2VsZWN0aW9uLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBib29sZWFuIGlzIGJlaW5nIHVzZWQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nICp3aHkqIGl0J3MgYmVpbmcgdXNlZC4gSXMgdGhpcyBhYm91dCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucywgbWVtb3J5IG1vZGVscywgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNoZWNrIGlzIGluIG9yZGVyLCBhbmQgSSBrbm93IGV4YWN0bHkgd2hlcmUgdG8gc3RhcnQgbG9va2luZy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjQ1LjU3MjcxMzk2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTc1MDU2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMi1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvYXJtNjQvS2NvbmZpZzozMzpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zNC1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEzOC1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjEzOTpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcdFxcdGlmIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTQwLVxcdHNlbGVjdCBBUkNIX0hBU19LQ09WXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMzUtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL3Jpc2N2L0tjb25maWc6MzY6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3Jpc2N2L0tjb25maWctMzctXFx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk3LVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9zMzkwL0tjb25maWc6OTg6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTktXFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxcbmFyY2gvc2gvS2NvbmZpZzoxMDpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvc2gvS2NvbmZpZy0xMS1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMTA3LVxcdHNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0lcXG5hcmNoL3NwYXJjL0tjb25maWc6MTA4OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC9zcGFyYy9LY29uZmlnLTEwOS1cXHRzZWxlY3QgSEFWRV9TT0ZUSVJRX09OX09XTl9TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2LVxcdCMgT3B0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IDY0LWJpdCBrZXJuZWwgb25seTpcXG5hcmNoL3g4Ni9LY29uZmlnOjI3OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC94ODYvS2NvbmZpZy0yOC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTI6NDcuODE4NDY5NDcxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTg0NzMyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIFRoaXMgcGllY2Ugb2YgY29kZSBpcyBjbGVhcmx5IHRhcmdldGVkIHRvd2FyZHMgdmFyaW91cyBhcmNoaXRlY3R1cmVzIOKAkyB4ODZfNjQsIGFybTY0LCBSSVNDLVYsIGFuZCB0aGUgbGlrZS4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdDsgdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGVkLiBTbywgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZvY3VzIGhlcmUgaXMgb24gYENNQWAgYW5kIGBIVUdFVExCRlNgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucy5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBmdW5jdGlvbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuIEFoLCBhbmQgdGhhdCdzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCB3aGljaCBpdHNlbGYgY29tZXMgZnJvbSBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gT2theSwgc28gd2UgaGF2ZSBhIGNsZWFyIGNhbGxpbmcgY2hhaW4gdGhlcmUuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHRocmVlIGZ1bmN0aW9ucy5cblxuQnV0LCBob2xkIG9uLi4uIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjYWxsZXJzPyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBmZWVscyBsaWtlIGl0IGhhcyBhIGZvY3VzZWQgcHVycG9zZS4gSWYgSSdtIHRyeWluZyB0byBvcHRpbWl6ZSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgKmVsc2UqIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIGNhbGxlZC4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIgaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMxMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjUxLjgxNjk0NzYzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3ODE1MTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTM2NC1cXG5tbS9odWdldGxiLmM6MTM2NTpcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbm1tL2h1Z2V0bGIuYy0xMzY2LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNi1cXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9Nj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cXHRcXHRcXHRcXHQgICAgICBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzayk7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0xOS1cXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjUyOjU0LjA5NTEwNTEzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzgxOTYyOTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEFsbG9jYXRpb24gUGF0aCoqXG5cblJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBcIk5vLlwiIGxpa2VseSBtZWFucyBJJ3ZlIHJlamVjdGVkIGEgcHJldmlvdXMgbGluZSBvZiBpbnF1aXJ5LiBMZXQncyBzZWUuLi4gVGhlIGtleSBmdW5jdGlvbiB3ZSdyZSBmb2N1c2VkIG9uIHNlZW1zIHRvIGJlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0J3Mgd2hlcmUgd2Ugc2hvdWxkIGJlIGxvb2tpbmcuXG5cbkhvbGQgb24sIEkgcmVtZW1iZXIgc2VlaW5nIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHNvbWV3aGVyZS4gQW5kLCB5ZXMsIGl0J3MgbWFya2VkIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgZ2V0dGluZyBpbmxpbmVkLCB3aGljaCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncy4gV2UnbGwgbmVlZCB0byBrZWVwIHRoYXQgcG9zc2liaWxpdHkgaW4gbWluZC5cblxuT2theSwgYmFjayB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gSXQgaXNuJ3Qgc3RhdGljLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBvdXIgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBjb25zaWRlciB0aGlzIGFsc28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTM6NTcuOTE0NzM3MTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc1NjU4OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTgzNS1cXG5tbS9odWdldGxiLmM6MTgzNjpzdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMTgzNy1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTg2Mi0gKi9cXG5tbS9odWdldGxiLmM6MTg2MzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTE4NjQtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE4NjctXFxubW0vaHVnZXRsYi5jOjE4Njg6XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xcbm1tL2h1Z2V0bGIuYy0xODY5LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xODk2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5MDYtXFxubW0vaHVnZXRsYi5jOjE5MDc6XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXFxubW0vaHVnZXRsYi5jLTE5MDgtXFx0XFx0XFx0XFx0XFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMDc2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIwODgtXFxubW0vaHVnZXRsYi5jOjIwODk6XFx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMjA5MC1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTIxMjQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxMzEtXFxubW0vaHVnZXRsYi5jOjIxMzI6XFx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMjEzMy1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI2NDE9c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjg2LVxcdFxcdFxcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XFxubW0vaHVnZXRsYi5jOjI2ODc6XFx0XFx0XFx0bmV3X2ZvbGlvID0gYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMjY4OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBuaWQsIE5VTEwpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTMzNzI9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMzg1LVxcbm1tL2h1Z2V0bGIuYzozMzg2OlxcdFxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXFxubW0vaHVnZXRsYi5jLTMzODctXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzM5MS1cXHRcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vaHVnZXRsYi5jOjMzOTI6XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmMtMzM5My1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MDIuMjkwMzk5OTYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzU1NjM1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5Pa2F5LCBteSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV0ZXJtaW5lIGl0cyBjb21waWxhdGlvbiBhbmQgdXNhZ2UuIEl0IGxvb2tzIGxpa2UgYENNQWAgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgb2J2aW91cyBvbmVzLCBhbmQgSSB0aGluayBJJ20gY29ycmVjdCBpbiB0aGF0IGFzc3VtcHRpb24sIGJlY2F1c2UgYGh1Z2V0bGJfY21hLmNgIGlzIG9ubHkgYnVpbHQgd2l0aCBib3RoIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGVuYWJsZWQuXG5cbkJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgaW1wbGljaXQgZGVwZW5kZW5jaWVzLiBMZXQgbWUgc2VlLi4uIHRoZSBjb2RlIHVzZXMgYG5vZGVtYXNrX3RgIGFuZCBgbm9kZV9zdGF0ZXNgLiBUaG9zZSBhcmUgb2Z0ZW4gdGllZCB0byBOVU1BIHN5c3RlbXMuIE9rYXksIGxldCdzIGNoZWNrLiBJcyBgQ09ORklHX05VTUFgIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aG9zZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMsIG9yIGFyZSB0aGV5IHNvbWV0aW1lcyBhdmFpbGFibGUgZXZlbiB3aXRob3V0IE5VTUEgZW5hYmxlZD8gVGhpcyByZXF1aXJlcyBtb3JlIGRpZ2dpbmcgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NDIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MDYuMTY1OTY3MTI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE0MDAwNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfaXNzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmM9ODY9dm9pZCBfX2luaXQgcmVwbGljYXRlX2tlcm5lbF90ZXh0KHZvaWQpXFxuLS1cXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYy0xMDAtXFx0XFx0LyogQ2hlY2sgaWYgdGhpcyBub2RlIHNob3VsZCBnZXQgYSBjb3B5IG9mIHRoZSBrZXJuZWwgKi9cXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYzoxMDE6XFx0XFx0aWYgKG5vZGVfaXNzZXQoY2xpZW50X25hc2lkLCBrdGV4dF9yZXBtYXNrKSkge1xcbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEwMi1cXHRcXHRcXHRzZXJ2ZXJfbmFzaWQgPSBjbGllbnRfbmFzaWQ7XFxuLS1cXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYz0xMTY9dW5zaWduZWQgbG9uZyBub2RlX2dldGZpcnN0ZnJlZShuYXNpZF90IG5hc2lkKVxcbi0tXFxuYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMtMTI0LVxcdG9mZnNldCA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpKFxcdTAwMjZfZW5kKSkgLSBsb2FkYmFzZTtcXG5hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYzoxMjU6XFx0aWYgKChuYXNpZCA9PSAwKSB8fCAobm9kZV9pc3NldChuYXNpZCwga3RleHRfcmVwbWFzaykpKVxcbmFyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jLTEyNi1cXHRcXHRyZXR1cm4gVE9fTk9ERShuYXNpZCwgb2Zmc2V0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTQ4MD1zdHJ1Y3Qgc2d4X2VwY19wYWdlICpfX3NneF9hbGxvY19lcGNfcGFnZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQ4OS1cXHQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6NDkwOlxcdGlmIChub2RlX2lzc2V0KG5pZF9vZl9jdXJyZW50LCBzZ3hfbnVtYV9tYXNrKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDkxLVxcdFxcdG5pZF9zdGFydCA9IG5pZF9vZl9jdXJyZW50O1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTc5Nz1zdGF0aWMgYm9vbCBfX2luaXQgc2d4X3BhZ2VfY2FjaGVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgzNi1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6ODM3OlxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIHNneF9udW1hX21hc2spKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgzOC1cXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c2d4X251bWFfbm9kZXNbbmlkXS5sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04NTktXFx0Zm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjg2MDpcXHRcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzZ3hfbnVtYV9tYXNrKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04NjEtXFx0XFx0ICAgIG5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgXFx1MDAyNlxcdTAwMjYgbm9kZV9zdGF0ZShuaWQsIE5fQ1BVKSlcXG4tLVxcbmFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmM9NTY9aW50IF9faW5pdCBhbWRfbnVtYV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jLTEwOC1cXHRcXHR9XFxuYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYzoxMDk6XFx0XFx0aWYgKG5vZGVfaXNzZXQobm9kZWlkLCBudW1hX25vZGVzX3BhcnNlZCkpIHtcXG5hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jLTExMC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJOb2RlICVkIGFscmVhZHkgcHJlc2VudCwgc2tpcHBpbmdcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYz0xMDY9c3RhdGljIHZvaWQgZWlvaW50Y19zZXRfaXJxX3JvdXRlKGludCBwb3MsIHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtbm9kZSwgbm9kZW1hc2tfdCAqbm9kZV9tYXApXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYy0xMjEtXFx0XFx0bm9kZSA9IGNwdV90b19laW9fbm9kZShpKTtcXG5kcml2ZXJzL2lycWNoaXAvaXJxLWxvb25nc29uLWVpb2ludGMuYzoxMjI6XFx0XFx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICpub2RlX21hcCkpXFxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmMtMTIzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM9MTg4PXN0YXRpYyBpbnQgZWlvaW50Y19pbmRleChpbnQgbm9kZSlcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jLTE5Mi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGljczsgaSsrKSB7XFxuZHJpdmVycy9pcnFjaGlwL2lycS1sb29uZ3Nvbi1laW9pbnRjLmM6MTkzOlxcdFxcdGlmIChub2RlX2lzc2V0KG5vZGUsIGVpb2ludGNfcHJpdltpXS1cXHUwMDNlbm9kZV9tYXApKVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbG9vbmdzb24tZWlvaW50Yy5jLTE5NC1cXHRcXHRcXHRyZXR1cm4gaTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMzQyPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqY2FuX2dhdGhlcl9udW1hX3N0YXRzKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM1OC1cXHRuaWQgPSBwYWdlX3RvX25pZChwYWdlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM1OTpcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMzYwLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMzNjY9c3RhdGljIHN0cnVjdCBwYWdlICpjYW5fZ2F0aGVyX251bWFfc3RhdHNfcG1kKHBtZF90IHBtZCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMzgzLVxcdG5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpO1xcbmZzL3Byb2MvdGFza19tbXUuYzozMzg0OlxcdGlmICghbm9kZV9pc3NldChuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMzODUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMjUtICogdm9pZCBub2Rlc19jbGVhcihtYXNrKVxcdFxcdGNsZWFyIGFsbCBiaXRzXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjI2OiAqIGludCBub2RlX2lzc2V0KG5vZGUsIG1hc2spXFx0XFx0dHJ1ZSBpZmYgYml0ICdub2RlJyBzZXQgaW4gbWFza1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0yNy0gKiBib29sIG5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG1hc2spXFx0dGVzdCBhbmQgc2V0IGJpdCAnbm9kZScgaW4gbWFza1xcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTc3LSAqIFN1YnRsZXR5OlxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo3ODogKiAxKSBUaGUgJ3R5cGUtY2hlY2tlZCcgZm9ybSBvZiBub2RlX2lzc2V0KCkgY2F1c2VzIGdjYyAoMy4zLjIsIGFueXdheSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNzktICogICAgdG8gZ2VuZXJhdGUgc2xpZ2h0bHkgd29yc2UgY29kZS4gIFNvIHVzZSBhIHNpbXBsZSBvbmUtbGluZSAjZGVmaW5lXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjgwOiAqICAgIGZvciBub2RlX2lzc2V0KCksIGluc3RlYWQgb2Ygd3JhcHBpbmcgYW4gaW5saW5lIGluc2lkZSBhIG1hY3JvLCB0aGVcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtODEtICogICAgd2F5IHdlIGRvIHRoZSBvdGhlciBjYWxscy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD0xNDM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fbm9kZXNfY2xlYXIobm9kZW1hc2tfdCAqZHN0cCwgdW5zaWduZWQgaW50IG5iaXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTE0OC0vKiBObyBzdGF0aWMgaW5saW5lIHR5cGUgY2hlY2tpbmcgLSBzZWUgU3VidGxldHkgKDEpIGFib3ZlLiAqL1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDoxNDk6I2RlZmluZSBub2RlX2lzc2V0KG5vZGUsIG5vZGVtYXNrKSB0ZXN0X2JpdCgobm9kZSksIChub2RlbWFzaykuYml0cylcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtMTUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oPTQwNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBub2RlX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDgte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MDk6XFx0cmV0dXJuIG5vZGVfaXNzZXQobm9kZSwgbm9kZV9zdGF0ZXNbc3RhdGVdKTtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEwLX1cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDIyNj1ib29sIGNwdXNldF9jdXJyZW50X25vZGVfYWxsb3dlZChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyMzMtXFx0XFx0cmV0dXJuIHRydWU7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0MjM0OlxcdGlmIChub2RlX2lzc2V0KG5vZGUsIGN1cnJlbnQtXFx1MDAzZW1lbXNfYWxsb3dlZCkpXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjM1LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjUzLVxcdGNzID0gbmVhcmVzdF9oYXJkd2FsbF9hbmNlc3Rvcih0YXNrX2NzKGN1cnJlbnQpKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyNTQ6XFx0YWxsb3dlZCA9IG5vZGVfaXNzZXQobm9kZSwgY3MtXFx1MDAzZW1lbXNfYWxsb3dlZCk7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MjU1LVxcbi0tXFxubW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTgwMy1cXHQgKi9cXG5tbS9odWdldGxiLmM6MTgwNDpcXHRpZiAobm9kZV9hbGxvY19ub3JldHJ5IFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobmlkLCAqbm9kZV9hbGxvY19ub3JldHJ5KSlcXG5tbS9odWdldGxiLmMtMTgwNS1cXHRcXHRhbGxvY190cnlfaGFyZCA9IGZhbHNlO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ1MDA9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NTA5LVxcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcXG5tbS9odWdldGxiLmM6NDUxMDpcXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG5tbS9odWdldGxiLmMtNDUxMS1cXHRcXHRcXHRuciArPSBhcnJheVtub2RlXTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjc9c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMzktXFxubW0vaHVnZXRsYl9jbWEuYzo0MDpcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSlcXG5tbS9odWdldGxiX2NtYS5jLTQxLVxcdFxcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTc2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTc3OlxcdFxcdGlmICghbm9kZV9pc3NldChuaWQsIGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpIHtcXG5tbS9odWdldGxiX2NtYS5jLTE3OC1cXHRcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogaW52YWxpZCBub2RlICVkIHNwZWNpZmllZFxcXFxuXFxcIiwgbmlkKTtcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0zOT1zdGF0aWMgaW5saW5lIGludCBnZXRfdmFsaWRfbm9kZV9hbGxvd2VkKGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTQwLXtcXG5tbS9odWdldGxiX2ludGVybmFsLmg6NDE6XFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgKm5vZGVzX2FsbG93ZWQpKVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC00Mi1cXHRcXHRuaWQgPSBuZXh0X25vZGVfYWxsb3dlZChuaWQsIG5vZGVzX2FsbG93ZWQpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9NjQzPXN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9mb2xpb19yZXF1aXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNjQ4LVxcbm1tL21lbXBvbGljeS5jOjY0OTpcXHRyZXR1cm4gbm9kZV9pc3NldChuaWQsICpxcC1cXHUwMDNlbm1hc2spID09ICEoZmxhZ3MgXFx1MDAyNiBNUE9MX01GX0lOVkVSVCk7XFxubW0vbWVtcG9saWN5LmMtNjUwLX1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTEzMzY9aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzk5LVxcdFxcdFxcdGlmICgobm9kZXNfd2VpZ2h0KCpmcm9tKSAhPSBub2Rlc193ZWlnaHQoKnRvKSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzoxNDAwOlxcdFxcdFxcdFxcdFxcdFxcdChub2RlX2lzc2V0KHMsICp0bykpKVxcbm1tL21lbXBvbGljeS5jLTE0MDEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNDEwLVxcdFxcdFxcdC8qIGRlc3Qgbm90IGluIHJlbWFpbmluZyBmcm9tIG5vZGVzPyAqL1xcbm1tL21lbXBvbGljeS5jOjE0MTE6XFx0XFx0XFx0aWYgKCFub2RlX2lzc2V0KGRlc3QsIHRtcCkpXFxubW0vbWVtcG9saWN5LmMtMTQxMi1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxMDgtXFx0bm9kZSA9IGN1cnJlbnQtXFx1MDAzZWlsX3ByZXY7XFxubW0vbWVtcG9saWN5LmM6MjEwOTpcXHRpZiAoIWN1cnJlbnQtXFx1MDAzZWlsX3dlaWdodCB8fCAhbm9kZV9pc3NldChub2RlLCBwb2xpY3ktXFx1MDAzZW5vZGVzKSkge1xcbm1tL21lbXBvbGljeS5jLTIxMTAtXFx0XFx0bm9kZSA9IG5leHRfbm9kZV9pbihub2RlLCBwb2xpY3ktXFx1MDAzZW5vZGVzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI0NDU9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQ3MC1cXHRcXHQgICAgcG9sLVxcdTAwM2Vtb2RlICE9IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXBvbGljeS5jOjI0NzE6XFx0XFx0ICAgICghbm9kZW1hc2sgfHwgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpKSB7XFxubW0vbWVtcG9saWN5LmMtMjQ3Mi1cXHRcXHRcXHQvKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHR3ZWlnaHQgPSBtZS1cXHUwMDNlaWxfd2VpZ2h0O1xcbm1tL21lbXBvbGljeS5jOjI2Njc6XFx0aWYgKHdlaWdodCBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5vZGUsIG5vZGVzKSkge1xcbm1tL21lbXBvbGljeS5jLTI2NjgtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yOTg0PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMwMTUtXFx0Y2FzZSBNUE9MX1BSRUZFUlJFRDpcXG5tbS9tZW1wb2xpY3kuYzozMDE2OlxcdFxcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vbWVtcG9saWN5LmMtMzAxNy1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMwNDAtXFx0XFx0XFx0ICovXFxubW0vbWVtcG9saWN5LmM6MzA0MTpcXHRcXHRcXHRpZiAobm9kZV9pc3NldCh0aGlzbmlkLCBwb2wtXFx1MDAzZW5vZGVzKSlcXG5tbS9tZW1wb2xpY3kuYy0zMDQyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMzA1MC1cXHRcXHQgKi9cXG5tbS9tZW1wb2xpY3kuYzozMDUxOlxcdFxcdGlmIChub2RlX2lzc2V0KGN1cm5pZCwgcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vbWVtcG9saWN5LmMtMzA1Mi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMzQ3PXN0YXRpYyBpbnQgZG9fcGFnZXNfbW92ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbm9kZW1hc2tfdCB0YXNrX25vZGVzLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIzODYtXFx0XFx0ZXJyID0gLUVBQ0NFUztcXG5tbS9taWdyYXRlLmM6MjM4NzpcXHRcXHRpZiAoIW5vZGVfaXNzZXQobm9kZSwgdGFza19ub2RlcykpXFxubW0vbWlncmF0ZS5jLTIzODgtXFx0XFx0XFx0Z290byBvdXRfZmx1c2g7XFxuLS1cXG5tbS9tbXpvbmUuYz00Nj1zdGF0aWMgaW5saW5lIGludCB6cmVmX2luX25vZGVtYXNrKHN0cnVjdCB6b25lcmVmICp6cmVmLCBub2RlbWFza190ICpub2RlcylcXG4tLVxcbm1tL21tem9uZS5jLTQ4LSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL21tem9uZS5jOjQ5OlxcdHJldHVybiBub2RlX2lzc2V0KHpvbmVsaXN0X25vZGVfaWR4KHpyZWYpLCAqbm9kZXMpO1xcbm1tL21tem9uZS5jLTUwLSNlbHNlXFxuLS1cXG5tbS9udW1hX21lbWJsa3MuYz0zMzU9c3RhdGljIHZvaWQgX19pbml0IG51bWFfY2xlYXJfa2VybmVsX25vZGVfaG90cGx1Zyh2b2lkKVxcbi0tXFxubW0vbnVtYV9tZW1ibGtzLmMtMzkwLVxcbm1tL251bWFfbWVtYmxrcy5jOjM5MTpcXHRcXHRpZiAoIW5vZGVfaXNzZXQobWItXFx1MDAzZW5pZCwgcmVzZXJ2ZWRfbm9kZW1hc2spKVxcbm1tL251bWFfbWVtYmxrcy5jLTM5Mi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01NjcwPWludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01Njc5LVxcdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1NjgwOlxcdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFxcdTAwMjZcXHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTU2ODEtXFx0XFx0bm9kZV9zZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01Njg3LVxcdFxcdC8qIERvbid0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1Njg4OlxcdFxcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXFxubW0vcGFnZV9hbGxvYy5jLTU2ODktXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9zaG93X21lbS5jPTExOT1zdGF0aWMgYm9vbCBzaG93X21lbV9ub2RlX3NraXAodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Nob3dfbWVtLmMtMTMxLVxcbm1tL3Nob3dfbWVtLmM6MTMyOlxcdHJldHVybiAhbm9kZV9pc3NldChuaWQsICpub2RlbWFzayk7XFxubW0vc2hvd19tZW0uYy0xMzMtfVxcbi0tXFxubW0vc2x1Yi5jPTQxMjM9c3RhdGljIGludCBzbHViX2NwdV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubW0vc2x1Yi5jLTQxMzItXFx0ICovXFxubW0vc2x1Yi5jOjQxMzM6XFx0aWYgKG5vZGVfaXNzZXQobmlkLCBzbGFiX2Jhcm5fbm9kZXMpKVxcbm1tL3NsdWIuYy00MTM0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vc2x1Yi5jLTQxMzctXFxubW0vc2x1Yi5jOjQxMzg6XFx0aWYgKG5vZGVfaXNzZXQobmlkLCBzbGFiX2Jhcm5fbm9kZXMpKVxcbm1tL3NsdWIuYy00MTM5LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vc2x1Yi5jPTQ1Mjk9c3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDU0OC1cXHRcXHRcXHRpZiAobXBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcXG5tbS9zbHViLmM6NDU0OTpcXHRcXHRcXHRcXHRcXHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vc2x1Yi5jLTQ1NTAtXFx0XFx0XFx0XFx0bm9kZSA9IG1lbXBvbGljeV9zbGFiX25vZGUoKTtcXG4tLVxcbm1tL3NsdWIuYz00NzU2PXZvaWQgKmFsbG9jX2Zyb21fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXFxuLS1cXG5tbS9zbHViLmMtNDc3Ni1cXHRcXHRcXHRpZiAobXBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcXG5tbS9zbHViLmM6NDc3NzpcXHRcXHRcXHRcXHRcXHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVxcdTAwM2Vub2RlcykpXFxubW0vc2x1Yi5jLTQ3NzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjU0OjA5LjA3OTk3MjU4NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUyMTA1NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRGVwZW5kZW5jaWVzIG9mIGBub2RlX2lzc2V0YCBpbiBLZXJuZWwgQ29kZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYG5vZGVfaXNzZXRgIGlzIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L25vZGVtYXNrLmhgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJbnRlcmVzdGluZyB0aGF0IGl0J3MgZGVmaW5lZCB0aGVyZSwgYmVjYXVzZSBJIGFsd2F5cyBhc3N1bWVkIHRoYXQgaXQgd2FzIGluaGVyZW50bHkgdGllZCB0byBOVU1BLiBJdCBzZWVtcyBgQ09ORklHX05VTUFgIGlzbid0IGEgKnN0cmljdCogcmVxdWlyZW1lbnQgZm9yIGl0cyBleGlzdGVuY2UsIGJ1dCBpdCdzIGNsZWFyIHRoYXQgaXQgdXNlcyBgbm9kZW1hc2tfdGAgYW5kIGBub2RlX3N0YXRlc2AuIEhtbSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgYG5vZGVfc3RhdGVzYCBpcyBhbHNvIGRlZmluZWQgaW4gYG5vZGVtYXNrLmhgLiBUaGlzIGlzIG1ha2luZyBtZSByZWNvbnNpZGVyIHNvbWUgb2YgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYENPTkZJR19OVU1BYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBgaHVnZXRsYl9jbWEuY2AgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCdzIGRpZyBpbnRvIGBtbS9odWdldGxiX2NtYS5jYCBhbmQgc2VhcmNoIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTlVNQWAuIFRoYXQgc2hvdWxkIGNsZWFyIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDoxMy40MzIwODEwNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTUyOTk2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05VTUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYl9jbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MTQuMDAzNjIwNTAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzcyNDU5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGh1Z2V0bGJfY21hLmMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgYGh1Z2V0bGJfY21hLmNgIGFuZCBpdHMgdXNlIG9mIGBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXWAuIEkga25vdyB0aGF0IGlmIGAhQ09ORklHX05VTUFgLCB0aGVuIGBNQVhfTlVNTk9ERVNgIGlzIHNldCB0byAxLiBUaGlzIGlzIGtleS4gU28sIHRoZSBjb2RlICpzaG91bGQqIGZ1bmN0aW9uIGV2ZW4gd2l0aG91dCBOVU1BIGVuYWJsZWQuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBOb3csIG15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgY29kZSdzIG9wZXJhdGlvbmFsIHJlcXVpcmVtZW50cyBhcmUganVzdCBgQ01BYCBhbmQgYEhVR0VUTEJGU2AuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuXG5cbkJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGJvb2xlYW4gY29uZmlnIG9wdGlvbnMsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGUgY2hlY2suIExldCdzIGhlYWQgb3ZlciB0byBgbW0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBwcmVjaXNlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX0NNQWAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRpb25zaGlwcyBoZXJlIGlzIHZpdGFsIGZvciBjb3JyZWN0bHkgaW50ZXJwcmV0aW5nIGl0cyBvcGVyYXRpb25hbCByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTM2LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjU0OjE3LjY4MDg2OTA4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNTA1MzQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9kbWEvS2NvbmZpZz0xNzM9Y29uZmlnIERNQV9OVU1BX0NNQVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTE4NS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTg2OmNvbmZpZyBDTUFfU0laRV9QRVJOVU1BXFxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJEZWZhdWx0IENNQSBhcmVhIHBlciBOVU1BIG5vZGVcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MTk2PWNvbW1lbnQgXFxcIkRlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMTk3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTktXFx0aW50IFxcXCJTaXplIGluIE1lZ2EgQnl0ZXNcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMDk6Y29uZmlnIENNQV9TSVpFX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjEwLVxcdGludCBcXFwiUGVyY2VudGFnZSBvZiB0b3RhbCBtZW1vcnlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjIwPWNob2ljZVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjI0OmNvbmZpZyBDTUFfU0laRV9TRUxfTUJZVEVTXFxua2VybmVsL2RtYS9LY29uZmlnLTIyNS1cXHRib29sIFxcXCJVc2UgbWVnYSBieXRlcyB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNzpjb25maWcgQ01BX1NJWkVfU0VMX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjI4LVxcdGJvb2wgXFxcIlVzZSBwZXJjZW50YWdlIHZhbHVlIG9ubHlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjMwOmNvbmZpZyBDTUFfU0laRV9TRUxfTUlOXFxua2VybmVsL2RtYS9LY29uZmlnLTIzMS1cXHRib29sIFxcXCJVc2UgbG93ZXIgdmFsdWUgKG1pbmltdW0pXFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMzpjb25maWcgQ01BX1NJWkVfU0VMX01BWFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzQtXFx0Ym9vbCBcXFwiVXNlIGhpZ2hlciB2YWx1ZSAobWF4aW11bSlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjM2PWVuZGNob2ljZVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzctXFxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzktXFx0aW50IFxcXCJNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4tLVxcbm1tL0tjb25maWctMTA2Ni1cXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxcbm1tL0tjb25maWctMTA2OC1cXHRib29sIFxcXCJDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODEtXFxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xcbm1tL0tjb25maWctMTA4My1cXHRib29sIFxcXCJDTUEgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODctXFxubW0vS2NvbmZpZzoxMDg4OmNvbmZpZyBDTUFfU1lTRlNcXG5tbS9LY29uZmlnLTEwODktXFx0Ym9vbCBcXFwiQ01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDk0LVxcbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXFxubW0vS2NvbmZpZy0xMDk2LVxcdGludCBcXFwiTWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDoxOS44ODU5MzA2OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NzEwMzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG5vdy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYENNQWAg4oCTIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgY29uZmlnIG9wdGlvbiBpbiB0aGlzIHNjZW5hcmlvLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBteSBleHBlcmllbmNlIGlzIGtpY2tpbmcgaW4sIGFuZCBJIGhhdmUgdG8gYXNrIG15c2VsZiDigJMgd2hhdCdzIHRoZSByZWxhdGlvbnNoaXAsIGlmIGFueSwgYmV0d2VlbiBgQ01BYCBhbmQgYEhVR0VUTEJGU2A/IEFyZSB0aGV5IG9ydGhvZ29uYWw/IERvZXMgZW5hYmxpbmcgb25lIGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3RoZXI/IEFyZSB0aGVyZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBoZXJlPyBUaGlzIHJlbGF0aW9uc2hpcCByZXF1aXJlcyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0LCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MjIuOTMzMDM2NDUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA3OTY4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MjUuMzQxMDEyNjMxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDgxODgwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUgZm9yIEh1Z2VUTEIgYW5kIENNQSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGtleSBwbGF5ZXIgaGVyZSBzZWVtcyB0byBiZSBgSFVHRVRMQkZTYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGNvbmZpZyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gV2FpdCwgaGFuZyBvbi4uLiBJIHJlbWVtYmVyIGBodWdldGxiX2NtYS5jYCBnZXRzIGNvbXBpbGVkICpjb25kaXRpb25hbGx5Kiwgc3BlY2lmaWNhbGx5IHdoZW4gYm90aCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgZW5hYmxlZC4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCwgaGlnaGxpZ2h0aW5nIHRoZWlyIGludGVycGxheS4gSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgYmUgbWlzc2luZz8gVGltZSB0byBiZSB0aG9yb3VnaC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gR290dGEgYmUgc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgZmxhZ3Mgb3Igb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMzOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDAwOjU0OjI4Ljg0OTIwNDQyN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NzczMzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwNzg6XFx0aHVnZXRsYl9jbWFfb25seT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVxcdFxcdFxcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM4LSNpZmRlZiBDT05GSUdfQ01BXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM5OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTQwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jPTIwMT1hcmNoX2luaXRjYWxsKGh1Z2V0bGJwYWdlX2luaXQpO1xcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwMi1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYzoyMDM6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMtMjA0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00NDg9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTAtXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjQ1MTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUyLXtcXG4tLVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jPTIyNT1ib29sIF9faW5pdCBhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzQtXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MjM1OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTIzNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTQyPWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ1LVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM6NDY6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNzY9dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3Ny1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNzg6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjc5LVxcbi0tXFxubW0vTWFrZWZpbGU9ODI9aWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7XFxubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgYm9vbCBodWdldGxiX2NtYV9vbmx5IF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9odWdldGxiX2NtYS5jLTE5LXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0xMzI9ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hXFxcIiwgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzMtXFxubW0vaHVnZXRsYl9jbWEuYzoxMzQ6c3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYV9vbmx5KGNoYXIgKnApXFxubW0vaHVnZXRsYl9jbWEuYy0xMzUte1xcbm1tL2h1Z2V0bGJfY21hLmM6MTM2OlxcdHJldHVybiBrc3RydG9ib29sKHAsIFxcdTAwMjZodWdldGxiX2NtYV9vbmx5KTtcXG5tbS9odWdldGxiX2NtYS5jLTEzNy19XFxubW0vaHVnZXRsYl9jbWEuYy0xMzgtXFxubW0vaHVnZXRsYl9jbWEuYzoxMzk6ZWFybHlfcGFyYW0oXFxcImh1Z2V0bGJfY21hX29ubHlcXFwiLCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTQwLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTQxOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTQyLXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MTQ2PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTU0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTU1OlxcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTU2LVxcdGlmICghb3JkZXIpIHtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjU5PWJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yNjAte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjYxOlxcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjYyLX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjY5PXZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNzEtXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmM6MjcyOlxcdFxcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcXG5tbS9odWdldGxiX2NtYS5jLTI3My19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI3NT1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNzktXFxubW0vaHVnZXRsYl9jbWEuYzoyODA6XFx0cmV0dXJuIGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xcbm1tL2h1Z2V0bGJfY21hLmMtMjgxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6MzEuNzE2OTQ1NDI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjA2NjEzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBHb29kLCBnb29kLCB3ZSd2ZSBnb3QgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgY29uZmlybWVkLiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpcyBhY3R1YWxseSBhY2Nlc3NpYmxlLiBJcyBpdCBleHBvcnRlZCwgb3IgaXMgaXQgYnVyaWVkIGF3YXkgYXMgYSBzdGF0aWMgZnVuY3Rpb24/IEFscmlnaHQsIGNoZWNraW5nIHRoZSBzb3VyY2XigKYgTm9wZSwgaXQncyBub3Qgc3RhdGljLiBJdCdzIGRlY2xhcmVkIGluIGBtbS9odWdldGxiX2NtYS5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIFBlcmZlY3QhIFRoYXQgbWFrZXMgaXQgYW4gZXhjZWxsZW50IGZvY2FsIHBvaW50LlxuXG5XYWl0LCB0aG91Z2jigKYgYSBxdWljayBzYW5pdHkgY2hlY2vigKYgaXQncyBvbmx5IGNhbGxlZCBieSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggKmlzKiBzdGF0aWMuIEhtbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXNuJ3QgaW5saW5pbmcgdGhhdCwgYmVjYXVzZSB0aGF0IHdvdWxkIGNoYW5nZSB0aGluZ3MuIEhvbGQgb24uIE9rYXksIHRoZSBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIGl0ICpjb3VsZCogYmUgaW5saW5lZC4gQnV0IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGl0c2VsZiBpcyAqbm90KiBzdGF0aWMsIHNvIGl0IHdvbid0IGJlIGlubGluZWQgYWNyb3NzIHRyYW5zbGF0aW9uIHVuaXRzIHVubGVzcyB3ZSdyZSB1c2luZyBMaW5rIFRpbWUgT3B0aW1pemF0aW9uIChMVE8pLiBBbmQgdGhhdCBtZWFucyB0aGF0IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0aWxsIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG5cbk9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBnb3RjaGFzIHRvIGNvbnNpZGVyIGhlcmUuIFdlIGRvIG5lZWQgdG8gbG9vayBhdCBgQ09ORklHX05VTUFgLCBzaW5jZSB0aGUgY29kZSB1c2VzIGBub2RlbWFza2AuIExldCBtZSBjaGVjayBgbm9kZV9zdGF0ZXNgLiBBbHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE5NiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDozOC41Mzc2MDk1MzFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjAyNjg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9zdGF0ZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MjI0PWNwdV9vbmxpbmVfbWFzayB1c2luZyBhIENQVSBob3RwbHVnIG5vdGlmaWVyLCBhbmQgdGhlIG1lbXMgZmlsZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0OjIyNTphdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLS1pLmUuLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0LTIyNi1ub2RlcyB3aXRoIG1lbW9yeS0tdXNpbmcgdGhlIGNwdXNldF90cmFja19vbmxpbmVfbm9kZXMoKSBob29rLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdD00OD1ub2RlX29ubGluZV9tYXBcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAvdm1jb3JlaW5mby5yc3QtNTAtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZHVtcC92bWNvcmVpbmZvLnJzdDo1MTpBbiBhcnJheSBub2RlX3N0YXRlc1tOX09OTElORV0gd2hpY2ggcmVwcmVzZW50cyB0aGUgc2V0IG9mIG9ubGluZSBub2Rlc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAvdm1jb3JlaW5mby5yc3QtNTItaW4gYSBzeXN0ZW0sIG9uZSBiaXQgcG9zaXRpb24gcGVyIG5vZGUgbnVtYmVyLiBVc2VkIHRvIGtlZXAgdHJhY2sgb2ZcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0xNTc9QWxvbmcgd2l0aCB0aGUgbm9kZSBzdHJ1Y3R1cmVzLCBrZXJuZWwgbWFpbnRhaW5zIGFuIGFycmF5IG9mIGBgbm9kZW1hc2tfdGBgXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE1ODpiaXRtYXNrcyBjYWxsZWQgYGBub2RlX3N0YXRlc2BgLiBFYWNoIGJpdG1hc2sgaW4gdGhpcyBhcnJheSByZXByZXNlbnRzIGEgc2V0IG9mXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE1OTpub2RlcyB3aXRoIHBhcnRpY3VsYXIgcHJvcGVydGllcyBhcyBkZWZpbmVkIGJ5IGBgZW51bSBub2RlX3N0YXRlc2BgOlxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNjAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MTc3PUZvciBlYWNoIG5vZGUgdGhhdCBoYXMgYSBwcm9wZXJ0eSBkZXNjcmliZWQgYWJvdmUsIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTc4Om5vZGUgSUQgaW4gdGhlIGBgbm9kZV9zdGF0ZXNbXFx1MDAzY3Byb3BlcnR5XFx1MDAzZV1gYCBiaXRtYXNrIGlzIHNldC5cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTc5LVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD0xODA9Rm9yIGV4YW1wbGUsIGZvciBub2RlIDIgd2l0aCBub3JtYWwgbWVtb3J5IGFuZCBDUFVzLCBiaXQgMiB3aWxsIGJlIHNldCBpbiA6OlxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xODEtXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4MjogIG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4MzogIG5vZGVfc3RhdGVzW05fT05MSU5FXVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxODQ6ICBub2RlX3N0YXRlc1tOX05PUk1BTF9NRU1PUlldXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4NTogIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE4NjogIG5vZGVfc3RhdGVzW05fTUVNT1JZXVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxODc6ICBub2RlX3N0YXRlc1tOX0NQVV1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTg4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdD05NT1SQU3lubPlnYfliIbphY3lnKjkuKTkuKroioLngrnkuIrnmoRhcm02NOacuuWZqOS4iu+8jOS9v+eUqCBgYG1vdmFibGVjb3JlPTgwJWBgIOWPguaVsFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0xNDMtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNDQ66Zmk5LqG6IqC54K557uT5p6E77yM5YaF5qC46L+Y57u05oqk5LqG5LiA5Liq5ZCN5Li6IGBgbm9kZV9zdGF0ZXNgYCDnmoQgYGBub2RlbWFza190YGBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0NS3kvY3mjqnnoIHmlbDnu4TjgILov5nkuKrmlbDnu4TkuK3nmoTmr4/kuKrkvY3mjqnnoIHku6PooajkuIDnu4TnibnlrprlsZ7mgKfnmoToioLngrnvvIzov5nkupvlsZ7mgKfnlLFcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE0NjpgYGVudW0gbm9kZV9zdGF0ZXNgYCDlrprkuYnvvIzlrprkuYnlpoLkuIvvvJpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE0Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTY2LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MTY3OuWvueS6juWFt+acieS4iui/sOWxnuaAp+eahOavj+S4quiKgueCue+8jGBgbm9kZV9zdGF0ZXNbXFx1MDAzY3Byb3BlcnR5XFx1MDAzZV1gYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTY4LeaOqeeggeS4reWvueW6lOS6juiKgueCuUlE55qE5L2N5Lya6KKr572u5L2N44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTE3MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3MjogIG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzM6ICBub2RlX3N0YXRlc1tOX09OTElORV1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3NDogIG5vZGVfc3RhdGVzW05fTk9STUFMX01FTU9SWV1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3NTogIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoxNzY6ICBub2RlX3N0YXRlc1tOX01FTU9SWV1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjE3NzogIG5vZGVfc3RhdGVzW05fQ1BVXVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMTc4LVxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYz05NDQ9c3RydWN0IG5vZGVfYXR0ciB7XFxuZHJpdmVycy9iYXNlL25vZGUuYy05NDUtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjtcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjk0NjpcXHRlbnVtIG5vZGVfc3RhdGVzIHN0YXRlO1xcbmRyaXZlcnMvYmFzZS9ub2RlLmMtOTQ3LX07XFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTk0OT1zdGF0aWMgc3NpemVfdCBzaG93X25vZGVfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy05NTQtXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJSpwYmxcXFxcblxcXCIsXFxuZHJpdmVycy9iYXNlL25vZGUuYzo5NTU6XFx0XFx0XFx0ICBub2RlbWFza19wcl9hcmdzKFxcdTAwMjZub2RlX3N0YXRlc1tuYS1cXHUwMDNlc3RhdGVdKSk7XFxuZHJpdmVycy9iYXNlL25vZGUuYy05NTYtfVxcbi0tXFxuZnMvbmZzL25mczRfZnMuaD0xODQ9c3RydWN0IG5mczRfc3RhdGUge1xcbmZzL25mcy9uZnM0X2ZzLmgtMTg1LVxcdHN0cnVjdCBsaXN0X2hlYWQgb3Blbl9zdGF0ZXM7XFx0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIHN0YXRlX293bmVyICovXFxuZnMvbmZzL25mczRfZnMuaDoxODY6XFx0c3RydWN0IGxpc3RfaGVhZCBpbm9kZV9zdGF0ZXM7XFx0LyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoZSBzYW1lIGlub2RlICovXFxuZnMvbmZzL25mczRfZnMuaC0xODctXFx0c3RydWN0IGxpc3RfaGVhZCBsb2NrX3N0YXRlcztcXHQvKiBMaXN0IG9mIHN1YnNlcnZpZW50IGxvY2sgc3RhdGVpZHMgKi9cXG4tLVxcbmZzL25mcy9uZnM0c3RhdGUuYz02NDI9X19uZnM0X2ZpbmRfc3RhdGVfYnlvd25lcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqb3duZXIpXFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmMtNjQ2LVxcbmZzL25mcy9uZnM0c3RhdGUuYzo2NDc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhdGUsIFxcdTAwMjZuZnNpLVxcdTAwM2VvcGVuX3N0YXRlcywgaW5vZGVfc3RhdGVzKSB7XFxuZnMvbmZzL25mczRzdGF0ZS5jLTY0OC1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZW93bmVyICE9IG93bmVyKVxcbi0tXFxuZnMvbmZzL25mczRzdGF0ZS5jPTY2NT1uZnM0X2dldF9vcGVuX3N0YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpvd25lcilcXG4tLVxcbmZzL25mcy9uZnM0c3RhdGUuYy02ODQtXFx0XFx0c3RhdGUtXFx1MDAzZWlub2RlID0gaW5vZGU7XFxuZnMvbmZzL25mczRzdGF0ZS5jOjY4NTpcXHRcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNnN0YXRlLVxcdTAwM2Vpbm9kZV9zdGF0ZXMsIFxcdTAwMjZuZnNpLVxcdTAwM2VvcGVuX3N0YXRlcyk7XFxuZnMvbmZzL25mczRzdGF0ZS5jLTY4Ni1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmM9NzAxPXZvaWQgbmZzNF9wdXRfb3Blbl9zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmMtNzA4LVxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuZnMvbmZzL25mczRzdGF0ZS5jOjcwOTpcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnN0YXRlLVxcdTAwM2Vpbm9kZV9zdGF0ZXMpO1xcbmZzL25mcy9uZnM0c3RhdGUuYy03MTAtXFx0bGlzdF9kZWwoXFx1MDAyNnN0YXRlLVxcdTAwM2VvcGVuX3N0YXRlcyk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzM0Mj1zdGF0aWMgc3RydWN0IHBhZ2UgKmNhbl9nYXRoZXJfbnVtYV9zdGF0cyhwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMzNTgtXFx0bmlkID0gcGFnZV90b19uaWQocGFnZSk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMzNTk6XFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM2MC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMzY2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqY2FuX2dhdGhlcl9udW1hX3N0YXRzX3BtZChwbWRfdCBwbWQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzM4My1cXHRuaWQgPSBwYWdlX3RvX25pZChwYWdlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzM4NDpcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMzg1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMTk9c3RhdGljIGlubGluZSBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyMjQ6I2RlZmluZSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTIyNS1zdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCkge31cXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MzAyPXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfbm9kZXNfYWxsb3dlZChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIG5vZGVtYXNrX3QgKm1hc2spXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDMte1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MzA0OlxcdG5vZGVzX2NvcHkoKm1hc2ssIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0zMDUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oPTM2NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19ub2Rlc19mb2xkKG5vZGVtYXNrX3QgKmRzdHAsIGNvbnN0IG5vZGVtYXNrX3QgKm9yaWdwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTM4My0gKi9cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6Mzg0OmVudW0gbm9kZV9zdGF0ZXMge1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC0zODUtXFx0Tl9QT1NTSUJMRSxcXHRcXHQvKiBUaGUgbm9kZSBjb3VsZCBiZWNvbWUgb25saW5lIGF0IHNvbWUgcG9pbnQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDMtXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwNDpleHRlcm4gbm9kZW1hc2tfdCBub2RlX3N0YXRlc1tOUl9OT0RFX1NUQVRFU107XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQwNS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDA2LSNpZiBNQVhfTlVNTk9ERVMgXFx1MDAzZSAxXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQwNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBub2RlX3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MDgte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MDk6XFx0cmV0dXJuIG5vZGVfaXNzZXQobm9kZSwgbm9kZV9zdGF0ZXNbc3RhdGVdKTtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDEwLX1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDExLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5vZGVfc2V0X3N0YXRlKGludCBub2RlLCBlbnVtIG5vZGVfc3RhdGVzIHN0YXRlKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MTMte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTQ6XFx0X19ub2RlX3NldChub2RlLCBcXHUwMDI2bm9kZV9zdGF0ZXNbc3RhdGVdKTtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDE1LX1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDE2LVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0MTc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5vZGVfY2xlYXJfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQxOC17XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQxOTpcXHRfX25vZGVfY2xlYXIobm9kZSwgXFx1MDAyNm5vZGVfc3RhdGVzW3N0YXRlXSk7XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyMC19XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyMS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDIyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IG51bV9ub2RlX3N0YXRlKGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyMy17XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQyNDpcXHRyZXR1cm4gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW3N0YXRlXSk7XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDI3LSNkZWZpbmUgZm9yX2VhY2hfbm9kZV9zdGF0ZShfX25vZGUsIF9fc3RhdGUpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDI4OlxcdGZvcl9lYWNoX25vZGVfbWFzaygoX19ub2RlKSwgbm9kZV9zdGF0ZXNbX19zdGF0ZV0pXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQyOS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDMwOiNkZWZpbmUgZmlyc3Rfb25saW5lX25vZGVcXHRmaXJzdF9ub2RlKG5vZGVfc3RhdGVzW05fT05MSU5FXSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDMxOiNkZWZpbmUgZmlyc3RfbWVtb3J5X25vZGVcXHRmaXJzdF9ub2RlKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDMyLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50IG5leHRfb25saW5lX25vZGUoaW50IG5pZClcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDMzLXtcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg6NDM0OlxcdHJldHVybiBuZXh0X25vZGUobmlkLCBub2RlX3N0YXRlc1tOX09OTElORV0pO1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00MzUtfVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00MzY9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9tZW1vcnlfbm9kZShpbnQgbmlkKVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00Mzcte1xcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0Mzg6XFx0cmV0dXJuIG5leHRfbm9kZShuaWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQzOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmg9NDUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBub2RlX3NldF9vZmZsaW5lKGludCBuaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDU3LVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NTg6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9zdGF0ZShpbnQgbm9kZSwgZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDU5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaC00NjItXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjQ2MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbm9kZV9zZXRfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ2NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDY2LVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0Njc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5vZGVfY2xlYXJfc3RhdGUoaW50IG5vZGUsIGVudW0gbm9kZV9zdGF0ZXMgc3RhdGUpXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTQ2OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDcwLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo0NzE6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbnVtX25vZGVfc3RhdGUoZW51bSBub2RlX3N0YXRlcyBzdGF0ZSlcXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNDcyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaD00OTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbm9kZV9yYW5kb20oY29uc3Qgbm9kZW1hc2tfdCAqbWFza3ApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgtNTAxLVxcbmluY2x1ZGUvbGludXgvbm9kZW1hc2suaDo1MDI6I2RlZmluZSBub2RlX29ubGluZV9tYXAgXFx0bm9kZV9zdGF0ZXNbTl9PTkxJTkVdXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oOjUwMzojZGVmaW5lIG5vZGVfcG9zc2libGVfbWFwIFxcdG5vZGVfc3RhdGVzW05fUE9TU0lCTEVdXFxuaW5jbHVkZS9saW51eC9ub2RlbWFzay5oLTUwNC1cXG4tLVxcbmluaXQvbWFpbi5jPTE2Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGtlcm5lbF9pbml0X2ZyZWVhYmxlKHZvaWQpXFxuLS1cXG5pbml0L21haW4uYy0xNjM2LVxcdCAqL1xcbmluaXQvbWFpbi5jOjE2Mzc6XFx0c2V0X21lbXNfYWxsb3dlZChub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbmluaXQvbWFpbi5jLTE2MzgtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQ2OT1zdGF0aWMgdm9pZCBndWFyYW50ZWVfYWN0aXZlX2NwdXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQ5NC0gKiBPbmUgd2F5IG9yIGFub3RoZXIsIHdlIGd1YXJhbnRlZSB0byByZXR1cm4gc29tZSBub24tZW1wdHkgc3Vic2V0XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0OTU6ICogb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLlxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDk2LSAqXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQ5OT1zdGF0aWMgdm9pZCBndWFyYW50ZWVfb25saW5lX21lbXMoc3RydWN0IGNwdXNldCAqY3MsIG5vZGVtYXNrX3QgKnBtYXNrKVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNTAwLXtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjUwMTpcXHR3aGlsZSAoIW5vZGVzX2FuZCgqcG1hc2ssIGNzLVxcdTAwM2VlZmZlY3RpdmVfbWVtcywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSlcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTUwMi1cXHRcXHRjcyA9IHBhcmVudF9jcyhjcyk7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTM4NzA9c3RhdGljIHZvaWQgY3B1c2V0X2hhbmRsZV9ob3RwbHVnKHZvaWQpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM4ODYtXFx0Y3B1bWFza19jb3B5KFxcdTAwMjZuZXdfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjM4ODc6XFx0bmV3X21lbXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zODg4LVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0zOTc3PXZvaWQgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cyh2b2lkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zOTg3LS8qXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozOTg4OiAqIEtlZXAgdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgdHJhY2tpbmcgbm9kZV9zdGF0ZXNbTl9NRU1PUlldLlxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6Mzk4OTogKiBDYWxsIHRoaXMgcm91dGluZSBhbnl0aW1lIGFmdGVyIG5vZGVfc3RhdGVzW05fTUVNT1JZXSBjaGFuZ2VzLlxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzk5MC0gKiBTZWUgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cygpIGZvciBDUFUgaG90cGx1ZyBoYW5kbGluZy5cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDAwND12b2lkIF9faW5pdCBjcHVzZXRfaW5pdF9zbXAodm9pZClcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDAxMy1cXHRjcHVtYXNrX2NvcHkodG9wX2NwdXNldC5lZmZlY3RpdmVfY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQwMTQ6XFx0dG9wX2NwdXNldC5lZmZlY3RpdmVfbWVtcyA9IG5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQwMTUtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTQxMzI9dm9pZCBfX2luaXQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZClcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDE0Mi0gKiBhdHRhY2hlZCB0byB0aGUgc3BlY2lmaWVkIEB0c2suICBHdWFyYW50ZWVkIHRvIHJldHVybiBzb21lIG5vbi1lbXB0eVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDE0MzogKiBzdWJzZXQgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBldmVuIGlmIHRoaXMgbWVhbnMgZ29pbmcgb3V0c2lkZSB0aGVcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQxNDQtICogdGFza3MgY3B1c2V0Llxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00MjI2PWJvb2wgY3B1c2V0X2N1cnJlbnRfbm9kZV9hbGxvd2VkKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDI2NS0gKiBSZXR1cm5zIGVmZmVjdGl2ZV9tZW1zIG1hc2sgZnJvbSBhIGNncm91cCBjcHVzZXQgaWYgaXQgaXMgY2dyb3VwIHYyIGFuZFxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDI2NjogKiBoYXMgY3B1c2V0IHN1YnN5cy4gT3RoZXJ3aXNlLCByZXR1cm5zIG5vZGVfc3RhdGVzW05fTUVNT1JZXS5cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyNjctICpcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDI3OD12b2lkIGNwdXNldF9ub2Rlc19hbGxvd2VkKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgbm9kZW1hc2tfdCAqbWFzaylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDI4OC1cXHRpZiAoIWNncm91cCB8fCAhY3B1c2V0X3YyKCkpIHtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjQyODk6XFx0XFx0bm9kZXNfY29weSgqbWFzaywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQyOTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjk0LVxcdGlmICghY3NzKSB7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0Mjk1OlxcdFxcdG5vZGVzX2NvcHkoKm1hc2ssIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00Mjk2LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9rdGhyZWFkLmM9Nzg3PWludCBrdGhyZWFkZCh2b2lkICp1bnVzZWQpXFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTc5NC1cXHRpZ25vcmVfc2lnbmFscyh0c2spO1xcbmtlcm5lbC9rdGhyZWFkLmM6Nzk1OlxcdHNldF9tZW1zX2FsbG93ZWQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5rZXJuZWwva3RocmVhZC5jLTc5Ni1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjcxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4MS1cXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODI6XFx0a2hvX3NjcmF0Y2hfY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgKyAyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjgzLVxcdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcXG4tLVxcbmtlcm5lbC9wYWRhdGEuYz00NDQ9dm9pZCBfX2luaXQgcGFkYXRhX2RvX211bHRpdGhyZWFkZWQoc3RydWN0IHBhZGF0YV9tdF9qb2IgKmpvYilcXG4tLVxcbmtlcm5lbC9wYWRhdGEuYy00OTAtXFx0XFx0XFx0ZG8ge1xcbmtlcm5lbC9wYWRhdGEuYzo0OTE6XFx0XFx0XFx0XFx0bmlkID0gbmV4dF9ub2RlX2luKG9sZF9ub2RlLCBub2RlX3N0YXRlc1tOX0NQVV0pO1xcbmtlcm5lbC9wYWRhdGEuYy00OTItXFx0XFx0XFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcXHUwMDI2bGFzdF91c2VkX25pZCwgXFx1MDAyNm9sZF9ub2RlLCBuaWQpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1MD1zdGF0aWMgczMyIHBpY2tfaWRsZV9jcHVfZnJvbV9vbmxpbmVfbm9kZXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXNfYWxsb3dlZCwgaW50IG5vZGUsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE2MS1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNjI6XFx0bm9kZXNfY29weSgqdW52aXNpdGVkLCBub2RlX3N0YXRlc1tOX09OTElORV0pO1xcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE2My1cXHRub2RlX2NsZWFyKG5vZGUsICp1bnZpc2l0ZWQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0zNTU2PXN0YXRpYyBpbnQgcHJlZmVycmVkX2dyb3VwX25pZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1OTQtXFx0ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzozNTk1OlxcdG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9DUFVdO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzU5Ni1cXHRmb3IgKGRpc3QgPSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsgZGlzdCBcXHUwMDNlIExPQ0FMX0RJU1RBTkNFOyBkaXN0LS0pIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMzUwPXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIzNzktXFxubW0vaHVnZXRsYi5jOjIzODA6XFx0XFx0Zm9saW8gPSByZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKGgsIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIDEpO1xcbm1tL2h1Z2V0bGIuYy0yMzgxLVxcdFxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmM9MzM3Mj1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTMzODYtXFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmM6MzM4NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5tbS9odWdldGxiLmMtMzM4OC1cXHRcXHRcXHRpZiAoIWZvbGlvIFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZmb2xpb19saXN0KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vaHVnZXRsYi5jLTMzOTItXFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmM6MzM5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5tbS9odWdldGxiLmMtMzM5NC1cXHRcXHRcXHR9XFxuLS1cXG5tbS9odWdldGxiLmM9MzQ0Mj1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9wYWdlc19hbGxvY19ib290X25vZGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDYwLVxcdFxcdH1cXG5tbS9odWdldGxiLmM6MzQ2MTpcXHRcXHRmb2xpbyA9IGFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhoLCBcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLFxcbm1tL2h1Z2V0bGIuYy0zNDYyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX2FsbG9jX25vcmV0cnksIFxcdTAwMjZuZXh0X25vZGUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQwNDc9c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDYyLVxcdFxcdFxcdFxcdGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KFxcdTAwMjZub2Rlc19hbGxvd2VkKSkpXFxubW0vaHVnZXRsYi5jOjQwNjM6XFx0XFx0XFx0bl9tYXNrID0gXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5tbS9odWdldGxiLmMtNDA2NC1cXHRcXHRlbHNlXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI3PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTM3LVxcdGlmICghbm9kZW1hc2spXFxubW0vaHVnZXRsYl9jbWEuYzozODpcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxubW0vaHVnZXRsYl9jbWEuYy0zOS1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0xODE9c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTE5OS1cXHR9IGVsc2Uge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMDA6XFx0XFx0bl9tYXNrID0gXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjAxLVxcdH1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTQyNT1zdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNDU3LVxcdFxcdCAqL1xcbm1tL21lbW9yeS10aWVycy5jOjQ1ODpcXHRcXHRub2Rlc19hbmRub3QodGllcl9ub2Rlcywgbm9kZV9zdGF0ZXNbTl9NRU1PUlldLCB0aWVyX25vZGVzKTtcXG5tbS9tZW1vcnktdGllcnMuYy00NTktXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00ODgtXFx0XFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xcbm1tL21lbW9yeS10aWVycy5jOjQ4OTpcXHRcXHRpZiAobm9kZXNfYW5kKHRpZXJfbm9kZXMsIG5vZGVfc3RhdGVzW05fQ1BVXSwgdGllcl9ub2RlcykpIHtcXG5tbS9tZW1vcnktdGllcnMuYy00OTAtXFx0XFx0XFx0LypcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTUwNC1cXHQgKi9cXG5tbS9tZW1vcnktdGllcnMuYzo1MDU6XFx0bG93ZXJfdGllciA9IG5vZGVfc3RhdGVzW05fTUVNT1JZXTtcXG5tbS9tZW1vcnktdGllcnMuYy01MDYtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcXHUwMDI2bWVtb3J5X3RpZXJzLCBsaXN0KSB7XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz05MDY9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtOTMwLVxcdC8qIFJlY29yZCBub2RlcyB3aXRoIG1lbW9yeSBhbmQgQ1BVIHRvIHNldCBkZWZhdWx0IERSQU0gcGVyZm9ybWFuY2UuICovXFxubW0vbWVtb3J5LXRpZXJzLmM6OTMxOlxcdG5vZGVzX2FuZChkZWZhdWx0X2RyYW1fbm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSxcXG5tbS9tZW1vcnktdGllcnMuYzo5MzI6XFx0XFx0ICBub2RlX3N0YXRlc1tOX0NQVV0pO1xcbm1tL21lbW9yeS10aWVycy5jLTkzMy1cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc5Mz1zdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4NDQtXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZzb3VyY2UpKSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxODQ1OlxcdFxcdG5vZGVtYXNrX3Qgbm1hc2sgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODQ2LVxcdFxcdHN0cnVjdCBtaWdyYXRpb25fdGFyZ2V0X2NvbnRyb2wgbXRjID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmM9NDA0PXN0YXRpYyBpbnQgbXBvbF9zZXRfbm9kZW1hc2soc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNDE4LVxcdG5vZGVzX2FuZChuc2MtXFx1MDAzZW1hc2sxLFxcbm1tL21lbXBvbGljeS5jOjQxOTpcXHRcXHQgIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5tbS9tZW1wb2xpY3kuYy00MjAtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDgwPWJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA4OS1cXHQgKlxcbm1tL21lbXBvbGljeS5jOjIwOTA6XFx0ICogcG9saWN5LVxcdTAwM2Vub2RlcyBpcyBpbnRlcnNlY3Qgd2l0aCBub2RlX3N0YXRlc1tOX01FTU9SWV0uXFxubW0vbWVtcG9saWN5LmMtMjA5MS1cXHQgKiBzbyBpZiB0aGUgZm9sbG93aW5nIHRlc3QgZmFpbHMsIGl0IGltcGxpZXNcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwOTMtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MjA5NDpcXHRpZiAoIW5vZGVzX2ludGVyc2VjdHMocG9saWN5LVxcdTAwM2Vub2Rlcywgbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pKVxcbm1tL21lbXBvbGljeS5jLTIwOTUtXFx0XFx0ZHluYW1pY19wb2xpY3lfem9uZSA9IFpPTkVfTU9WQUJMRTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM0MTk9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNDM1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbXBvbGljeS5jOjM0MzY6XFx0XFx0aWYgKCFub2Rlc19zdWJzZXQobm9kZXMsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpXFxubW0vbWVtcG9saWN5LmMtMzQzNy1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0NjctXFx0XFx0aWYgKCFub2RlbGlzdClcXG5tbS9tZW1wb2xpY3kuYzozNDY4OlxcdFxcdFxcdG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbm1tL21lbXBvbGljeS5jLTM0NjktXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9tbV9pbml0LmM9MzY4PXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3pvbmVfbW92YWJsZV9wZm5zX2Zvcl9ub2Rlcyh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTM3My1cXHQvKiBzYXZlIHRoZSBzdGF0ZSBiZWZvcmUgYm9ycm93IHRoZSBub2RlbWFzayAqL1xcbm1tL21tX2luaXQuYzozNzQ6XFx0bm9kZW1hc2tfdCBzYXZlZF9ub2RlX3N0YXRlID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbm1tL21tX2luaXQuYy0zNzUtXFx0dW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzID0gZWFybHlfY2FsY3VsYXRlX3RvdGFscGFnZXMoKTtcXG5tbS9tbV9pbml0LmM6Mzc2OlxcdGludCB1c2FibGVfbm9kZXMgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5tbS9tbV9pbml0LmMtMzc3LVxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7XFxuLS1cXG5tbS9tbV9pbml0LmMtNTg4LVxcdC8qIHJlc3RvcmUgdGhlIG5vZGVfc3RhdGUgKi9cXG5tbS9tbV9pbml0LmM6NTg5OlxcdG5vZGVfc3RhdGVzW05fTUVNT1JZXSA9IHNhdmVkX25vZGVfc3RhdGU7XFxubW0vbW1faW5pdC5jLTU5MC19XFxuLS1cXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0yODMtXFx0aWYgKG9jLVxcdTAwM2Vub2RlbWFzayBcXHUwMDI2XFx1MDAyNlxcbm1tL29vbV9raWxsLmM6Mjg0OlxcdCAgICAhbm9kZXNfc3Vic2V0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgKm9jLVxcdTAwM2Vub2RlbWFzaykpIHtcXG5tbS9vb21fa2lsbC5jLTI4NS1cXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTg1PUVYUE9SVF9TWU1CT0wobGF0ZW50X2VudHJvcHkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE5MC0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6MTkxOm5vZGVtYXNrX3Qgbm9kZV9zdGF0ZXNbTlJfTk9ERV9TVEFURVNdIF9fcmVhZF9tb3N0bHkgPSB7XFxubW0vcGFnZV9hbGxvYy5jLTE5Mi1cXHRbTl9QT1NTSUJMRV0gPSBOT0RFX01BU0tfQUxMLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIwMi19O1xcbm1tL3BhZ2VfYWxsb2MuYzoyMDM6RVhQT1JUX1NZTUJPTChub2RlX3N0YXRlcyk7XFxubW0vcGFnZV9hbGxvYy5jLTIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDA6NTQ6NDAuODk3ODgyNjMxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTY3NzkxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBSZWZpbmVtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBJIGNhbiBzYWZlbHkgaWdub3JlIGBDT05GSUdfTlVNQWAgaGVyZSDigJMgYG5vZGVfc3RhdGVzYCBpcyBleHBvc2VkIHJlZ2FyZGxlc3MuIEdvb2QuIFRoZSBpbml0aWFsIGlkZWEgb2YgbmVlZGluZyBgQ01BYCBhbmQgYEhVR0VUTEJGU2AgaXMgbG9va2luZyBzb2xpZC5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHJlZmluZSB0aGlzLiBUaGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IGNvbXBpbGVkICpvbmx5KiBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICphbmQqIGBDT05GSUdfQ09OVElHX0FMTE9DYCBhcmUgYm90aCBlbmFibGVkLiBOb3csIGBDT05GSUdfQ09OVElHX0FMTE9DYCBpcyBhdXRvLXNlbGVjdGVkIGJ5IGBDT05GSUdfQ01BYCwgc28gdGhhdCdzIHRha2VuIGNhcmUgb2YuIEFuZCwgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZSwgc28gaXTigJlzIGxpa2VseSBoYW5kbGVkIGltcGxpY2l0bHkgYnkgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFNvLCBwcmFjdGljYWxseSBzcGVha2luZywgSSAqZG9uJ3QqIG5lZWQgdG8gbGlzdCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiBKdXN0IGBDTUFgIGFuZCBgSFVHRVRMQkZTYCBzZWVtIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuTGV0J3MgZG8gYSBxdWljayBkZXBlbmRlbmN5IGNoZWNrLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBgQ09ORklHX0NNQWAgcmVsaWVzIG9uIGBNTVVgLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCBgQ09ORklHX0hVR0VUTEJGU2AgbmVlZHMgYFNZU0ZTYCBhbmQgYEhVR0VUTEJfUEFHRWAsIGFuZCBgSFVHRVRMQl9QQUdFYCBhbHNvIGRlcGVuZHMgb24gYE1NVWAuIFRoZSBgTU1VYCBkZXBlbmRlbmN5IGlzIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gU28sIGFmdGVyIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgb3JpZ2luYWwgaWRlYSBob2xkczogYENNQWAgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgb25seSBjb25maWdzIHRoYXQgSSBuZWVkLlxuXG5Pa2F5LCBsZXQncyB3cml0ZSBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBJIGhhdmUgaWRlbnRpZmllZC5cblxuTXkgYW5hbHlzaXMgZ2l2ZXMgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgXG5gRm9jdXNTeW1ib2xzOiBbXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIl1gXG5gRW5hYmxlQ29uZmlnczogW1wiQ01BXCIsIFwiSFVHRVRMQkZTXCJdYFxuYFJlYXNvbmluZzogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvIHdoZW4gbm9kZW1hc2sgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoaHVnZXRsYiBDTUEpIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlcGFnZXMuXCJgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjQxLCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwMDo1NDo0OC4wNTQ2NjUzMDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkyNzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8gd2hlbiBub2RlbWFzayBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChodWdldGxiIENNQSkgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2VwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyB3aGVuIG5vZGVtYXNrIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGh1Z2V0bGIgQ01BKSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZXBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6pvsw[1] Phase: Succeeded StartedAt: 2026-07-27 00:56:55 +0000 UTC FinishedAt: 2026-07-27 00:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 00:56:55 +0000 UTC FinishedAt: 2026-07-27 00:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2] Phase: Succeeded StartedAt: 2026-07-27 00:56:55 +0000 UTC FinishedAt: 2026-07-27 05:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 00:56:55 +0000 UTC FinishedAt: 2026-07-27 05:59:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 00:56:55 +0000 UTC FinishedAt: 2026-07-27 00:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 00:56:55 +0000 UTC FinishedAt: 2026-07-27 00:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6pvsw/series-workflow6pvsw-convert-artifact-3292454912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 00:57:05 +0000 UTC FinishedAt: 2026-07-27 01:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 00:57:05 +0000 UTC FinishedAt: 2026-07-27 01:49:48 +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:*02842c65-0108-4df4-b8f4-8d9d14686e85,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-workflow6pvsw/series-workflow6pvsw-convert-artifact-3292454912/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": "7e4efbfc-2129-40e2-8b8b-28d8926960f9", "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-workflow6pvsw/series-workflow6pvsw-build-action-2722900678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 00:57:05 +0000 UTC FinishedAt: 2026-07-27 01:49:38 +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:*02842c65-0108-4df4-b8f4-8d9d14686e85,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-workflow6pvsw/series-workflow6pvsw-convert-artifact-3292454912/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": "7e4efbfc-2129-40e2-8b8b-28d8926960f9", "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-workflow6pvsw/series-workflow6pvsw-build-action-2722900678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 01:49:48 +0000 UTC FinishedAt: 2026-07-27 01:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 01:49:48 +0000 UTC FinishedAt: 2026-07-27 01:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 01:49:48 +0000 UTC FinishedAt: 2026-07-27 01:50:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 01:49:48 +0000 UTC FinishedAt: 2026-07-27 01:50:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6pvsw/series-workflow6pvsw-convert-artifact-1864996775/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 01:50:12 +0000 UTC FinishedAt: 2026-07-27 01:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 01:50:12 +0000 UTC FinishedAt: 2026-07-27 01:52:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e4efbfc-2129-40e2-8b8b-28d8926960f9,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-workflow6pvsw/series-workflow6pvsw-build-action-2722900678/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-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 01:52:39 +0000 UTC FinishedAt: 2026-07-27 01:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 01:52:39 +0000 UTC FinishedAt: 2026-07-27 01:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 01:52:39 +0000 UTC FinishedAt: 2026-07-27 02:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 01:52:39 +0000 UTC FinishedAt: 2026-07-27 02:52:32 +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:*02842c65-0108-4df4-b8f4-8d9d14686e85,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-workflow6pvsw/series-workflow6pvsw-convert-artifact-1864996775/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": "adc91840-d542-4542-8016-69b5ffc27f2b", "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-workflow6pvsw/series-workflow6pvsw-build-action-3212445995/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 01:52:39 +0000 UTC FinishedAt: 2026-07-27 02:52:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*02842c65-0108-4df4-b8f4-8d9d14686e85,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-workflow6pvsw/series-workflow6pvsw-convert-artifact-1864996775/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": "adc91840-d542-4542-8016-69b5ffc27f2b", "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-workflow6pvsw/series-workflow6pvsw-build-action-3212445995/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 02:52:32 +0000 UTC FinishedAt: 2026-07-27 02:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 02:52:32 +0000 UTC FinishedAt: 2026-07-27 02:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 02:52:32 +0000 UTC FinishedAt: 2026-07-27 02:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 02:52:32 +0000 UTC FinishedAt: 2026-07-27 02:54:27 +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:*adc91840-d542-4542-8016-69b5ffc27f2b,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-workflow6pvsw/series-workflow6pvsw-build-action-3212445995/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-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 05:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 05:59:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7e4efbfc-2129-40e2-8b8b-28d8926960f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*adc91840-d542-4542-8016-69b5ffc27f2b,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-workflow6pvsw/series-workflow6pvsw-build-action-2722900678/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-workflow6pvsw/series-workflow6pvsw-build-action-3212445995/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 02:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 02:54:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6pvsw/series-workflow6pvsw-convert-artifact-940902144/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 02:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 02:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 02:54:36 +0000 UTC FinishedAt: 2026-07-27 02:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 02:54:46 +0000 UTC FinishedAt: 2026-07-27 05:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6pvsw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"40de8160ca7f67d14619ee0351ce5d68fc4a237a","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","HUGETLBFS"],"series_id":"9e7ed6ab-9f68-435a-8d90-874ec81b8b94","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 02:54:46 +0000 UTC FinishedAt: 2026-07-27 05:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e4efbfc-2129-40e2-8b8b-28d8926960f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*adc91840-d542-4542-8016-69b5ffc27f2b,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-workflow6pvsw/series-workflow6pvsw-build-action-2722900678/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-workflow6pvsw/series-workflow6pvsw-build-action-3212445995/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-workflow6pvsw/series-workflow6pvsw-convert-artifact-940902144/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,}