Name: series-workflowq6hq8 Phase: Succeeded StartedAt: 2026-07-31 17:59:45 +0000 UTC FinishedAt: 2026-07-31 22:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[0] Phase: Succeeded StartedAt: 2026-07-31 17:59:45 +0000 UTC FinishedAt: 2026-07-31 18:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 17:59:45 +0000 UTC FinishedAt: 2026-07-31 18:20:10 +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": "5c4851e4cdfc3204128f88991be64a6e3929d3d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "5c4851e4cdfc3204128f88991be64a6e3929d3d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "ea908a97-2916-421a-b8c0-419e5a5a2768" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "mem_cgroup_shrink_node", "shrink_all_memory" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTk0MjhhZDZlMWRmYjBlNjNiY2Q2ODlkNDE0ZGEzZGQwYmMzODFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTg6MTg6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDlhZGIyYWQyMWRhNTkuLmIwNjNjNTZlYTMwYzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDM0LDYgJiM0Mzs0MzQsMTIgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuIFx0ICovXG4gXHRMUlVWRUNfQ0dST1VQX0NPTkdFU1RFRCxcbiBcdExSVVZFQ19OT0RFX0NPTkdFU1RFRCxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1HTFJVOiBldmljdGlvbiBmYWlsZWQgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBvbmNlXG4mIzQzO1x0ICogd2hpbGUgdGhlIHdpbmRvdyB3YXMgYXQgTUFYX05SX0dFTlMuIEEgc2Vjb25kIGNvbnNlY3V0aXZlIGZhaWx1cmVcbiYjNDM7XHQgKiBmb3JjZXMgYWdpbmcgc28gcmVzaWR1YWwgZm9saW9zIGNhbm5vdCBwaW4gbWluX3NlcSBpbmRlZmluaXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0TFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuIH07XG4gXG4gI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiZDFiMWFhMTI1ODE5Li5jMThkYjA4YzVlMTAzIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTc1LDYgJiM0MzsxNzUsOCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiBcdFx0dW5zaWduZWQgaW50IGltbWVkaWF0ZTtcbiBcdFx0dW5zaWduZWQgaW50IGZpbGVfdGFrZW47XG4gXHRcdHVuc2lnbmVkIGludCB0YWtlbjtcbiYjNDM7XHRcdC8qIGZvbGlvcyBpc29sYXRlZCBieSBNR0xSVSBldmljdGlvbiBpbiB0aGUgY3VycmVudCBscnV2ZWMgcGFzcyAqL1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGlzb2xhdGVkO1xuIFx0fSBucjtcbiBcbiBcdC8qIGZvciByZWNvcmRpbmcgdGhlIHJlY2xhaW1lZCBzbGFiIGJ5IG5vdyAqL1xuQEAgLTQ3NDgsNiAmIzQzOzQ3NTAsNyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgc2Nhbl9iYXRjaCxcbiBcdFx0XHRcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxuIFx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuJiM0MztcdHNjLVx1MDAzZW5yLmlzb2xhdGVkICYjNDM7PSBpc29sYXRlZDtcbiBcdGlmICh0eXBlID09IExSVV9HRU5fRklMRSlcbiBcdFx0c2MtXHUwMDNlbnIuZmlsZV90YWtlbiAmIzQzOz0gaXNvbGF0ZWQ7XG4gXHQvKlxuQEAgLTQ5OTgsNiAmIzQzOzUwMDEsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGxvbmcgbnJfdG9fc2NhbjtcbiBcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7XG4gXHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuJiM0MztcdGJvb2wgYXR0ZW1wdGVkID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCByb3RhdGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIHBlci1scnV2ZWMgcGFzczsgc2MgaXMgc2hhcmVkIGFjcm9zcyBscnV2ZWNzIGR1cmluZyByZWNsYWltICovXG4mIzQzO1x0c2MtXHUwMDNlbnIuaXNvbGF0ZWQgPSAwO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0aW50IGRlbHRhO1xuQEAgLTUwMDYsNiAmIzQzOzUwMTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRpZiAobnJfdG9fc2NhbiBcdTAwM2M9IDApXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRhdHRlbXB0ZWQgPSB0cnVlO1xuIFx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbiBcdFx0aWYgKCFkZWx0YSlcbiBcdFx0XHRicmVhaztcbkBAIC01MDIwLDYgJiM0Mzs1MDI5LDQwIEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRXZpY3Rpb24gaXNvbGF0ZWQgbm90aGluZyB3aGlsZSB0aGUgc2xpZGluZyB3aW5kb3cgaXMgYWxyZWFkeSBhdFxuJiM0MztcdCAqIE1BWF9OUl9HRU5TLiBJbiB0aGF0IHN0YXRlIHNob3VsZF9ydW5fYWdpbmcoKSBpcyBmYWxzZSwgc29cbiYjNDM7XHQgKiBnZXRfbnJfdG9fc2NhbigpIG5ldmVyIGNhbGxzIHRyeV90b19pbmNfbWF4X3NlcSgpLiBSZXNpZHVhbCBmb2xpb3NcbiYjNDM7XHQgKiB0aGF0IGZhaWwgaXNvbGF0ZV9mb2xpbygpIGNhbiBwaW4gbWluX3NlcSBhbmQgaGlkZSByZWNsYWltYWJsZVxuJiM0MztcdCAqIGZvbGlvcyBpbiB5b3VuZ2VyIGdlbmVyYXRpb25zLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmVxdWlyZSB0d28gY29uc2VjdXRpdmUgaXNvbGF0ZSBmYWlsdXJlcyBvbiB0aGlzIGxydXZlYyBiZWZvcmVcbiYjNDM7XHQgKiBmb3JjaW5nIGFnaW5nLCBzbyBhIHNpbmdsZSBuby1wcm9ncmVzcyBiYXRjaCBkb2VzIG5vdCByb3RhdGUgdGhlXG4mIzQzO1x0ICogd2luZG93LiBTdWNjZXNzZnVsIGlzb2xhdGlvbiBjbGVhcnMgdGhlIHN0aWNreSBiaXQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBLZXkgb2ZmIHNjLVx1MDAzZW5yLmlzb2xhdGVkLCBub3QgbnJfcmVjbGFpbWVkOiBmb2xpb3MgaXNvbGF0ZWQgYnV0XG4mIzQzO1x0ICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvXG4mIzQzO1x0ICogbm90IHBpbiB0aGUgb2xkZXN0IGdlbmVyYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGF0dGVtcHRlZCBcdTAwMjZcdTAwMjYgIXNjLVx1MDAzZW5yLmlzb2xhdGVkKSB7XG4mIzQzO1x0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuJiM0MztcdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNjIG1heF9zZXEpIHtcbiYjNDM7XHRcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZscnV2ZWMtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdFx0cm90YXRlZCA9IHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBzd2FwcGluZXNzLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0Y2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCxcbiYjNDM7XHRcdFx0XHRcdCAgXHUwMDI2bHJ1dmVjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKHNjLVx1MDAzZW5yLmlzb2xhdGVkKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELCBcdTAwMjZscnV2ZWMtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgdG9vIG1hbnkgZmlsZSBjYWNoZSBpbiB0aGUgY29sZGVzdCBnZW5lcmF0aW9uIGNhbiYjMzk7dCBiZSBldmljdGVkXG4gXHQgKiBkdWUgdG8gYmVpbmcgZGlydHksIHdha2UgdXAgdGhlIGZsdXNoZXIuXG5AQCAtNTA0Myw3ICYjNDM7NTA4Niw3IEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHR9XG4gXG4gXHQvKiB3aGV0aGVyIHRoaXMgbHJ1dmVjIHNob3VsZCBiZSByb3RhdGVkICovXG4tXHRyZXR1cm4gbnJfdG9fc2NhbiBcdTAwM2MgMDtcbiYjNDM7XHRyZXR1cm4gbnJfdG9fc2NhbiBcdTAwM2MgMCB8fCByb3RhdGVkO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBmb3JjZSBhZ2luZyB3aGVuIGZvbGlvcyBmYWlsIHRvIGlzb2xhdGUgZnJvbSB0aGUgb2xkZXN0IGdlbmVyYXRpb24gY29uc2VjdXRpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlOTQyOGFkNmUxZGZiMGU2M2JjZDY4OWQ0MTRkYTNkZDBiYzM4MWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxODoxODo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDlhZGIyYWQyMWRhNTkuLmIwNjNjNTZlYTMwYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDM0LDYgJiM0Mzs0MzQsMTIgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogCSAqLwogCUxSVVZFQ19DR1JPVVBfQ09OR0VTVEVELAogCUxSVVZFQ19OT0RFX0NPTkdFU1RFRCwKJiM0MzsJLyoKJiM0MzsJICogTUdMUlU6IGV2aWN0aW9uIGZhaWxlZCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIG9uY2UKJiM0MzsJICogd2hpbGUgdGhlIHdpbmRvdyB3YXMgYXQgTUFYX05SX0dFTlMuIEEgc2Vjb25kIGNvbnNlY3V0aXZlIGZhaWx1cmUKJiM0MzsJICogZm9yY2VzIGFnaW5nIHNvIHJlc2lkdWFsIGZvbGlvcyBjYW5ub3QgcGluIG1pbl9zZXEgaW5kZWZpbml0ZWx5LgomIzQzOwkgKi8KJiM0MzsJTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELAogfTsKIAogI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi8KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYmQxYjFhYTEyNTgxOS4uYzE4ZGIwOGM1ZTEwMyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTE3NSw2ICYjNDM7MTc1LDggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJCXVuc2lnbmVkIGludCBpbW1lZGlhdGU7CiAJCXVuc2lnbmVkIGludCBmaWxlX3Rha2VuOwogCQl1bnNpZ25lZCBpbnQgdGFrZW47CiYjNDM7CQkvKiBmb2xpb3MgaXNvbGF0ZWQgYnkgTUdMUlUgZXZpY3Rpb24gaW4gdGhlIGN1cnJlbnQgbHJ1dmVjIHBhc3MgKi8KJiM0MzsJCXVuc2lnbmVkIGludCBpc29sYXRlZDsKIAl9IG5yOwogCiAJLyogZm9yIHJlY29yZGluZyB0aGUgcmVjbGFpbWVkIHNsYWIgYnkgbm93ICovCkBAIC00NzQ4LDYgJiM0Mzs0NzUwLDcgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtJmd0O3JlY2xhaW1faWR4LCBzYy0mZ3Q7b3JkZXIsIHNjYW5fYmF0Y2gsCiAJCQkJc2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsCiAJCQkJdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOwomIzQzOwlzYy0mZ3Q7bnIuaXNvbGF0ZWQgJiM0Mzs9IGlzb2xhdGVkOwogCWlmICh0eXBlID09IExSVV9HRU5fRklMRSkKIAkJc2MtJmd0O25yLmZpbGVfdGFrZW4gJiM0Mzs9IGlzb2xhdGVkOwogCS8qCkBAIC00OTk4LDYgJiM0Mzs1MDAxLDExIEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJbG9uZyBucl90b19zY2FuOwogCXVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7CiAJaW50IHN3YXBwaW5lc3MgPSBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKTsKJiM0MzsJYm9vbCBhdHRlbXB0ZWQgPSBmYWxzZTsKJiM0MzsJYm9vbCByb3RhdGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBlci1scnV2ZWMgcGFzczsgc2MgaXMgc2hhcmVkIGFjcm9zcyBscnV2ZWNzIGR1cmluZyByZWNsYWltICovCiYjNDM7CXNjLSZndDtuci5pc29sYXRlZCA9IDA7CiAKIAl3aGlsZSAodHJ1ZSkgewogCQlpbnQgZGVsdGE7CkBAIC01MDA2LDYgJiM0Mzs1MDE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAkJaWYgKG5yX3RvX3NjYW4gJmx0Oz0gMCkKIAkJCWJyZWFrOwogCiYjNDM7CQlhdHRlbXB0ZWQgPSB0cnVlOwogCQlkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTsKIAkJaWYgKCFkZWx0YSkKIAkJCWJyZWFrOwpAQCAtNTAyMCw2ICYjNDM7NTAyOSw0MCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogRXZpY3Rpb24gaXNvbGF0ZWQgbm90aGluZyB3aGlsZSB0aGUgc2xpZGluZyB3aW5kb3cgaXMgYWxyZWFkeSBhdAomIzQzOwkgKiBNQVhfTlJfR0VOUy4gSW4gdGhhdCBzdGF0ZSBzaG91bGRfcnVuX2FnaW5nKCkgaXMgZmFsc2UsIHNvCiYjNDM7CSAqIGdldF9ucl90b19zY2FuKCkgbmV2ZXIgY2FsbHMgdHJ5X3RvX2luY19tYXhfc2VxKCkuIFJlc2lkdWFsIGZvbGlvcwomIzQzOwkgKiB0aGF0IGZhaWwgaXNvbGF0ZV9mb2xpbygpIGNhbiBwaW4gbWluX3NlcSBhbmQgaGlkZSByZWNsYWltYWJsZQomIzQzOwkgKiBmb2xpb3MgaW4geW91bmdlciBnZW5lcmF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogUmVxdWlyZSB0d28gY29uc2VjdXRpdmUgaXNvbGF0ZSBmYWlsdXJlcyBvbiB0aGlzIGxydXZlYyBiZWZvcmUKJiM0MzsJICogZm9yY2luZyBhZ2luZywgc28gYSBzaW5nbGUgbm8tcHJvZ3Jlc3MgYmF0Y2ggZG9lcyBub3Qgcm90YXRlIHRoZQomIzQzOwkgKiB3aW5kb3cuIFN1Y2Nlc3NmdWwgaXNvbGF0aW9uIGNsZWFycyB0aGUgc3RpY2t5IGJpdC4KJiM0MzsJICoKJiM0MzsJICogS2V5IG9mZiBzYy0mZ3Q7bnIuaXNvbGF0ZWQsIG5vdCBucl9yZWNsYWltZWQ6IGZvbGlvcyBpc29sYXRlZCBidXQKJiM0MzsJICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvCiYjNDM7CSAqIG5vdCBwaW4gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGF0dGVtcHRlZCAmYW1wOyZhbXA7ICFzYy0mZ3Q7bnIuaXNvbGF0ZWQpIHsKJiM0MzsJCURFRklORV9NQVhfU0VRKGxydXZlYyk7CiYjNDM7CQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwomIzQzOwomIzQzOwkJaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TICZsdDsgbWF4X3NlcSkgewomIzQzOwkJCWlmICh0ZXN0X2FuZF9zZXRfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwKJiM0MzsJCQkJCSAgICAgJmFtcDtscnV2ZWMtJmd0O2ZsYWdzKSkgewomIzQzOwkJCQlyb3RhdGVkID0gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwKJiM0MzsJCQkJCQkJICAgICBzd2FwcGluZXNzLCBmYWxzZSk7CiYjNDM7CQkJCWNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsCiYjNDM7CQkJCQkgICZhbXA7bHJ1dmVjLSZndDtmbGFncyk7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQljbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELCAmYW1wO2xydXZlYy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNjLSZndDtuci5pc29sYXRlZCkgewomIzQzOwkJY2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwgJmFtcDtscnV2ZWMtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogSWYgdG9vIG1hbnkgZmlsZSBjYWNoZSBpbiB0aGUgY29sZGVzdCBnZW5lcmF0aW9uIGNhbiYjMzk7dCBiZSBldmljdGVkCiAJICogZHVlIHRvIGJlaW5nIGRpcnR5LCB3YWtlIHVwIHRoZSBmbHVzaGVyLgpAQCAtNTA0Myw3ICYjNDM7NTA4Niw3IEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJfQogCiAJLyogd2hldGhlciB0aGlzIGxydXZlYyBzaG91bGQgYmUgcm90YXRlZCAqLwotCXJldHVybiBucl90b19zY2FuICZsdDsgMDsKJiM0MzsJcmV0dXJuIG5yX3RvX3NjYW4gJmx0OyAwIHx8IHJvdGF0ZWQ7CiB9CiAKIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1HTFJVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCDigJMgYG1tem9uZS5oYCBhbmQgYHZtc2Nhbi5jYC4gQWx3YXlzIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IHJlZmluaW5nIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgYWxnb3JpdGhtLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBtbS9LY29uZmlnYCBqdXN0IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIGJ1dCBsZXQmIzM5O3MgYXNzdW1lIGl0IGlzLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZywgYExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRGAsIHdoaWNoIGhpbnRzIHRoYXQgdGhlIGlzb2xhdGlvbiBwcm9jZXNzIGl0c2VsZiBpcyBiZWluZyBzY3J1dGluaXplZC4gVGhhdCYjMzk7cyBnb29kLCBpc29sYXRpb24gb2YgcGFnZXMgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdGVwIGluIE1HTFJVLiBJIG5vdGljZSB0aGV5JiMzOTtyZSBhZGRpbmcgYW4gYHVuc2lnbmVkIGludCBpc29sYXRlZGAgY291bnQgaW50byBgc2Nhbl9jb250cm9sYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXTigJlzIGludGVuZGVkIHRvIHRyYWNrIGlzb2xhdGlvbiBmYWlsdXJlcy4gSW5jcmVtZW50aW5nIGBzYy0mZ3Q7bnIuaXNvbGF0ZWQgJiM0Mzs9IGlzb2xhdGVkYCBpbiBgc2Nhbl9mb2xpb3NgIGlzIHRoZSBrZXkuCgpUaGVuLCBpbiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBpdCBnZXRzIHJlc2V0LCB3aGljaCBpcyBjcnVjaWFsIGZvciB0cmFja2luZyB0aGUgc2xpZGluZyB3aW5kb3cgc3RhdGUuIEkgY2FuIHRlbGwgdGhpcyBpcyBhbGwgYWJvdXQgbWFraW5nIHN1cmUgdGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoZXkmIzM5O3JlIHRyYWNraW5nIGhvdyBtYW55IHRpbWVzIGlzb2xhdGlvbiBmYWlscywgYW5kIGFmdGVyIGNvbnNlY3V0aXZlIGZhaWx1cmVzLCBmb3JjZSBhZ2luZyB3aXRoIGB0cnlfdG9faW5jX21heF9zZXFgLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIHRyeWluZyB0byBiZSBzbWFydGVyIGFib3V0IG5vdCBnZXR0aW5nIHN0dWNrIGluIGEgcnV0IHdoZW4gdGhlIGlzb2xhdGlvbiBwcm9jZXNzIGlzbiYjMzk7dCB5aWVsZGluZyBhbnl0aGluZy4gVGhhdCYjMzk7cyBhIGNsZXZlciB3YXkgdG8gaGFuZGxlIGVkZ2UgY2FzZXMgb3Igc3Vib3B0aW1hbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIHByZXZlbnQgbGl2ZWxvY2tzIGluIHBhcnRpY3VsYXIuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgbW9uaXRvcmluZyB0aGUgaXNvbGF0aW9uIGJlaGF2aW9yIG9mIE1HTFJVIGFuZCBpbXBsZW1lbnRpbmcgYSBtZWNoYW5pc20gdG8gZ3JhY2VmdWxseSBkZWdyYWRlIChmb3JjZSBhZ2luZykgaWYgaXQgZ2V0cyBzdHVjay4gVGhhdCYjMzk7cyBhIHNvbGlkLCB0YXJnZXRlZCBlbmhhbmNlbWVudCBmb3IgTUdMUlUgcm9idXN0bmVzcyBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM2Nz1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzY5LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzNzA6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTM3MS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTM3OC1cbm1tL0tjb25maWc6MTM3OTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTEzODAtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMzg0LVxubW0vS2NvbmZpZzoxMzg1OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTEzODYtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTM5My1cbm1tL0tjb25maWc6MTM5NDpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTM5NS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBMUlUgR2VuZXJhdGlvbiBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBzaG91bGQgZGVmaW5pdGVseSBiZSBlbmFibGVkLCB3aGljaCBtZWFucyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHRvdWNoZXMgdGhlIGV4aXN0aW5nIGNvZGUgYmFzZS4gSSBzaG91bGQgY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4KCkFscmlnaHQsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSBhZmZlY3RlZCBhcmUgYHNjYW5fZm9saW9zYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfb25lYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiB0aGUgY29kZT8gQW5kLCBtb3JlIGNyaXRpY2FsbHksIHdoaWNoIG9mIHRoZXNlIGFyZSB0aGUgcmVhbCBjb3JlIGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhbmFseXNpcyBvbj8gSSBzZWUgdGhleSYjMzk7cmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIG15IHVzdWFsIGFwcHJvYWNoIG9mIGxvb2tpbmcgZm9yIGNhbGxlcnMgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZDsgSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdoaWNoIGNhbGwgdGhlc2Ugd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgZmlsZS4KCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gbG9vayBmb3IgdGhlIGVudHJ5IHBvaW50cyB0byB0aGVzZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyBmcm9tIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLCB1bHRpbWF0ZWx5IHRvIHVuZGVyc3RhbmQgaG93IExSVSBnZW5lcmF0aW9uIGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB0aGlzIG5ldyBmZWF0dXJlLCBhbmQgaG93IGl0IGltcGFjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDk3Mj1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5OTgtXG5tbS92bXNjYW4uYzo0OTk5OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MDAwLXtcbi0tXG5tbS92bXNjYW4uYz01MDkyPXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxMTEtXG5tbS92bXNjYW4uYzo1MTEyOlx0c3VjY2VzcyA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTExMy1cbi0tXG5tbS92bXNjYW4uYz01MjAzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMTUtXG5tbS92bXNjYW4uYzo1MjE2Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTIxNy1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgYW5kIGl0cyBDYWxsaW5nIENvbnRleHQqKgoKSG1tLCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBzaHJpbmtfbHJ1dmVjYCAob3Igc29tZXRoaW5nICp2ZXJ5KiBzaW1pbGFyIGluIG5hbWUgYW5kIHB1cnBvc2UpIGlzIHRoZSBpbW1lZGlhdGUgY2FsbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byDigJMgaG93IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHNocmlua2luZyB0aGUgTFJVIHZlY3Rvci4gQW0gSSBjb3JyZWN0IGluIGFzc3VtaW5nIHRoYXQgaXQgaXMgY2FsbGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBzaHJpbmtfbHJ1dmVjYD8gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIGluIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHB1enpsZSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWFuYWdpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIHdpdGhpbiB0aGF0IHByb2Nlc3MuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCByZXR1cm4/IEFuZCBtb3N0IGltcG9ydGFudGx5LCAqd2h5KiBpcyBpdCBiZWluZyBjYWxsZWQgYXQgdGhpcyBwb2ludD8gSXMgaXQgYSBjb3JlIGFsZ29yaXRobWljIGNvbXBvbmVudCBvZiB0aGUgc2hyaW5raW5nIHByb2Nlc3Mgb3IgYSBoZWxwZXIgZnVuY3Rpb24/IFRoZSBhcmNoaXRlY3R1cmUgaGVyZSBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUxMzM9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTIwMi1cbm1tL3Ztc2Nhbi5jOjUyMDM6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MjA0LXtcbi0tXG5tbS92bXNjYW4uYz01OTQ2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk1MC1cbm1tL3Ztc2Nhbi5jOjU5NTE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTUyLXtcbi0tXG5tbS92bXNjYW4uYz01OTYzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTc0LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU5NzU6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU5NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiBgc2hyaW5rX2xydXZlY2AgYW5kIEl0cyBQbGFjZSoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLnNvLCBgc2hyaW5rX2xydXZlY2AuIEl0JiMzOTtzIGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGVpdGhlciB0aHJvdWdoIGBzaHJpbmtfbm9kZV9tZW1jZ3NgIG9yIGRpcmVjdGx5IGJ5IGBzaHJpbmtfbm9kZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdGVsbHMgbWUgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZC4gQm90aCBvZiB0aG9zZSB1cHN0cmVhbSBmdW5jdGlvbnMgYXJlLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBtZW1vcnkgcmVjbGFpbS4gYHNocmlua19ub2RlX21lbWNnc2AgaW1wbGllcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCB0YXJnZXRpbmcgcmVjbGFpbSBiYXNlZCBvbiB0aG9zZSBjb25zdHJhaW50cy4gYHNocmlua19ub2RlYCwgb24gdGhlIG90aGVyIGhhbmQsIHN1Z2dlc3RzIGEgYnJvYWRlciwgbm9kZS1sZXZlbCByZWNsYWltIG9wZXJhdGlvbi4KClNvLCBgc2hyaW5rX2xydXZlY2AgbXVzdCBiZSB0aGUgd29ya2hvcnNlIGZvciBhY3R1YWxseSBmcmVlaW5nIHVwIG1lbW9yeSB3aXRoaW4gYW4gTFJVIHZlY3Rvci4gVGhhdCBtYWtlcyB0b3RhbCBzZW5zZS4gV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHBhZ2UgbWFuYWdlbWVudCBhbmQgY2FjaGUgZXZpY3Rpb24g4oCTIHRoZSB3aG9sZSBwb2ludCBvZiB0aGVzZSBMUlUgbGlzdHMuIEl04oCZcyB0aGUgbWVjaGFuaXNtIHRvIGFjdHVhbGx5IHB1bGwgcGFnZXMgb2ZmIHRoZSBMUlUgbGlzdHMgdG8gbWVldCBlaXRoZXIgdGhlIHNwZWNpZmljIGRlbWFuZHMgb2YgYSBtZW1vcnkgY29udHJvbCBncm91cCBvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gcHJlc3N1cmUgdG8gcmVjbGFpbSBtZW1vcnkgb24gYSBub2RlLiBUaGUgY29udGV4dCBvZiB3aGljaCBmdW5jdGlvbiBpcyBjYWxsaW5nIGl0IHRlbGxzIG1lIGV4YWN0bHkgd2h5IHRob3NlIHBhZ2VzIGFyZSBiZWluZyByZWNsYWltZWQsIHdoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBpcyBkcml2aW5nIGl0LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaC4gSSYjMzk7ZCBuZWVkIHRvIGdvIGxvb2sgYXQgZXhhY3RseSAqaG93KiBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gQnV0IHRoZSBjYWxsZXIgaW5mb3JtYXRpb24sIGluIGl0c2VsZiwgaXMgdmVyeSBpbmZvcm1hdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5NzI9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTk4LVxubW0vdm1zY2FuLmM6NDk5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTAwMC17XG4tLVxubW0vdm1zY2FuLmM9NTA5Mj1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTExLVxubW0vdm1zY2FuLmM6NTExMjpcdHN1Y2Nlc3MgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxMTMtXG4tLVxubW0vdm1zY2FuLmM9NTEzMz1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjAyLVxubW0vdm1zY2FuLmM6NTIwMzpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUyMDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTUyMTUtXG5tbS92bXNjYW4uYzo1MjE2Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTIxNy1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU5NDY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTUwLVxubW0vdm1zY2FuLmM6NTk1MTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU5NTIte1xuLS1cbm1tL3Ztc2Nhbi5jPTU5NTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTYyLVxubW0vdm1zY2FuLmM6NTk2MzpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTY0LXtcbi0tXG5tbS92bXNjYW4uYy01OTc0LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU5NzU6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU5NzYtXG4tLVxubW0vdm1zY2FuLmM9NjE1ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjIxMy1cbm1tL3Ztc2Nhbi5jOjYyMTQ6XHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy02MjE1LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4MDk9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODM5LVx0ICovXG5tbS92bXNjYW4uYzo2ODQwOlx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4NDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIGhlcmUgdGhhdCBtYWtlcyBtZSByYWlzZSBhbiBleWVicm93LiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAuLi4gaXQmIzM5O3MgZGVjbGFyZWQgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBiaXQgdW51c3VhbCBmb3IgYSBmdW5jdGlvbiBsaWtlIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBleHRlcm5hbCBsaW5rYWdlLCBtZWFuaW5nIHRoZXkgKmNvdWxkKiBiZSBjYWxsZWQgZnJvbSBvdGhlciBjb21waWxhdGlvbiB1bml0cy4gSXMgdGhhdCB0aGUgaW50ZW50IGhlcmU/IElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGJyb2FkZXIgQVBJLCBvciBpcyBpdCBsaWtlbHkgYW4gb3ZlcnNpZ2h0IG9yIGFuIGluZGljYXRpb24gb2YgYW4gb3B0aW1pemF0aW9uIHRoYXQgcmVxdWlyZXMgZXh0ZXJuYWwgYWNjZXNzPyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlZmluaXRpb24sIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGFuZCB3aGV0aGVyIHRoZXJlJiMzOTtzIGFuIG9idmlvdXMgcmVhc29uIGZvciBpdHMgdmlzaWJpbGl0eS4gSXQmIzM5O3MgdGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgbG9vayBmb3IgdGhlIHJhdGlvbmFsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY3NjM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjgwOC0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODA5OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODEwLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IEEgUXVlc3Rpb24gb2YgU2NvcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIG15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIE1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgb2YgdGhhdCBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCBtaWdodCBiZSBjYWxsYWJsZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLCB3aGljaCByYWlzZXMgY2VydGFpbiBpbXBsaWNhdGlvbnMgd2hlbiBjb25zaWRlcmluZyBjb25jdXJyZW5jeSBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzLgoKQnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBjcml0aWNhbCBwb2ludCBoZXJlLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYHNocmlua19ub2RlYD8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgdW5jbGVhci4gSG93IGRvIHRoZXkgaW50ZXJhY3Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbm9kZSBzaHJpbmtpbmcgcHJvY2VzcyByZWxhdGVzIHRvIHRoZSBhY3Qgb2YgZnJlZWluZyBwYWdlcy4gQXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlIG9wZXJhdGlvbnM/IERvZXMgb25lIHRyaWdnZXIgdGhlIG90aGVyPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGRhdGEgZmxvdy4gVGhlIGludGVycGxheSBiZXR3ZWVuIG5vZGUgc2hyaW5raW5nIGFuZCBhY3R1YWwgcGFnZSBmcmVlaW5nIGlzIGNydWNpYWwgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJiMzOTt2ZSBnb3QgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgdHdvIHBpZWNlcyBvZiB0aGUgcHV6emxlIGZpdCB0b2dldGhlciB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTQ0PXN0YXRpYyBpbnQgY3VycmVudF9tYXlfdGhyb3R0bGUodm9pZClcbi0tXG5tbS92bXNjYW4uYy0xOTQ5LS8qXG5tbS92bXNjYW4uYzoxOTUwOiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbm1tL3Ztc2Nhbi5jLTE5NTEtICogb2YgcmVjbGFpbWVkIHBhZ2VzXG4tLVxubW0vdm1zY2FuLmM9NTIwMz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjIzLVxubW0vdm1zY2FuLmM6NTIyNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIyNS17XG4tLVxubW0vdm1zY2FuLmM9NTk1MT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTU1LVxubW0vdm1zY2FuLmM6NTk1NjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTk1Ny17XG4tLVxubW0vdm1zY2FuLmM9NjEwMj1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy02MTUzLVxubW0vdm1zY2FuLmM6NjE1NDpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MTU1LXtcbi0tXG5tbS92bXNjYW4uYy02MjMyLVxubW0vdm1zY2FuLmM6NjIzMzpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYyMzQte1xuLS1cbm1tL3Ztc2Nhbi5jLTYyNDAtXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MjQxOlx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjQyLVxuLS1cbm1tL3Ztc2Nhbi5jLTYyNTctXG5tbS92bXNjYW4uYzo2MjU4Olx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTY0MTg9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY0OTYtXHRcdGxhc3RfcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG5tbS92bXNjYW4uYzo2NDk3Olx0XHRzaHJpbmtfbm9kZSh6b25lLVx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTY0OTgtXHR9XG4tLVxubW0vdm1zY2FuLmM9Njc2Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02ODA4LS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbm1tL3Ztc2Nhbi5jOjY4MDk6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY4MTAtXHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4MzUtXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY4MzY6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02ODM3LVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9Njk1Nz1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNjk4MS1cdFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjY5ODI6XHRcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXG5tbS92bXNjYW4uYy02OTgzLVx0XHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXG4tLVxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzA3Ny0gKi9cbm1tL3Ztc2Nhbi5jOjcwNzg6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MDc5LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy03MDk0LVx0ICovXG5tbS92bXNjYW4uYzo3MDk1Olx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTcwOTYtXG4tLVxubW0vdm1zY2FuLmM9NzE1MT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcyNTgtXG5tbS92bXNjYW4uYzo3MjU5Olx0XHQvKiBDYWxsIHNvZnQgbGltaXQgcmVjbGFpbSBiZWZvcmUgY2FsbGluZyBzaHJpbmtfbm9kZS4gKi9cbm1tL3Ztc2Nhbi5jLTcyNjAtXHRcdHNjLm5yX3NjYW5uZWQgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTcyNzAtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzI3MTpcdFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXHUwMDI2c2MpKVxubW0vdm1zY2FuLmMtNzI3Mi1cdFx0XHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTc4MjM9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vdm1zY2FuLmMtNzg1MC1cdFx0ZG8ge1xubW0vdm1zY2FuLmM6Nzg1MTpcdFx0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzg1Mi1cdFx0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXJlY3QgUmVjbGFpbSBFbnRyeSBQb2ludHMqKgoKUmlnaHQsIHNvLCBkaXZpbmcgaW50byBtZW1vcnkgcmVjbGFpbS4uLiBJIHNlZSB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgdGhlIHByaW1hcnkgd29ya2hvcnNlIGZvciAqZGlyZWN0KiByZWNsYWltLiBUaGF0IG1ha2VzIHNlbnNlLCBpdCYjMzk7cyB0aGUgaW1tZWRpYXRlIGF0dGVtcHQgdG8gZnJlZSB1cCBtZW1vcnkgd2hlbiBhIHByb2Nlc3MgaXMgZGlyZWN0bHkgcmVxdWVzdGluZyBpdCwgbGlrZSBkdXJpbmcgYSBwYWdlIGZhdWx0IG9yIGEgbWVtb3J5IGFsbG9jYXRpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGJhbGFuY2VfcGdkYXRgLCB0aGF0JiMzOTtzIHRoZSBiaWcgb25lLCB0aGUgZW50cnkgcG9pbnQgZm9yIGBrc3dhcGRgLCB3aGljaCBJIGtub3cgaXMgdGhlIGJhY2tncm91bmQgZGFlbW9uIGNvbnN0YW50bHkgd29ya2luZyB0byBrZWVwIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IGhlYWx0aHkuIEFuZCwgb2YgY291cnNlLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIHdoaWNoIEkgZXhwZWN0IHdpbGwgYmUgc2ltaWxhciwgYnV0IHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCByZWNsYWltaW5nIG1lbW9yeSB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRob3NlIHR3bzogYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjgwOT11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NDgtXG5tbS92bXNjYW4uYzo2ODQ5OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODUwLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4ODktI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjY4OTA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY4OTEtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmM9Nzk0OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4tLVxubW0vdm1zY2FuLmMtODAwOC1cdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcbm1tL3Ztc2Nhbi5jOjgwMDk6XHRcdFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcbm1tL3Ztc2Nhbi5jLTgwMTAtXHRcdFx0XHRcdFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uIEZvY3VzKioKCkFscmlnaHQsIEkmIzM5O20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZnJlZWluZyB1cCBtZW1vcnkgcGFnZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGhlcmUgYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGluIHRoaXMgYXJlYS4KCkhtbSwgd2FpdCBhIHNlY29uZC4uLiBgYmFsYW5jZV9wZ2RhdGAuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCBvbmUuIElzbiYjMzk7dCB0aGF0IHR5cGljYWxseSBhIHN0YXRpYyBmdW5jdGlvbj8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBsaW5rYWdlIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGluIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSBrZXkgaW1wbGljYXRpb25zIG9mIHRoYXQgc3RhdGljIGRlY2xhcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWxhbmNlX3BnZGF0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjgwOT11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4MzUtXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY4MzY6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02ODM3LVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzA0Mi1cdC8qXG5tbS92bXNjYW4uYzo3MDQzOlx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xubW0vdm1zY2FuLmMtNzA0NC1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbi0tXG5tbS92bXNjYW4uYy03MDQ3LVx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjcwNDg6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jLTcwNDktXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbi0tXG5tbS92bXNjYW4uYy03MDUxLVx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYzo3MDUyOlx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xubW0vdm1zY2FuLmMtNzA1My1cdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXG4tLVxubW0vdm1zY2FuLmM9NzEzMz1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxMzgtLypcbm1tL3Ztc2Nhbi5jOjcxMzk6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcxNDAtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzE1MC0gKi9cbm1tL3Ztc2Nhbi5jOjcxNTE6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTcxNTIte1xuLS1cbm1tL3Ztc2Nhbi5jPTc0ODE9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NTI3LVx0XHQvKlxubW0vdm1zY2FuLmM6NzUyODpcdFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJiMzOTt0IGNhbGwgYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNzUyOS1cdFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxuLS1cbm1tL3Ztc2Nhbi5jLTc1NDMtXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzU0NDpcdFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxubW0vdm1zY2FuLmMtNzU0NS1cdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBDb251bmRydW1zKioKCkFscmlnaHQsIHNvIGBiYWxhbmNlX3BnZGF0YCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIHZhcmlhYmxlLCB0aGF0JiMzOTtzIGNsZWFyLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIHBvcHBpbmcgaW50byBteSBoZWFkIGlzLCB3aGF0IGFib3V0IGBrc3dhcGRgPyBJdCYjMzk7cyBhIGtlcm5lbCB0aHJlYWQsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3RpbmcgaW4gdGhpcyB3aG9sZSBjb250ZXh0LgoKTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgaW50ZXJhY3Rpb24gd2lsbCBiZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gc2VlIGhvdyB0aGVzZSBlbGVtZW50cyByZWxhdGUgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcGFnZSBmcmVlaW5nLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY1MTA9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NTQwLSAqL1xubW0vdm1zY2FuLmM6NjU0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjU0Mi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NjgzPXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NjItXG5tbS92bXNjYW4uYzo2NzYzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNjc2NC1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS92bXNjYW4uYy02Nzk3LVxubW0vdm1zY2FuLmM6Njc5ODpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02Nzk5LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4NDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODgwLVxubW0vdm1zY2FuLmM6Njg4MTpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODgyLVxuLS1cbm1tL3Ztc2Nhbi5jPTc2NDI9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzY2MS1cbm1tL3Ztc2Nhbi5jOjc2NjI6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzY2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBUaGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSYjMzk7cmUgZW50cnkgcG9pbnRzIGFuZCBwb3RlbnRpYWwgdGFyZ2V0cy4gVGhlIGZvY3VzIGlzIG9uIHRoZSBjb3JlIE1HTFJVIGV2aWN0aW9uIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHNvIHRoaXMgYXJlYSB3YXJyYW50cyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYExSVV9HRU5gIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT05GSUdfTFJVX0dFTmAgb3IgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgYWRkIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IHRvIGJlIHN1cmUgSSYjMzk7bSB0ZXN0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGlzIGlzIGNvcmUgdG8gdGhlIGZlYXR1cmUuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgaW5jbHVkaW5nIGNvcmUgTUdMUlUgZXZpY3Rpb24gbG9naWMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSBhIHByaW9yaXR5LiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIHJlY2xhaW1zIG1lbW9yeSBpcyBjcml0aWNhbCwgYW5kIHRoZXJlJiMzOTtzIGJvdW5kIHRvIGJlIGEgbG90IG9mIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgd2hlbiB3b3JraW5nIHdpdGggTUdMUlUuIEkgbmVlZCB0byBiZSBleHRyYSB0aG9yb3VnaC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIExvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgSSBzZWUgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IHJlY2xhaW0uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaGFuZGxlcyBtZW1vcnkgY2dyb3VwIHJlY2xhaW0sIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGFzc29jaWF0ZWQgd2l0aCBoaWJlcm5hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGRpc3RpbmN0aW9ucyBpbiBtaW5kIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGVzdCBjYXNlcyBhbmQgcG90ZW50aWFsIGZhdWx0IHNjZW5hcmlvcy4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzZWQgb24gYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgZnV6emluZyBoYXJuZXNzZXMgdGhlc2UgZW50cnkgcG9pbnRzIGVmZmljaWVudGx5LgoKTm93LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgd2hldGhlciBgTFJVX0dFTl9FTkFCTEVEYCBpcyBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGUgbmV3IGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM3MD1jb25maWcgTFJVX0dFTlxuLS1cbm1tL0tjb25maWctMTM3OC1cbm1tL0tjb25maWc6MTM3OTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTEzODAtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDY4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGBMUlVfR0VOX0VOQUJMRURgIEltcGFjdCoqCgpSaWdodCwgYExSVV9HRU5fRU5BQkxFRGAuLi4gdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IG1hY3JvJiMzOTtzIGxpa2VseSBzZXR0aW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIGJlIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgY29uZmlybSB0aGlzIGJ5IHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgY29uZGl0aW9ucyBnb3Zlcm4gaXRzIHJldHVybiB2YWx1ZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTg2NT1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04ODktXG5tbS92bXNjYW4uYzo4OTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy04OTEtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jPTIyODU9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjI4OS1cbm1tL3Ztc2Nhbi5jOjIyOTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjI5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTUzNTM9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNjMtXG5tbS92bXNjYW4uYzo1MzY0Olx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXG5tbS92bXNjYW4uYy01MzY1LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS92bXNjYW4uYz01NDUxPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDc3LVxubW0vdm1zY2FuLmM6NTQ3ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ3OS1cbm1tL3Ztc2Nhbi5jPTU0ODA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbm1tL3Ztc2Nhbi5jLTU0ODEtXHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmM6NTQ4MjpcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYy01NDgzLVx0TlVMTFxuLS1cbm1tL3Ztc2Nhbi5jPTU4NjU9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01ODcyLVx0bHJ1Z2VuLVx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyAmIzQzOyAxO1xubW0vdm1zY2FuLmM6NTg3MzpcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG5tbS92bXNjYW4uYy01ODc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5NjM9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NzMtXG5tbS92bXNjYW4uYzo1OTc0Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTU5NzUtXHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbi0tXG5tbS92bXNjYW4uYz02MjMzPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMzgtXG5tbS92bXNjYW4uYzo2MjM5Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjI0MC1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbi0tXG5tbS92bXNjYW4uYz02NTEwPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjUxNC1cbm1tL3Ztc2Nhbi5jOjY1MTU6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtNjUxNi1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTY5MDA9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY5MDQtXG5tbS92bXNjYW4uYzo2OTA1Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTY5MDYtXHRcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzIKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1HTFJVIEV2aWN0aW9uIExvZ2ljIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGFsdGVyaW5nIHRoZSBldmljdGlvbiBsb2dpYyB3aXRoaW4gTUdMUlUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggc2l0dWF0aW9ucyB3aGVyZSBmb2xpb3MgYXJlIGdldHRpbmcgc3R1Y2ssIHBlcnBldHVhbGx5IHBpbm5pbmcgYG1pbl9zZXFgLCBwcmVzdW1hYmx5IGR1ZSB0byBpc29sYXRpb24gZmFpbHVyZXMgZnJvbSB0aGUgb2xkZXN0IGdlbmVyYXRpb24uIFRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHR3byBjb25maWd1cmF0aW9uczogYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhpcy4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5ldyBmbGFnLCBgTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVEYCwgdG8gdHJhY2sgKmNvbnNlY3V0aXZlKiBpc29sYXRpb24gZmFpbHVyZXMuIFRoaXMgaXMgdGhlIGNydWNpYWwgYml0IOKAkyBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlc2Ugc3R1Y2sgZm9saW9zIGluZGVmaW5pdGVseSBibG9jayB0aGUgcHJvY2VzcywgdGhlIHBhdGNoIGZvcmNlcyBhZ2luZyB3aGVuIHRoZSBpc29sYXRpb24gYXR0ZW1wdHMgYXJlIHJlcGVhdGVkbHkgZmFpbGluZy4gVGhhdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlIHBvdGVudGlhbCBmb3IgZnV6emluZyBpcyBkZWZpbml0ZWx5IHRoZXJlLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGV5JiMzOTtyZSB0YXJnZXRpbmcgZm9yIGZvY3VzZWQgZnV6emluZyBzZWVtIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBJdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBwYWdlIGZyZWVpbmcgYW5kIG1lbW9yeSByZWNsYWltLCBnaXZlbiB0aGUgTUdMUlUgY29udGV4dC4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgd2lsbCBoYXZlIGVmZmVjdHMgb24gbWVtb3J5IG1hbmFnZW1lbnQsIHNvIEkgYW0gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxODo1My45MDk1OTIzMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTczMTM3MjUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGZvcmNlIGFnaW5nIHdoZW4gZm9saW9zIGZhaWwgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBjb25zZWN1dGl2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxODo1My45MDk1OTc0MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjU1MTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlOTQyOGFkNmUxZGZiMGU2M2JjZDY4OWQ0MTRkYTNkZDBiYzM4MWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTg6MTg6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCA5YWRiMmFkMjFkYTU5Li5iMDYzYzU2ZWEzMGM2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTQzNCw2ICs0MzQsMTIgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiBcXHQgKi9cXG4gXFx0TFJVVkVDX0NHUk9VUF9DT05HRVNURUQsXFxuIFxcdExSVVZFQ19OT0RFX0NPTkdFU1RFRCxcXG4rXFx0LypcXG4rXFx0ICogTUdMUlU6IGV2aWN0aW9uIGZhaWxlZCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIG9uY2VcXG4rXFx0ICogd2hpbGUgdGhlIHdpbmRvdyB3YXMgYXQgTUFYX05SX0dFTlMuIEEgc2Vjb25kIGNvbnNlY3V0aXZlIGZhaWx1cmVcXG4rXFx0ICogZm9yY2VzIGFnaW5nIHNvIHJlc2lkdWFsIGZvbGlvcyBjYW5ub3QgcGluIG1pbl9zZXEgaW5kZWZpbml0ZWx5LlxcbitcXHQgKi9cXG4rXFx0TFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxcbiB9O1xcbiBcXG4gI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJkMWIxYWExMjU4MTkuLmMxOGRiMDhjNWUxMDMgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xNzUsNiArMTc1LDggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBpbW1lZGlhdGU7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBmaWxlX3Rha2VuO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgdGFrZW47XFxuK1xcdFxcdC8qIGZvbGlvcyBpc29sYXRlZCBieSBNR0xSVSBldmljdGlvbiBpbiB0aGUgY3VycmVudCBscnV2ZWMgcGFzcyAqL1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgaXNvbGF0ZWQ7XFxuIFxcdH0gbnI7XFxuIFxcbiBcXHQvKiBmb3IgcmVjb3JkaW5nIHRoZSByZWNsYWltZWQgc2xhYiBieSBub3cgKi9cXG5AQCAtNDc0OCw2ICs0NzUwLDcgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBzY2FuX2JhdGNoLFxcbiBcXHRcXHRcXHRcXHRzY2FubmVkLCBza2lwcGVkLCBpc29sYXRlZCxcXG4gXFx0XFx0XFx0XFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xcbitcXHRzYy1cXHUwMDNlbnIuaXNvbGF0ZWQgKz0gaXNvbGF0ZWQ7XFxuIFxcdGlmICh0eXBlID09IExSVV9HRU5fRklMRSlcXG4gXFx0XFx0c2MtXFx1MDAzZW5yLmZpbGVfdGFrZW4gKz0gaXNvbGF0ZWQ7XFxuIFxcdC8qXFxuQEAgLTQ5OTgsNiArNTAwMSwxMSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXHRsb25nIG5yX3RvX3NjYW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7XFxuIFxcdGludCBzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuK1xcdGJvb2wgYXR0ZW1wdGVkID0gZmFsc2U7XFxuK1xcdGJvb2wgcm90YXRlZCA9IGZhbHNlO1xcbitcXG4rXFx0LyogcGVyLWxydXZlYyBwYXNzOyBzYyBpcyBzaGFyZWQgYWNyb3NzIGxydXZlY3MgZHVyaW5nIHJlY2xhaW0gKi9cXG4rXFx0c2MtXFx1MDAzZW5yLmlzb2xhdGVkID0gMDtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdGludCBkZWx0YTtcXG5AQCAtNTAwNiw2ICs1MDE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0XFx0aWYgKG5yX3RvX3NjYW4gXFx1MDAzYz0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHRhdHRlbXB0ZWQgPSB0cnVlO1xcbiBcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG4gXFx0XFx0aWYgKCFkZWx0YSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTUwMjAsNiArNTAyOSw0MCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRXZpY3Rpb24gaXNvbGF0ZWQgbm90aGluZyB3aGlsZSB0aGUgc2xpZGluZyB3aW5kb3cgaXMgYWxyZWFkeSBhdFxcbitcXHQgKiBNQVhfTlJfR0VOUy4gSW4gdGhhdCBzdGF0ZSBzaG91bGRfcnVuX2FnaW5nKCkgaXMgZmFsc2UsIHNvXFxuK1xcdCAqIGdldF9ucl90b19zY2FuKCkgbmV2ZXIgY2FsbHMgdHJ5X3RvX2luY19tYXhfc2VxKCkuIFJlc2lkdWFsIGZvbGlvc1xcbitcXHQgKiB0aGF0IGZhaWwgaXNvbGF0ZV9mb2xpbygpIGNhbiBwaW4gbWluX3NlcSBhbmQgaGlkZSByZWNsYWltYWJsZVxcbitcXHQgKiBmb2xpb3MgaW4geW91bmdlciBnZW5lcmF0aW9ucy5cXG4rXFx0ICpcXG4rXFx0ICogUmVxdWlyZSB0d28gY29uc2VjdXRpdmUgaXNvbGF0ZSBmYWlsdXJlcyBvbiB0aGlzIGxydXZlYyBiZWZvcmVcXG4rXFx0ICogZm9yY2luZyBhZ2luZywgc28gYSBzaW5nbGUgbm8tcHJvZ3Jlc3MgYmF0Y2ggZG9lcyBub3Qgcm90YXRlIHRoZVxcbitcXHQgKiB3aW5kb3cuIFN1Y2Nlc3NmdWwgaXNvbGF0aW9uIGNsZWFycyB0aGUgc3RpY2t5IGJpdC5cXG4rXFx0ICpcXG4rXFx0ICogS2V5IG9mZiBzYy1cXHUwMDNlbnIuaXNvbGF0ZWQsIG5vdCBucl9yZWNsYWltZWQ6IGZvbGlvcyBpc29sYXRlZCBidXRcXG4rXFx0ICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvXFxuK1xcdCAqIG5vdCBwaW4gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0dGVtcHRlZCBcXHUwMDI2XFx1MDAyNiAhc2MtXFx1MDAzZW5yLmlzb2xhdGVkKSB7XFxuK1xcdFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuK1xcdFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuK1xcbitcXHRcXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyBcXHUwMDNjIG1heF9zZXEpIHtcXG4rXFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZscnV2ZWMtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRcXHRcXHRyb3RhdGVkID0gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzd2FwcGluZXNzLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdGNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsIFxcdTAwMjZscnV2ZWMtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKHNjLVxcdTAwM2Vuci5pc29sYXRlZCkge1xcbitcXHRcXHRjbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELCBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRvbyBtYW55IGZpbGUgY2FjaGUgaW4gdGhlIGNvbGRlc3QgZ2VuZXJhdGlvbiBjYW4ndCBiZSBldmljdGVkXFxuIFxcdCAqIGR1ZSB0byBiZWluZyBkaXJ0eSwgd2FrZSB1cCB0aGUgZmx1c2hlci5cXG5AQCAtNTA0Myw3ICs1MDg2LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0fVxcbiBcXG4gXFx0Lyogd2hldGhlciB0aGlzIGxydXZlYyBzaG91bGQgYmUgcm90YXRlZCAqL1xcbi1cXHRyZXR1cm4gbnJfdG9fc2NhbiBcXHUwMDNjIDA7XFxuK1xcdHJldHVybiBucl90b19zY2FuIFxcdTAwM2MgMCB8fCByb3RhdGVkO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTg6NTQuMjI2ODY0MDU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjU0MTQwOTE0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBmb3JjZSBhZ2luZyB3aGVuIGZvbGlvcyBmYWlsIHRvIGlzb2xhdGUgZnJvbSB0aGUgb2xkZXN0IGdlbmVyYXRpb24gY29uc2VjdXRpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU5NDI4YWQ2ZTFkZmIwZTYzYmNkNjg5ZDQxNGRhM2RkMGJjMzgxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE4OjE4OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDlhZGIyYWQyMWRhNTkuLmIwNjNjNTZlYTMwYzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDM0LDYgKzQzNCwxMiBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gXHQgKi9cbiBcdExSVVZFQ19DR1JPVVBfQ09OR0VTVEVELFxuIFx0TFJVVkVDX05PREVfQ09OR0VTVEVELFxuK1x0LypcbitcdCAqIE1HTFJVOiBldmljdGlvbiBmYWlsZWQgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBvbmNlXG4rXHQgKiB3aGlsZSB0aGUgd2luZG93IHdhcyBhdCBNQVhfTlJfR0VOUy4gQSBzZWNvbmQgY29uc2VjdXRpdmUgZmFpbHVyZVxuK1x0ICogZm9yY2VzIGFnaW5nIHNvIHJlc2lkdWFsIGZvbGlvcyBjYW5ub3QgcGluIG1pbl9zZXEgaW5kZWZpbml0ZWx5LlxuK1x0ICovXG4rXHRMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsXG4gfTtcbiBcbiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJkMWIxYWExMjU4MTkuLmMxOGRiMDhjNWUxMDMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xNzUsNiArMTc1LDggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHRcdHVuc2lnbmVkIGludCBpbW1lZGlhdGU7XG4gXHRcdHVuc2lnbmVkIGludCBmaWxlX3Rha2VuO1xuIFx0XHR1bnNpZ25lZCBpbnQgdGFrZW47XG4rXHRcdC8qIGZvbGlvcyBpc29sYXRlZCBieSBNR0xSVSBldmljdGlvbiBpbiB0aGUgY3VycmVudCBscnV2ZWMgcGFzcyAqL1xuK1x0XHR1bnNpZ25lZCBpbnQgaXNvbGF0ZWQ7XG4gXHR9IG5yO1xuIFxuIFx0LyogZm9yIHJlY29yZGluZyB0aGUgcmVjbGFpbWVkIHNsYWIgYnkgbm93ICovXG5AQCAtNDc0OCw2ICs0NzUwLDcgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cdTAwM2VyZWNsYWltX2lkeCwgc2MtXHUwMDNlb3JkZXIsIHNjYW5fYmF0Y2gsXG4gXHRcdFx0XHRzY2FubmVkLCBza2lwcGVkLCBpc29sYXRlZCxcbiBcdFx0XHRcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcbitcdHNjLVx1MDAzZW5yLmlzb2xhdGVkICs9IGlzb2xhdGVkO1xuIFx0aWYgKHR5cGUgPT0gTFJVX0dFTl9GSUxFKVxuIFx0XHRzYy1cdTAwM2Vuci5maWxlX3Rha2VuICs9IGlzb2xhdGVkO1xuIFx0LypcbkBAIC00OTk4LDYgKzUwMDEsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGxvbmcgbnJfdG9fc2NhbjtcbiBcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7XG4gXHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuK1x0Ym9vbCBhdHRlbXB0ZWQgPSBmYWxzZTtcbitcdGJvb2wgcm90YXRlZCA9IGZhbHNlO1xuK1xuK1x0LyogcGVyLWxydXZlYyBwYXNzOyBzYyBpcyBzaGFyZWQgYWNyb3NzIGxydXZlY3MgZHVyaW5nIHJlY2xhaW0gKi9cbitcdHNjLVx1MDAzZW5yLmlzb2xhdGVkID0gMDtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdGludCBkZWx0YTtcbkBAIC01MDA2LDYgKzUwMTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRpZiAobnJfdG9fc2NhbiBcdTAwM2M9IDApXG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGF0dGVtcHRlZCA9IHRydWU7XG4gXHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xuIFx0XHRpZiAoIWRlbHRhKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTUwMjAsNiArNTAyOSw0MCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBFdmljdGlvbiBpc29sYXRlZCBub3RoaW5nIHdoaWxlIHRoZSBzbGlkaW5nIHdpbmRvdyBpcyBhbHJlYWR5IGF0XG4rXHQgKiBNQVhfTlJfR0VOUy4gSW4gdGhhdCBzdGF0ZSBzaG91bGRfcnVuX2FnaW5nKCkgaXMgZmFsc2UsIHNvXG4rXHQgKiBnZXRfbnJfdG9fc2NhbigpIG5ldmVyIGNhbGxzIHRyeV90b19pbmNfbWF4X3NlcSgpLiBSZXNpZHVhbCBmb2xpb3NcbitcdCAqIHRoYXQgZmFpbCBpc29sYXRlX2ZvbGlvKCkgY2FuIHBpbiBtaW5fc2VxIGFuZCBoaWRlIHJlY2xhaW1hYmxlXG4rXHQgKiBmb2xpb3MgaW4geW91bmdlciBnZW5lcmF0aW9ucy5cbitcdCAqXG4rXHQgKiBSZXF1aXJlIHR3byBjb25zZWN1dGl2ZSBpc29sYXRlIGZhaWx1cmVzIG9uIHRoaXMgbHJ1dmVjIGJlZm9yZVxuK1x0ICogZm9yY2luZyBhZ2luZywgc28gYSBzaW5nbGUgbm8tcHJvZ3Jlc3MgYmF0Y2ggZG9lcyBub3Qgcm90YXRlIHRoZVxuK1x0ICogd2luZG93LiBTdWNjZXNzZnVsIGlzb2xhdGlvbiBjbGVhcnMgdGhlIHN0aWNreSBiaXQuXG4rXHQgKlxuK1x0ICogS2V5IG9mZiBzYy1cdTAwM2Vuci5pc29sYXRlZCwgbm90IG5yX3JlY2xhaW1lZDogZm9saW9zIGlzb2xhdGVkIGJ1dFxuK1x0ICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvXG4rXHQgKiBub3QgcGluIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbi5cbitcdCAqL1xuK1x0aWYgKGF0dGVtcHRlZCBcdTAwMjZcdTAwMjYgIXNjLVx1MDAzZW5yLmlzb2xhdGVkKSB7XG4rXHRcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4rXHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4rXG4rXHRcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TIFx1MDAzYyBtYXhfc2VxKSB7XG4rXHRcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNmxydXZlYy1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRcdHJvdGF0ZWQgPSB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBzd2FwcGluZXNzLCBmYWxzZSk7XG4rXHRcdFx0XHRjbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuK1x0XHRcdFx0XHQgIFx1MDAyNmxydXZlYy1cdTAwM2VmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsIFx1MDAyNmxydXZlYy1cdTAwM2VmbGFncyk7XG4rXHRcdH1cbitcdH0gZWxzZSBpZiAoc2MtXHUwMDNlbnIuaXNvbGF0ZWQpIHtcbitcdFx0Y2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWZsYWdzKTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBJZiB0b28gbWFueSBmaWxlIGNhY2hlIGluIHRoZSBjb2xkZXN0IGdlbmVyYXRpb24gY2FuJ3QgYmUgZXZpY3RlZFxuIFx0ICogZHVlIHRvIGJlaW5nIGRpcnR5LCB3YWtlIHVwIHRoZSBmbHVzaGVyLlxuQEAgLTUwNDMsNyArNTA4Niw3IEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHR9XG4gXG4gXHQvKiB3aGV0aGVyIHRoaXMgbHJ1dmVjIHNob3VsZCBiZSByb3RhdGVkICovXG4tXHRyZXR1cm4gbnJfdG9fc2NhbiBcdTAwM2MgMDtcbitcdHJldHVybiBucl90b19zY2FuIFx1MDAzYyAwIHx8IHJvdGF0ZWQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTg6NTQuMjI2ODY1NDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MTYyOTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNR0xSVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGBtbXpvbmUuaGAgYW5kIGB2bXNjYW4uY2AuIEFsd2F5cyBpbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCByZWZpbmluZyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGFsZ29yaXRobSwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgZW5hYmxlZCBieSBgQ09ORklHX0xSVV9HRU5gLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbW0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLCBidXQgbGV0J3MgYXNzdW1lIGl0IGlzLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnLCBgTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVEYCwgd2hpY2ggaGludHMgdGhhdCB0aGUgaXNvbGF0aW9uIHByb2Nlc3MgaXRzZWxmIGlzIGJlaW5nIHNjcnV0aW5pemVkLiBUaGF0J3MgZ29vZCwgaXNvbGF0aW9uIG9mIHBhZ2VzIGlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgc3RlcCBpbiBNR0xSVS4gSSBub3RpY2UgdGhleSdyZSBhZGRpbmcgYW4gYHVuc2lnbmVkIGludCBpc29sYXRlZGAgY291bnQgaW50byBgc2Nhbl9jb250cm9sYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXTigJlzIGludGVuZGVkIHRvIHRyYWNrIGlzb2xhdGlvbiBmYWlsdXJlcy4gSW5jcmVtZW50aW5nIGBzYy1cdTAwM2Vuci5pc29sYXRlZCArPSBpc29sYXRlZGAgaW4gYHNjYW5fZm9saW9zYCBpcyB0aGUga2V5LlxuXG5UaGVuLCBpbiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBpdCBnZXRzIHJlc2V0LCB3aGljaCBpcyBjcnVjaWFsIGZvciB0cmFja2luZyB0aGUgc2xpZGluZyB3aW5kb3cgc3RhdGUuIEkgY2FuIHRlbGwgdGhpcyBpcyBhbGwgYWJvdXQgbWFraW5nIHN1cmUgdGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoZXkncmUgdHJhY2tpbmcgaG93IG1hbnkgdGltZXMgaXNvbGF0aW9uIGZhaWxzLCBhbmQgYWZ0ZXIgY29uc2VjdXRpdmUgZmFpbHVyZXMsIGZvcmNlIGFnaW5nIHdpdGggYHRyeV90b19pbmNfbWF4X3NlcWAuIFRoYXQgc3VnZ2VzdHMgaXQncyB0cnlpbmcgdG8gYmUgc21hcnRlciBhYm91dCBub3QgZ2V0dGluZyBzdHVjayBpbiBhIHJ1dCB3aGVuIHRoZSBpc29sYXRpb24gcHJvY2VzcyBpc24ndCB5aWVsZGluZyBhbnl0aGluZy4gVGhhdCdzIGEgY2xldmVyIHdheSB0byBoYW5kbGUgZWRnZSBjYXNlcyBvciBzdWJvcHRpbWFsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluZGljYXRlcyB0aGlzIHBhdGNoIGFpbXMgdG8gcHJldmVudCBsaXZlbG9ja3MgaW4gcGFydGljdWxhci5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgbW9uaXRvcmluZyB0aGUgaXNvbGF0aW9uIGJlaGF2aW9yIG9mIE1HTFJVIGFuZCBpbXBsZW1lbnRpbmcgYSBtZWNoYW5pc20gdG8gZ3JhY2VmdWxseSBkZWdyYWRlIChmb3JjZSBhZ2luZykgaWYgaXQgZ2V0cyBzdHVjay4gVGhhdCdzIGEgc29saWQsIHRhcmdldGVkIGVuaGFuY2VtZW50IGZvciBNR0xSVSByb2J1c3RuZXNzIGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjAwLjA3ODQ5ODAzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDMyMjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM2Nz1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTEzNjktIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzNzA6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTEzNzEtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTM3OC1cXG5tbS9LY29uZmlnOjEzNzk6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTM4MC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTM4NC1cXG5tbS9LY29uZmlnOjEzODU6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTEzODYtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMzkzLVxcbm1tL0tjb25maWc6MTM5NDpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTEzOTUtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTowMC4xMTg4MjQzNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAyNzY4MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMUlUgR2VuZXJhdGlvbiBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAuIEl0IGxvb2tzIGxpa2UgdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgZW5hYmxlZCwgd2hpY2ggbWVhbnMgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHRvdWNoZXMgdGhlIGV4aXN0aW5nIGNvZGUgYmFzZS4gSSBzaG91bGQgY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC5cblxuQWxyaWdodCwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIGFmZmVjdGVkIGFyZSBgc2Nhbl9mb2xpb3NgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19vbmVgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIHRoZSBjb2RlPyBBbmQsIG1vcmUgY3JpdGljYWxseSwgd2hpY2ggb2YgdGhlc2UgYXJlIHRoZSByZWFsIGNvcmUgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGFuYWx5c2lzIG9uPyBJIHNlZSB0aGV5J3JlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBteSB1c3VhbCBhcHByb2FjaCBvZiBsb29raW5nIGZvciBjYWxsZXJzIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQ7IEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBjYWxsIHRoZXNlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZpbGUuXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgbW0vdm1zY2FuLmNgLiBJdCdzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIGxvb2sgZm9yIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlc2Ugc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgZnJvbSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSwgdWx0aW1hdGVseSB0byB1bmRlcnN0YW5kIGhvdyBMUlUgZ2VuZXJhdGlvbiBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGF0J3MgdGhlIGtleSB0byB0aGlzIG5ldyBmZWF0dXJlLCBhbmQgaG93IGl0IGltcGFjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjA0LjYyMTU5NDY2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE0MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTcyPXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTk4LVxcbm1tL3Ztc2Nhbi5jOjQ5OTk6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MDAwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwOTI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTExLVxcbm1tL3Ztc2Nhbi5jOjUxMTI6XFx0c3VjY2VzcyA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxMTMtXFxuLS1cXG5tbS92bXNjYW4uYz01MjAzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxNS1cXG5tbS92bXNjYW4uYzo1MjE2OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjE3LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6MDQuNjYzNzQwNDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NDkzODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBpdHMgQ2FsbGluZyBDb250ZXh0KipcblxuSG1tLCBsZXQncyBzZWUsIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgZnVuY3Rpb24uIFJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBzaHJpbmtfbHJ1dmVjYCAob3Igc29tZXRoaW5nICp2ZXJ5KiBzaW1pbGFyIGluIG5hbWUgYW5kIHB1cnBvc2UpIGlzIHRoZSBpbW1lZGlhdGUgY2FsbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byDigJMgaG93IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHNocmlua2luZyB0aGUgTFJVIHZlY3Rvci4gQW0gSSBjb3JyZWN0IGluIGFzc3VtaW5nIHRoYXQgaXQgaXMgY2FsbGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBzaHJpbmtfbHJ1dmVjYD8gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIGluIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHB1enpsZSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWFuYWdpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIHdpdGhpbiB0aGF0IHByb2Nlc3MuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCByZXR1cm4/IEFuZCBtb3N0IGltcG9ydGFudGx5LCAqd2h5KiBpcyBpdCBiZWluZyBjYWxsZWQgYXQgdGhpcyBwb2ludD8gSXMgaXQgYSBjb3JlIGFsZ29yaXRobWljIGNvbXBvbmVudCBvZiB0aGUgc2hyaW5raW5nIHByb2Nlc3Mgb3IgYSBoZWxwZXIgZnVuY3Rpb24/IFRoZSBhcmNoaXRlY3R1cmUgaGVyZSBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6MTAuMzU4NjgwMzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTEwMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTMzPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIwMi1cXG5tbS92bXNjYW4uYzo1MjAzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMDQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk0Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk1MC1cXG5tbS92bXNjYW4uYzo1OTUxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NTIte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk2Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc0LVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo1OTc1OlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01OTc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxMC40MDAxOTQyODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyOTc4NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiBgc2hyaW5rX2xydXZlY2AgYW5kIEl0cyBQbGFjZSoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uc28sIGBzaHJpbmtfbHJ1dmVjYC4gSXQncyBjbGVhciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlaXRoZXIgdGhyb3VnaCBgc2hyaW5rX25vZGVfbWVtY2dzYCBvciBkaXJlY3RseSBieSBgc2hyaW5rX25vZGVgLiBUaGF0J3MgdGhlIGtleS4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdGVsbHMgbWUgKmhvdyogaXQncyBiZWluZyB1c2VkLiBCb3RoIG9mIHRob3NlIHVwc3RyZWFtIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgY3JpdGljYWwgZm9yIG1lbW9yeSByZWNsYWltLiBgc2hyaW5rX25vZGVfbWVtY2dzYCBpbXBsaWVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgdGFyZ2V0aW5nIHJlY2xhaW0gYmFzZWQgb24gdGhvc2UgY29uc3RyYWludHMuIGBzaHJpbmtfbm9kZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWdnZXN0cyBhIGJyb2FkZXIsIG5vZGUtbGV2ZWwgcmVjbGFpbSBvcGVyYXRpb24uXG5cblNvLCBgc2hyaW5rX2xydXZlY2AgbXVzdCBiZSB0aGUgd29ya2hvcnNlIGZvciBhY3R1YWxseSBmcmVlaW5nIHVwIG1lbW9yeSB3aXRoaW4gYW4gTFJVIHZlY3Rvci4gVGhhdCBtYWtlcyB0b3RhbCBzZW5zZS4gV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHBhZ2UgbWFuYWdlbWVudCBhbmQgY2FjaGUgZXZpY3Rpb24g4oCTIHRoZSB3aG9sZSBwb2ludCBvZiB0aGVzZSBMUlUgbGlzdHMuIEl04oCZcyB0aGUgbWVjaGFuaXNtIHRvIGFjdHVhbGx5IHB1bGwgcGFnZXMgb2ZmIHRoZSBMUlUgbGlzdHMgdG8gbWVldCBlaXRoZXIgdGhlIHNwZWNpZmljIGRlbWFuZHMgb2YgYSBtZW1vcnkgY29udHJvbCBncm91cCBvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gcHJlc3N1cmUgdG8gcmVjbGFpbSBtZW1vcnkgb24gYSBub2RlLiBUaGUgY29udGV4dCBvZiB3aGljaCBmdW5jdGlvbiBpcyBjYWxsaW5nIGl0IHRlbGxzIG1lIGV4YWN0bHkgd2h5IHRob3NlIHBhZ2VzIGFyZSBiZWluZyByZWNsYWltZWQsIHdoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBpcyBkcml2aW5nIGl0LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaC4gSSdkIG5lZWQgdG8gZ28gbG9vayBhdCBleGFjdGx5ICpob3cqIGl0J3MgaW1wbGVtZW50ZWQuIEJ1dCB0aGUgY2FsbGVyIGluZm9ybWF0aW9uLCBpbiBpdHNlbGYsIGlzIHZlcnkgaW5mb3JtYXRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxNC4xMDMxNzU4MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDc3ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDk3Mj1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk5OC1cXG5tbS92bXNjYW4uYzo0OTk5OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTAwMC17XFxuLS1cXG5tbS92bXNjYW4uYz01MDkyPXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTExMS1cXG5tbS92bXNjYW4uYzo1MTEyOlxcdHN1Y2Nlc3MgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MTEzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTEzMz1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMDItXFxubW0vdm1zY2FuLmM6NTIwMzpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MjA0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMTUtXFxubW0vdm1zY2FuLmM6NTIxNjpcXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTIxNy1cXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxuLS1cXG5tbS92bXNjYW4uYz01OTQ2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTUwLVxcbm1tL3Ztc2Nhbi5jOjU5NTE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTk1Mi17XFxuLS1cXG5tbS92bXNjYW4uYz01OTU2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTYyLVxcbm1tL3Ztc2Nhbi5jOjU5NjM6c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNTk3NC1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NTk3NTpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTk3Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNTQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIxMy1cXG5tbS92bXNjYW4uYzo2MjE0OlxcdFxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjIxNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MDk9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MzktXFx0ICovXFxubW0vdm1zY2FuLmM6Njg0MDpcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxNC4xNDUyNjA0MDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MTU5ODE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgKipcblxuT2theSwgc28gSSdtIHNlZWluZyBzb21ldGhpbmcgaGVyZSB0aGF0IG1ha2VzIG1lIHJhaXNlIGFuIGV5ZWJyb3cuIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4uLiBpdCdzIGRlY2xhcmVkIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGEgZnVuY3Rpb24gbGlrZSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE5vbi1zdGF0aWMgZnVuY3Rpb25zIGhhdmUgZXh0ZXJuYWwgbGlua2FnZSwgbWVhbmluZyB0aGV5ICpjb3VsZCogYmUgY2FsbGVkIGZyb20gb3RoZXIgY29tcGlsYXRpb24gdW5pdHMuIElzIHRoYXQgdGhlIGludGVudCBoZXJlPyBJcyB0aGlzIGZ1bmN0aW9uIHBhcnQgb2YgYSBicm9hZGVyIEFQSSwgb3IgaXMgaXQgbGlrZWx5IGFuIG92ZXJzaWdodCBvciBhbiBpbmRpY2F0aW9uIG9mIGFuIG9wdGltaXphdGlvbiB0aGF0IHJlcXVpcmVzIGV4dGVybmFsIGFjY2Vzcz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24sIHdoZXJlIGl0J3MgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUncyBhbiBvYnZpb3VzIHJlYXNvbiBmb3IgaXRzIHZpc2liaWxpdHkuIEl0J3MgdGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgbG9vayBmb3IgdGhlIHJhdGlvbmFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjE3LjMzNjg2MDY5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNDk2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NzYzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwOC0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXFxubW0vdm1zY2FuLmM6NjgwOTp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4MTAtXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxNy4zNzc5MTYwOTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MTM4NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIFF1ZXN0aW9uIG9mIFNjb3BlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgbXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXNuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBNYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCB2aXNpYmlsaXR5IG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQgbWlnaHQgYmUgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbSwgd2hpY2ggcmFpc2VzIGNlcnRhaW4gaW1wbGljYXRpb25zIHdoZW4gY29uc2lkZXJpbmcgY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZnJlZWluZyBwYWdlcy5cblxuQnV0IHRoYXQncyBub3QgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUsIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgd2hhdCBhYm91dCBgc2hyaW5rX25vZGVgPyBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBmdW5jdGlvbiBhbmQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB1bmNsZWFyLiBIb3cgZG8gdGhleSBpbnRlcmFjdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub2RlIHNocmlua2luZyBwcm9jZXNzIHJlbGF0ZXMgdG8gdGhlIGFjdCBvZiBmcmVlaW5nIHBhZ2VzLiBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmUgb3BlcmF0aW9ucz8gRG9lcyBvbmUgdHJpZ2dlciB0aGUgb3RoZXI/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgZGF0YSBmbG93LiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gbm9kZSBzaHJpbmtpbmcgYW5kIGFjdHVhbCBwYWdlIGZyZWVpbmcgaXMgY3J1Y2lhbCBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkndmUgZ290IHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgdGhlIHB1enpsZSBmaXQgdG9nZXRoZXIgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToyMy4wNTkzMDU1MTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODQwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NDQ9c3RhdGljIGludCBjdXJyZW50X21heV90aHJvdHRsZSh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtMTk0OS0vKlxcbm1tL3Ztc2Nhbi5jOjE5NTA6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxcbm1tL3Ztc2Nhbi5jLTE5NTEtICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxuLS1cXG5tbS92bXNjYW4uYz01MjAzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIyMy1cXG5tbS92bXNjYW4uYzo1MjI0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTIyNS17XFxuLS1cXG5tbS92bXNjYW4uYz01OTUxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk1NS1cXG5tbS92bXNjYW4uYzo1OTU2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTk1Ny17XFxuLS1cXG5tbS92bXNjYW4uYz02MTAyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjE1My1cXG5tbS92bXNjYW4uYzo2MTU0OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MTU1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMzItXFxubW0vdm1zY2FuLmM6NjIzMzpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MjM0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDAtXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG5tbS92bXNjYW4uYzo2MjQxOlxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MjQyLVxcbi0tXFxubW0vdm1zY2FuLmMtNjI1Ny1cXG5tbS92bXNjYW4uYzo2MjU4OlxcdHNocmlua19ub2RlX21lbWNncyhwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyNTktXFxuLS1cXG5tbS92bXNjYW4uYz02NDE4PXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0OTYtXFx0XFx0bGFzdF9wZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxubW0vdm1zY2FuLmM6NjQ5NzpcXHRcXHRzaHJpbmtfbm9kZSh6b25lLVxcdTAwM2V6b25lX3BnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjQ5OC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYz02NzYzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwOC0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXFxubW0vdm1zY2FuLmM6NjgwOTp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4MTAtXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzNS1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG5tbS92bXNjYW4uYzo2ODM2OlxcdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTY4MzctXFx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY5NTc9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNjk4MS1cXHRcXHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCdzXFxubW0vdm1zY2FuLmM6Njk4MjpcXHRcXHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxcbm1tL3Ztc2Nhbi5jLTY5ODMtXFx0XFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxcbi0tXFxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03MDc3LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwNzg6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzA3OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy03MDk0LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcwOTU6XFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy03MDk2LVxcbi0tXFxubW0vdm1zY2FuLmM9NzE1MT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzI1OC1cXG5tbS92bXNjYW4uYzo3MjU5OlxcdFxcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xcbm1tL3Ztc2Nhbi5jLTcyNjAtXFx0XFx0c2MubnJfc2Nhbm5lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy03MjcwLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcyNzE6XFx0XFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKSlcXG5tbS92bXNjYW4uYy03MjcyLVxcdFxcdFxcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYz03ODIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg1MC1cXHRcXHRkbyB7XFxubW0vdm1zY2FuLmM6Nzg1MTpcXHRcXHRcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTc4NTItXFx0XFx0fSB3aGlsZSAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IC0tc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwM2U9IDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToyMy4xMDMxNTEyNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NzE2MDcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXJlY3QgUmVjbGFpbSBFbnRyeSBQb2ludHMqKlxuXG5SaWdodCwgc28sIGRpdmluZyBpbnRvIG1lbW9yeSByZWNsYWltLi4uIEkgc2VlIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB0aGUgcHJpbWFyeSB3b3JraG9yc2UgZm9yICpkaXJlY3QqIHJlY2xhaW0uIFRoYXQgbWFrZXMgc2Vuc2UsIGl0J3MgdGhlIGltbWVkaWF0ZSBhdHRlbXB0IHRvIGZyZWUgdXAgbWVtb3J5IHdoZW4gYSBwcm9jZXNzIGlzIGRpcmVjdGx5IHJlcXVlc3RpbmcgaXQsIGxpa2UgZHVyaW5nIGEgcGFnZSBmYXVsdCBvciBhIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVuIHRoZXJlJ3MgYGJhbGFuY2VfcGdkYXRgLCB0aGF0J3MgdGhlIGJpZyBvbmUsIHRoZSBlbnRyeSBwb2ludCBmb3IgYGtzd2FwZGAsIHdoaWNoIEkga25vdyBpcyB0aGUgYmFja2dyb3VuZCBkYWVtb24gY29uc3RhbnRseSB3b3JraW5nIHRvIGtlZXAgdGhlIHN5c3RlbSdzIG1lbW9yeSBoZWFsdGh5LiBBbmQsIG9mIGNvdXJzZSwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCB3aGljaCBJIGV4cGVjdCB3aWxsIGJlIHNpbWlsYXIsIGJ1dCBzcGVjaWZpY2FsbHkgY29uY2VybmVkIHdpdGggcmVjbGFpbWluZyBtZW1vcnkgd2l0aGluIGEgbWVtb3J5IGNncm91cC4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRob3NlIHR3bzogYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6MjYuOTcwMzE1MjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDM2MjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY4MDk9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NDgtXFxubW0vdm1zY2FuLmM6Njg0OTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4NTAtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODktI2Vsc2VcXG5tbS92bXNjYW4uYzo2ODkwOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg5MS1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzk0OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDA4LVxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxubW0vdm1zY2FuLmM6ODAwOTpcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTgwMTAtXFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToyNy4wMTA2ODIzMjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NjM1NjQ0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gRm9jdXMqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZnJlZWluZyB1cCBtZW1vcnkgcGFnZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGhlcmUgYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGluIHRoaXMgYXJlYS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGBiYWxhbmNlX3BnZGF0YC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgb25lLiBJc24ndCB0aGF0IHR5cGljYWxseSBhIHN0YXRpYyBmdW5jdGlvbj8gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGxpbmthZ2UgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlciB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnkga2V5IGltcGxpY2F0aW9ucyBvZiB0aGF0IHN0YXRpYyBkZWNsYXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjM3Ljg3NDI0OTY1MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2Mjg2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFsYW5jZV9wZ2RhdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02ODA5PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODM1LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4MzY6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjgzNy1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03MDQyLVxcdC8qXFxubW0vdm1zY2FuLmM6NzA0MzpcXHQgKiBUaGUgdGhyb3R0bGVkIHByb2Nlc3NlcyBhcmUgbm9ybWFsbHkgd29rZW4gdXAgaW4gYmFsYW5jZV9wZ2RhdCgpIGFzXFxubW0vdm1zY2FuLmMtNzA0NC1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxuLS1cXG5tbS92bXNjYW4uYy03MDQ3LVxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzA0ODpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYy03MDQ5LVxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbi0tXFxubW0vdm1zY2FuLmMtNzA1MS1cXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYzo3MDUyOlxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG5tbS92bXNjYW4uYy03MDUzLVxcdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXFxuLS1cXG5tbS92bXNjYW4uYz03MTMzPWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTM4LS8qXFxubW0vdm1zY2FuLmM6NzEzOTogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcxNDAtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MTUwLSAqL1xcbm1tL3Ztc2Nhbi5jOjcxNTE6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MTUyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc0ODE9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1MjctXFx0XFx0LypcXG5tbS92bXNjYW4uYzo3NTI4OlxcdFxcdCAqIFdlIGNhbiBzcGVlZCB1cCB0aGF3aW5nIHRhc2tzIGlmIHdlIGRvbid0IGNhbGwgYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTc1MjktXFx0XFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxcbi0tXFxubW0vdm1zY2FuLmMtNzU0My1cXHRcXHRcXHRcXHRcXHRcXHRhbGxvY19vcmRlcik7XFxubW0vdm1zY2FuLmM6NzU0NDpcXHRcXHRyZWNsYWltX29yZGVyID0gYmFsYW5jZV9wZ2RhdChwZ2RhdCwgYWxsb2Nfb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU0NS1cXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTozNy45MTU4ODU4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMwOTA1NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgQ29udW5kcnVtcyoqXG5cbkFscmlnaHQsIHNvIGBiYWxhbmNlX3BnZGF0YCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIHZhcmlhYmxlLCB0aGF0J3MgY2xlYXIuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYGtzd2FwZGA/IEl0J3MgYSBrZXJuZWwgdGhyZWFkLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3RpbmcgaW4gdGhpcyB3aG9sZSBjb250ZXh0LlxuXG5NeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiB3aWxsIGJlIGB0cnlfdG9fZnJlZV9wYWdlc2AgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIHRvIHNlZSBob3cgdGhlc2UgZWxlbWVudHMgcmVsYXRlIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2UgZnJlZWluZy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTo0MS42NDY3OTQ3MTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzUzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY1MTA9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1NDAtICovXFxubW0vdm1zY2FuLmM6NjU0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY1NDItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2ODM9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzYyLVxcbm1tL3Ztc2Nhbi5jOjY3NjM6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjc2NC1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02Nzk3LVxcbm1tL3Ztc2Nhbi5jOjY3OTg6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc5OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODAtXFxubW0vdm1zY2FuLmM6Njg4MTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODgyLVxcbi0tXFxubW0vdm1zY2FuLmM9NzY0Mj11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NjEtXFxubW0vdm1zY2FuLmM6NzY2MjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NjYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTo0MS42ODk1NTQwMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5MjY1MjkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBUaGV5J3JlIGFsbCBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5J3JlIGVudHJ5IHBvaW50cyBhbmQgcG90ZW50aWFsIHRhcmdldHMuIFRoZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBNR0xSVSBldmljdGlvbiBtZWNoYW5pc20gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzbyB0aGlzIGFyZWEgd2FycmFudHMgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYExSVV9HRU5gIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT05GSUdfTFJVX0dFTmAgb3IgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBJJ2xsIGFkZCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB0byBiZSBzdXJlIEknbSB0ZXN0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGlzIGlzIGNvcmUgdG8gdGhlIGZlYXR1cmUuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBpbmNsdWRpbmcgY29yZSBNR0xSVSBldmljdGlvbiBsb2dpYywgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgcHJpb3JpdHkuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gcmVjbGFpbXMgbWVtb3J5IGlzIGNyaXRpY2FsLCBhbmQgdGhlcmUncyBib3VuZCB0byBiZSBhIGxvdCBvZiBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIHdoZW4gd29ya2luZyB3aXRoIE1HTFJVLiBJIG5lZWQgdG8gYmUgZXh0cmEgdGhvcm91Z2guXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTG9va2luZyBhdCBgbW0vdm1zY2FuLmNgLCBJIHNlZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgcmVjbGFpbS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGhhbmRsZXMgbWVtb3J5IGNncm91cCByZWNsYWltLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBpcyBhc3NvY2lhdGVkIHdpdGggaGliZXJuYXRpb24uIEknbGwgbmVlZCB0byBrZWVwIHRob3NlIGRpc3RpbmN0aW9ucyBpbiBtaW5kIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGVzdCBjYXNlcyBhbmQgcG90ZW50aWFsIGZhdWx0IHNjZW5hcmlvcy5cblxuVGhlIGtleSBzeW1ib2xzIEknbSBmb2N1c2VkIG9uIGFyZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IGZ1enppbmcgaGFybmVzc2VzIHRoZXNlIGVudHJ5IHBvaW50cyBlZmZpY2llbnRseS5cblxuTm93LCBJJ2xsIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBMUlVfR0VOX0VOQUJMRURgIGlzIHN1ZmZpY2llbnQgZm9yIGVuYWJsaW5nIHRoZSBuZXcgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6NDcuNjgyMjA5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzA0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzNzA9Y29uZmlnIExSVV9HRU5cXG4tLVxcbm1tL0tjb25maWctMTM3OC1cXG5tbS9LY29uZmlnOjEzNzk6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTM4MC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6NDcuNzIzOTE5Mjk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjQ4NzExOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGBMUlVfR0VOX0VOQUJMRURgIEltcGFjdCoqXG5cblJpZ2h0LCBgTFJVX0dFTl9FTkFCTEVEYC4uLiB0aGF0J3MgdGhlIGtleS4gVGhhdCBtYWNybydzIGxpa2VseSBzZXR0aW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIGJlIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBMZXQncyBjb25maXJtIHRoaXMgYnkgdHJhY2luZyB0aGUgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBscnVfZ2VuX2VuYWJsZWQoKWAgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBjb25kaXRpb25zIGdvdmVybiBpdHMgcmV0dXJuIHZhbHVlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTo1MS43ODg3OTI5NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTQzMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZW5hYmxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04NjU9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04ODktXFxubW0vdm1zY2FuLmM6ODkwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTg5MS1cXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODU9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjg5LVxcbm1tL3Ztc2Nhbi5jOjIyOTA6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTIyOTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NTM1Mz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01MzYzLVxcbm1tL3Ztc2Nhbi5jOjUzNjQ6XFx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vdm1zY2FuLmMtNTM2NS1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NTE9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ3Ny1cXG5tbS92bXNjYW4uYzo1NDc4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XFxubW0vdm1zY2FuLmMtNTQ3OS1cXG5tbS92bXNjYW4uYz01NDgwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcXG5tbS92bXNjYW4uYzo1NDgyOlxcdFxcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jLTU0ODMtXFx0TlVMTFxcbi0tXFxubW0vdm1zY2FuLmM9NTg2NT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg3Mi1cXHRscnVnZW4tXFx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyArIDE7XFxubW0vdm1zY2FuLmM6NTg3MzpcXHRscnVnZW4tXFx1MDAzZWVuYWJsZWQgPSBscnVfZ2VuX2VuYWJsZWQoKTtcXG5tbS92bXNjYW4uYy01ODc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk2Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTczLVxcbm1tL3Ztc2Nhbi5jOjU5NzQ6XFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTU5NzUtXFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjIzMz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMzgtXFxubW0vdm1zY2FuLmM6NjIzOTpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2IHJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYy02MjQwLVxcdFxcdG1lbXNldChcXHUwMDI2c2MtXFx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXFx1MDAzZW5yKSk7XFxuLS1cXG5tbS92bXNjYW4uYz02NTEwPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTE0LVxcbm1tL3Ztc2Nhbi5jOjY1MTU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTY1MTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NjkwMD1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02OTA0LVxcbm1tL3Ztc2Nhbi5jOjY5MDU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy02OTA2LVxcdFxcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6NTEuODI5OTQzMjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczMTM4MTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNR0xSVSBFdmljdGlvbiBMb2dpYyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBhbHRlcmluZyB0aGUgZXZpY3Rpb24gbG9naWMgd2l0aGluIE1HTFJVLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHNpdHVhdGlvbnMgd2hlcmUgZm9saW9zIGFyZSBnZXR0aW5nIHN0dWNrLCBwZXJwZXR1YWxseSBwaW5uaW5nIGBtaW5fc2VxYCwgcHJlc3VtYWJseSBkdWUgdG8gaXNvbGF0aW9uIGZhaWx1cmVzIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLiBUaGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0d28gY29uZmlndXJhdGlvbnM6IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIHdoaWNoIGFyZSBjZW50cmFsIHRvIHRoaXMuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIGludHJvZHVjaW5nIGEgbmV3IGZsYWcsIGBMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRURgLCB0byB0cmFjayAqY29uc2VjdXRpdmUqIGlzb2xhdGlvbiBmYWlsdXJlcy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQg4oCTIGluc3RlYWQgb2YgbGV0dGluZyB0aGVzZSBzdHVjayBmb2xpb3MgaW5kZWZpbml0ZWx5IGJsb2NrIHRoZSBwcm9jZXNzLCB0aGUgcGF0Y2ggZm9yY2VzIGFnaW5nIHdoZW4gdGhlIGlzb2xhdGlvbiBhdHRlbXB0cyBhcmUgcmVwZWF0ZWRseSBmYWlsaW5nLiBUaGF0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSB0aGVyZSwgc28gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhleSdyZSB0YXJnZXRpbmcgZm9yIGZvY3VzZWQgZnV6emluZyBzZWVtIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBJdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRoYXQgdGhleSdyZSByZWxhdGVkIHRvIHBhZ2UgZnJlZWluZyBhbmQgbWVtb3J5IHJlY2xhaW0sIGdpdmVuIHRoZSBNR0xSVSBjb250ZXh0LlxuXG5JJ20gY29uZmlkZW50IHRoaXMgd2lsbCBoYXZlIGVmZmVjdHMgb24gbWVtb3J5IG1hbmFnZW1lbnQsIHNvIEkgYW0gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzIsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjU5LjU2MTMyNjY2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjI1OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGZvcmNlIGFnaW5nIHdoZW4gZm9saW9zIGZhaWwgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBjb25zZWN1dGl2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3Nocmlua19ub2RlXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 17:59:45 +0000 UTC FinishedAt: 2026-07-31 18:20:01 +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": "5c4851e4cdfc3204128f88991be64a6e3929d3d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "5c4851e4cdfc3204128f88991be64a6e3929d3d0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "ea908a97-2916-421a-b8c0-419e5a5a2768" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "mem_cgroup_shrink_node", "shrink_all_memory" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTk0MjhhZDZlMWRmYjBlNjNiY2Q2ODlkNDE0ZGEzZGQwYmMzODFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTg6MTg6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDlhZGIyYWQyMWRhNTkuLmIwNjNjNTZlYTMwYzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDM0LDYgJiM0Mzs0MzQsMTIgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuIFx0ICovXG4gXHRMUlVWRUNfQ0dST1VQX0NPTkdFU1RFRCxcbiBcdExSVVZFQ19OT0RFX0NPTkdFU1RFRCxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1HTFJVOiBldmljdGlvbiBmYWlsZWQgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBvbmNlXG4mIzQzO1x0ICogd2hpbGUgdGhlIHdpbmRvdyB3YXMgYXQgTUFYX05SX0dFTlMuIEEgc2Vjb25kIGNvbnNlY3V0aXZlIGZhaWx1cmVcbiYjNDM7XHQgKiBmb3JjZXMgYWdpbmcgc28gcmVzaWR1YWwgZm9saW9zIGNhbm5vdCBwaW4gbWluX3NlcSBpbmRlZmluaXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0TFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuIH07XG4gXG4gI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiZDFiMWFhMTI1ODE5Li5jMThkYjA4YzVlMTAzIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTc1LDYgJiM0MzsxNzUsOCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiBcdFx0dW5zaWduZWQgaW50IGltbWVkaWF0ZTtcbiBcdFx0dW5zaWduZWQgaW50IGZpbGVfdGFrZW47XG4gXHRcdHVuc2lnbmVkIGludCB0YWtlbjtcbiYjNDM7XHRcdC8qIGZvbGlvcyBpc29sYXRlZCBieSBNR0xSVSBldmljdGlvbiBpbiB0aGUgY3VycmVudCBscnV2ZWMgcGFzcyAqL1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGlzb2xhdGVkO1xuIFx0fSBucjtcbiBcbiBcdC8qIGZvciByZWNvcmRpbmcgdGhlIHJlY2xhaW1lZCBzbGFiIGJ5IG5vdyAqL1xuQEAgLTQ3NDgsNiAmIzQzOzQ3NTAsNyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgc2Nhbl9iYXRjaCxcbiBcdFx0XHRcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxuIFx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuJiM0MztcdHNjLVx1MDAzZW5yLmlzb2xhdGVkICYjNDM7PSBpc29sYXRlZDtcbiBcdGlmICh0eXBlID09IExSVV9HRU5fRklMRSlcbiBcdFx0c2MtXHUwMDNlbnIuZmlsZV90YWtlbiAmIzQzOz0gaXNvbGF0ZWQ7XG4gXHQvKlxuQEAgLTQ5OTgsNiAmIzQzOzUwMDEsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGxvbmcgbnJfdG9fc2NhbjtcbiBcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7XG4gXHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuJiM0MztcdGJvb2wgYXR0ZW1wdGVkID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCByb3RhdGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIHBlci1scnV2ZWMgcGFzczsgc2MgaXMgc2hhcmVkIGFjcm9zcyBscnV2ZWNzIGR1cmluZyByZWNsYWltICovXG4mIzQzO1x0c2MtXHUwMDNlbnIuaXNvbGF0ZWQgPSAwO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0aW50IGRlbHRhO1xuQEAgLTUwMDYsNiAmIzQzOzUwMTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRpZiAobnJfdG9fc2NhbiBcdTAwM2M9IDApXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRhdHRlbXB0ZWQgPSB0cnVlO1xuIFx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbiBcdFx0aWYgKCFkZWx0YSlcbiBcdFx0XHRicmVhaztcbkBAIC01MDIwLDYgJiM0Mzs1MDI5LDQwIEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRXZpY3Rpb24gaXNvbGF0ZWQgbm90aGluZyB3aGlsZSB0aGUgc2xpZGluZyB3aW5kb3cgaXMgYWxyZWFkeSBhdFxuJiM0MztcdCAqIE1BWF9OUl9HRU5TLiBJbiB0aGF0IHN0YXRlIHNob3VsZF9ydW5fYWdpbmcoKSBpcyBmYWxzZSwgc29cbiYjNDM7XHQgKiBnZXRfbnJfdG9fc2NhbigpIG5ldmVyIGNhbGxzIHRyeV90b19pbmNfbWF4X3NlcSgpLiBSZXNpZHVhbCBmb2xpb3NcbiYjNDM7XHQgKiB0aGF0IGZhaWwgaXNvbGF0ZV9mb2xpbygpIGNhbiBwaW4gbWluX3NlcSBhbmQgaGlkZSByZWNsYWltYWJsZVxuJiM0MztcdCAqIGZvbGlvcyBpbiB5b3VuZ2VyIGdlbmVyYXRpb25zLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmVxdWlyZSB0d28gY29uc2VjdXRpdmUgaXNvbGF0ZSBmYWlsdXJlcyBvbiB0aGlzIGxydXZlYyBiZWZvcmVcbiYjNDM7XHQgKiBmb3JjaW5nIGFnaW5nLCBzbyBhIHNpbmdsZSBuby1wcm9ncmVzcyBiYXRjaCBkb2VzIG5vdCByb3RhdGUgdGhlXG4mIzQzO1x0ICogd2luZG93LiBTdWNjZXNzZnVsIGlzb2xhdGlvbiBjbGVhcnMgdGhlIHN0aWNreSBiaXQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBLZXkgb2ZmIHNjLVx1MDAzZW5yLmlzb2xhdGVkLCBub3QgbnJfcmVjbGFpbWVkOiBmb2xpb3MgaXNvbGF0ZWQgYnV0XG4mIzQzO1x0ICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvXG4mIzQzO1x0ICogbm90IHBpbiB0aGUgb2xkZXN0IGdlbmVyYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGF0dGVtcHRlZCBcdTAwMjZcdTAwMjYgIXNjLVx1MDAzZW5yLmlzb2xhdGVkKSB7XG4mIzQzO1x0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuJiM0MztcdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNjIG1heF9zZXEpIHtcbiYjNDM7XHRcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZscnV2ZWMtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdFx0cm90YXRlZCA9IHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBzd2FwcGluZXNzLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0Y2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCxcbiYjNDM7XHRcdFx0XHRcdCAgXHUwMDI2bHJ1dmVjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKHNjLVx1MDAzZW5yLmlzb2xhdGVkKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELCBcdTAwMjZscnV2ZWMtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgdG9vIG1hbnkgZmlsZSBjYWNoZSBpbiB0aGUgY29sZGVzdCBnZW5lcmF0aW9uIGNhbiYjMzk7dCBiZSBldmljdGVkXG4gXHQgKiBkdWUgdG8gYmVpbmcgZGlydHksIHdha2UgdXAgdGhlIGZsdXNoZXIuXG5AQCAtNTA0Myw3ICYjNDM7NTA4Niw3IEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHR9XG4gXG4gXHQvKiB3aGV0aGVyIHRoaXMgbHJ1dmVjIHNob3VsZCBiZSByb3RhdGVkICovXG4tXHRyZXR1cm4gbnJfdG9fc2NhbiBcdTAwM2MgMDtcbiYjNDM7XHRyZXR1cm4gbnJfdG9fc2NhbiBcdTAwM2MgMCB8fCByb3RhdGVkO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBmb3JjZSBhZ2luZyB3aGVuIGZvbGlvcyBmYWlsIHRvIGlzb2xhdGUgZnJvbSB0aGUgb2xkZXN0IGdlbmVyYXRpb24gY29uc2VjdXRpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlOTQyOGFkNmUxZGZiMGU2M2JjZDY4OWQ0MTRkYTNkZDBiYzM4MWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxODoxODo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDlhZGIyYWQyMWRhNTkuLmIwNjNjNTZlYTMwYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDM0LDYgJiM0Mzs0MzQsMTIgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogCSAqLwogCUxSVVZFQ19DR1JPVVBfQ09OR0VTVEVELAogCUxSVVZFQ19OT0RFX0NPTkdFU1RFRCwKJiM0MzsJLyoKJiM0MzsJICogTUdMUlU6IGV2aWN0aW9uIGZhaWxlZCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIG9uY2UKJiM0MzsJICogd2hpbGUgdGhlIHdpbmRvdyB3YXMgYXQgTUFYX05SX0dFTlMuIEEgc2Vjb25kIGNvbnNlY3V0aXZlIGZhaWx1cmUKJiM0MzsJICogZm9yY2VzIGFnaW5nIHNvIHJlc2lkdWFsIGZvbGlvcyBjYW5ub3QgcGluIG1pbl9zZXEgaW5kZWZpbml0ZWx5LgomIzQzOwkgKi8KJiM0MzsJTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELAogfTsKIAogI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi8KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYmQxYjFhYTEyNTgxOS4uYzE4ZGIwOGM1ZTEwMyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTE3NSw2ICYjNDM7MTc1LDggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJCXVuc2lnbmVkIGludCBpbW1lZGlhdGU7CiAJCXVuc2lnbmVkIGludCBmaWxlX3Rha2VuOwogCQl1bnNpZ25lZCBpbnQgdGFrZW47CiYjNDM7CQkvKiBmb2xpb3MgaXNvbGF0ZWQgYnkgTUdMUlUgZXZpY3Rpb24gaW4gdGhlIGN1cnJlbnQgbHJ1dmVjIHBhc3MgKi8KJiM0MzsJCXVuc2lnbmVkIGludCBpc29sYXRlZDsKIAl9IG5yOwogCiAJLyogZm9yIHJlY29yZGluZyB0aGUgcmVjbGFpbWVkIHNsYWIgYnkgbm93ICovCkBAIC00NzQ4LDYgJiM0Mzs0NzUwLDcgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtJmd0O3JlY2xhaW1faWR4LCBzYy0mZ3Q7b3JkZXIsIHNjYW5fYmF0Y2gsCiAJCQkJc2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsCiAJCQkJdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOwomIzQzOwlzYy0mZ3Q7bnIuaXNvbGF0ZWQgJiM0Mzs9IGlzb2xhdGVkOwogCWlmICh0eXBlID09IExSVV9HRU5fRklMRSkKIAkJc2MtJmd0O25yLmZpbGVfdGFrZW4gJiM0Mzs9IGlzb2xhdGVkOwogCS8qCkBAIC00OTk4LDYgJiM0Mzs1MDAxLDExIEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJbG9uZyBucl90b19zY2FuOwogCXVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7CiAJaW50IHN3YXBwaW5lc3MgPSBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKTsKJiM0MzsJYm9vbCBhdHRlbXB0ZWQgPSBmYWxzZTsKJiM0MzsJYm9vbCByb3RhdGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBlci1scnV2ZWMgcGFzczsgc2MgaXMgc2hhcmVkIGFjcm9zcyBscnV2ZWNzIGR1cmluZyByZWNsYWltICovCiYjNDM7CXNjLSZndDtuci5pc29sYXRlZCA9IDA7CiAKIAl3aGlsZSAodHJ1ZSkgewogCQlpbnQgZGVsdGE7CkBAIC01MDA2LDYgJiM0Mzs1MDE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAkJaWYgKG5yX3RvX3NjYW4gJmx0Oz0gMCkKIAkJCWJyZWFrOwogCiYjNDM7CQlhdHRlbXB0ZWQgPSB0cnVlOwogCQlkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTsKIAkJaWYgKCFkZWx0YSkKIAkJCWJyZWFrOwpAQCAtNTAyMCw2ICYjNDM7NTAyOSw0MCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogRXZpY3Rpb24gaXNvbGF0ZWQgbm90aGluZyB3aGlsZSB0aGUgc2xpZGluZyB3aW5kb3cgaXMgYWxyZWFkeSBhdAomIzQzOwkgKiBNQVhfTlJfR0VOUy4gSW4gdGhhdCBzdGF0ZSBzaG91bGRfcnVuX2FnaW5nKCkgaXMgZmFsc2UsIHNvCiYjNDM7CSAqIGdldF9ucl90b19zY2FuKCkgbmV2ZXIgY2FsbHMgdHJ5X3RvX2luY19tYXhfc2VxKCkuIFJlc2lkdWFsIGZvbGlvcwomIzQzOwkgKiB0aGF0IGZhaWwgaXNvbGF0ZV9mb2xpbygpIGNhbiBwaW4gbWluX3NlcSBhbmQgaGlkZSByZWNsYWltYWJsZQomIzQzOwkgKiBmb2xpb3MgaW4geW91bmdlciBnZW5lcmF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogUmVxdWlyZSB0d28gY29uc2VjdXRpdmUgaXNvbGF0ZSBmYWlsdXJlcyBvbiB0aGlzIGxydXZlYyBiZWZvcmUKJiM0MzsJICogZm9yY2luZyBhZ2luZywgc28gYSBzaW5nbGUgbm8tcHJvZ3Jlc3MgYmF0Y2ggZG9lcyBub3Qgcm90YXRlIHRoZQomIzQzOwkgKiB3aW5kb3cuIFN1Y2Nlc3NmdWwgaXNvbGF0aW9uIGNsZWFycyB0aGUgc3RpY2t5IGJpdC4KJiM0MzsJICoKJiM0MzsJICogS2V5IG9mZiBzYy0mZ3Q7bnIuaXNvbGF0ZWQsIG5vdCBucl9yZWNsYWltZWQ6IGZvbGlvcyBpc29sYXRlZCBidXQKJiM0MzsJICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvCiYjNDM7CSAqIG5vdCBwaW4gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGF0dGVtcHRlZCAmYW1wOyZhbXA7ICFzYy0mZ3Q7bnIuaXNvbGF0ZWQpIHsKJiM0MzsJCURFRklORV9NQVhfU0VRKGxydXZlYyk7CiYjNDM7CQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwomIzQzOwomIzQzOwkJaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TICZsdDsgbWF4X3NlcSkgewomIzQzOwkJCWlmICh0ZXN0X2FuZF9zZXRfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwKJiM0MzsJCQkJCSAgICAgJmFtcDtscnV2ZWMtJmd0O2ZsYWdzKSkgewomIzQzOwkJCQlyb3RhdGVkID0gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwKJiM0MzsJCQkJCQkJICAgICBzd2FwcGluZXNzLCBmYWxzZSk7CiYjNDM7CQkJCWNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsCiYjNDM7CQkJCQkgICZhbXA7bHJ1dmVjLSZndDtmbGFncyk7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQljbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELCAmYW1wO2xydXZlYy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNjLSZndDtuci5pc29sYXRlZCkgewomIzQzOwkJY2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwgJmFtcDtscnV2ZWMtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogSWYgdG9vIG1hbnkgZmlsZSBjYWNoZSBpbiB0aGUgY29sZGVzdCBnZW5lcmF0aW9uIGNhbiYjMzk7dCBiZSBldmljdGVkCiAJICogZHVlIHRvIGJlaW5nIGRpcnR5LCB3YWtlIHVwIHRoZSBmbHVzaGVyLgpAQCAtNTA0Myw3ICYjNDM7NTA4Niw3IEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJfQogCiAJLyogd2hldGhlciB0aGlzIGxydXZlYyBzaG91bGQgYmUgcm90YXRlZCAqLwotCXJldHVybiBucl90b19zY2FuICZsdDsgMDsKJiM0MzsJcmV0dXJuIG5yX3RvX3NjYW4gJmx0OyAwIHx8IHJvdGF0ZWQ7CiB9CiAKIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1HTFJVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCDigJMgYG1tem9uZS5oYCBhbmQgYHZtc2Nhbi5jYC4gQWx3YXlzIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IHJlZmluaW5nIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgYWxnb3JpdGhtLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBtbS9LY29uZmlnYCBqdXN0IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIGJ1dCBsZXQmIzM5O3MgYXNzdW1lIGl0IGlzLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZywgYExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRGAsIHdoaWNoIGhpbnRzIHRoYXQgdGhlIGlzb2xhdGlvbiBwcm9jZXNzIGl0c2VsZiBpcyBiZWluZyBzY3J1dGluaXplZC4gVGhhdCYjMzk7cyBnb29kLCBpc29sYXRpb24gb2YgcGFnZXMgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdGVwIGluIE1HTFJVLiBJIG5vdGljZSB0aGV5JiMzOTtyZSBhZGRpbmcgYW4gYHVuc2lnbmVkIGludCBpc29sYXRlZGAgY291bnQgaW50byBgc2Nhbl9jb250cm9sYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXTigJlzIGludGVuZGVkIHRvIHRyYWNrIGlzb2xhdGlvbiBmYWlsdXJlcy4gSW5jcmVtZW50aW5nIGBzYy0mZ3Q7bnIuaXNvbGF0ZWQgJiM0Mzs9IGlzb2xhdGVkYCBpbiBgc2Nhbl9mb2xpb3NgIGlzIHRoZSBrZXkuCgpUaGVuLCBpbiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBpdCBnZXRzIHJlc2V0LCB3aGljaCBpcyBjcnVjaWFsIGZvciB0cmFja2luZyB0aGUgc2xpZGluZyB3aW5kb3cgc3RhdGUuIEkgY2FuIHRlbGwgdGhpcyBpcyBhbGwgYWJvdXQgbWFraW5nIHN1cmUgdGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoZXkmIzM5O3JlIHRyYWNraW5nIGhvdyBtYW55IHRpbWVzIGlzb2xhdGlvbiBmYWlscywgYW5kIGFmdGVyIGNvbnNlY3V0aXZlIGZhaWx1cmVzLCBmb3JjZSBhZ2luZyB3aXRoIGB0cnlfdG9faW5jX21heF9zZXFgLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIHRyeWluZyB0byBiZSBzbWFydGVyIGFib3V0IG5vdCBnZXR0aW5nIHN0dWNrIGluIGEgcnV0IHdoZW4gdGhlIGlzb2xhdGlvbiBwcm9jZXNzIGlzbiYjMzk7dCB5aWVsZGluZyBhbnl0aGluZy4gVGhhdCYjMzk7cyBhIGNsZXZlciB3YXkgdG8gaGFuZGxlIGVkZ2UgY2FzZXMgb3Igc3Vib3B0aW1hbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIHByZXZlbnQgbGl2ZWxvY2tzIGluIHBhcnRpY3VsYXIuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgbW9uaXRvcmluZyB0aGUgaXNvbGF0aW9uIGJlaGF2aW9yIG9mIE1HTFJVIGFuZCBpbXBsZW1lbnRpbmcgYSBtZWNoYW5pc20gdG8gZ3JhY2VmdWxseSBkZWdyYWRlIChmb3JjZSBhZ2luZykgaWYgaXQgZ2V0cyBzdHVjay4gVGhhdCYjMzk7cyBhIHNvbGlkLCB0YXJnZXRlZCBlbmhhbmNlbWVudCBmb3IgTUdMUlUgcm9idXN0bmVzcyBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM2Nz1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzY5LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzNzA6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTM3MS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTM3OC1cbm1tL0tjb25maWc6MTM3OTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTEzODAtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMzg0LVxubW0vS2NvbmZpZzoxMzg1OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTEzODYtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTM5My1cbm1tL0tjb25maWc6MTM5NDpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTM5NS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBMUlUgR2VuZXJhdGlvbiBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBzaG91bGQgZGVmaW5pdGVseSBiZSBlbmFibGVkLCB3aGljaCBtZWFucyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHRvdWNoZXMgdGhlIGV4aXN0aW5nIGNvZGUgYmFzZS4gSSBzaG91bGQgY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4KCkFscmlnaHQsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSBhZmZlY3RlZCBhcmUgYHNjYW5fZm9saW9zYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfb25lYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiB0aGUgY29kZT8gQW5kLCBtb3JlIGNyaXRpY2FsbHksIHdoaWNoIG9mIHRoZXNlIGFyZSB0aGUgcmVhbCBjb3JlIGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhbmFseXNpcyBvbj8gSSBzZWUgdGhleSYjMzk7cmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIG15IHVzdWFsIGFwcHJvYWNoIG9mIGxvb2tpbmcgZm9yIGNhbGxlcnMgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZDsgSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdoaWNoIGNhbGwgdGhlc2Ugd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgZmlsZS4KCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gbG9vayBmb3IgdGhlIGVudHJ5IHBvaW50cyB0byB0aGVzZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyBmcm9tIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLCB1bHRpbWF0ZWx5IHRvIHVuZGVyc3RhbmQgaG93IExSVSBnZW5lcmF0aW9uIGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB0aGlzIG5ldyBmZWF0dXJlLCBhbmQgaG93IGl0IGltcGFjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDk3Mj1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5OTgtXG5tbS92bXNjYW4uYzo0OTk5OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MDAwLXtcbi0tXG5tbS92bXNjYW4uYz01MDkyPXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxMTEtXG5tbS92bXNjYW4uYzo1MTEyOlx0c3VjY2VzcyA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTExMy1cbi0tXG5tbS92bXNjYW4uYz01MjAzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMTUtXG5tbS92bXNjYW4uYzo1MjE2Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTIxNy1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgYW5kIGl0cyBDYWxsaW5nIENvbnRleHQqKgoKSG1tLCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBzaHJpbmtfbHJ1dmVjYCAob3Igc29tZXRoaW5nICp2ZXJ5KiBzaW1pbGFyIGluIG5hbWUgYW5kIHB1cnBvc2UpIGlzIHRoZSBpbW1lZGlhdGUgY2FsbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byDigJMgaG93IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHNocmlua2luZyB0aGUgTFJVIHZlY3Rvci4gQW0gSSBjb3JyZWN0IGluIGFzc3VtaW5nIHRoYXQgaXQgaXMgY2FsbGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBzaHJpbmtfbHJ1dmVjYD8gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIGluIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHB1enpsZSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWFuYWdpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIHdpdGhpbiB0aGF0IHByb2Nlc3MuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCByZXR1cm4/IEFuZCBtb3N0IGltcG9ydGFudGx5LCAqd2h5KiBpcyBpdCBiZWluZyBjYWxsZWQgYXQgdGhpcyBwb2ludD8gSXMgaXQgYSBjb3JlIGFsZ29yaXRobWljIGNvbXBvbmVudCBvZiB0aGUgc2hyaW5raW5nIHByb2Nlc3Mgb3IgYSBoZWxwZXIgZnVuY3Rpb24/IFRoZSBhcmNoaXRlY3R1cmUgaGVyZSBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUxMzM9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTIwMi1cbm1tL3Ztc2Nhbi5jOjUyMDM6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MjA0LXtcbi0tXG5tbS92bXNjYW4uYz01OTQ2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk1MC1cbm1tL3Ztc2Nhbi5jOjU5NTE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTUyLXtcbi0tXG5tbS92bXNjYW4uYz01OTYzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTc0LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU5NzU6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU5NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiBgc2hyaW5rX2xydXZlY2AgYW5kIEl0cyBQbGFjZSoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLnNvLCBgc2hyaW5rX2xydXZlY2AuIEl0JiMzOTtzIGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGVpdGhlciB0aHJvdWdoIGBzaHJpbmtfbm9kZV9tZW1jZ3NgIG9yIGRpcmVjdGx5IGJ5IGBzaHJpbmtfbm9kZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdGVsbHMgbWUgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZC4gQm90aCBvZiB0aG9zZSB1cHN0cmVhbSBmdW5jdGlvbnMgYXJlLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBtZW1vcnkgcmVjbGFpbS4gYHNocmlua19ub2RlX21lbWNnc2AgaW1wbGllcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCB0YXJnZXRpbmcgcmVjbGFpbSBiYXNlZCBvbiB0aG9zZSBjb25zdHJhaW50cy4gYHNocmlua19ub2RlYCwgb24gdGhlIG90aGVyIGhhbmQsIHN1Z2dlc3RzIGEgYnJvYWRlciwgbm9kZS1sZXZlbCByZWNsYWltIG9wZXJhdGlvbi4KClNvLCBgc2hyaW5rX2xydXZlY2AgbXVzdCBiZSB0aGUgd29ya2hvcnNlIGZvciBhY3R1YWxseSBmcmVlaW5nIHVwIG1lbW9yeSB3aXRoaW4gYW4gTFJVIHZlY3Rvci4gVGhhdCBtYWtlcyB0b3RhbCBzZW5zZS4gV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHBhZ2UgbWFuYWdlbWVudCBhbmQgY2FjaGUgZXZpY3Rpb24g4oCTIHRoZSB3aG9sZSBwb2ludCBvZiB0aGVzZSBMUlUgbGlzdHMuIEl04oCZcyB0aGUgbWVjaGFuaXNtIHRvIGFjdHVhbGx5IHB1bGwgcGFnZXMgb2ZmIHRoZSBMUlUgbGlzdHMgdG8gbWVldCBlaXRoZXIgdGhlIHNwZWNpZmljIGRlbWFuZHMgb2YgYSBtZW1vcnkgY29udHJvbCBncm91cCBvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gcHJlc3N1cmUgdG8gcmVjbGFpbSBtZW1vcnkgb24gYSBub2RlLiBUaGUgY29udGV4dCBvZiB3aGljaCBmdW5jdGlvbiBpcyBjYWxsaW5nIGl0IHRlbGxzIG1lIGV4YWN0bHkgd2h5IHRob3NlIHBhZ2VzIGFyZSBiZWluZyByZWNsYWltZWQsIHdoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBpcyBkcml2aW5nIGl0LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaC4gSSYjMzk7ZCBuZWVkIHRvIGdvIGxvb2sgYXQgZXhhY3RseSAqaG93KiBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gQnV0IHRoZSBjYWxsZXIgaW5mb3JtYXRpb24sIGluIGl0c2VsZiwgaXMgdmVyeSBpbmZvcm1hdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5NzI9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTk4LVxubW0vdm1zY2FuLmM6NDk5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTAwMC17XG4tLVxubW0vdm1zY2FuLmM9NTA5Mj1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTExLVxubW0vdm1zY2FuLmM6NTExMjpcdHN1Y2Nlc3MgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxMTMtXG4tLVxubW0vdm1zY2FuLmM9NTEzMz1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjAyLVxubW0vdm1zY2FuLmM6NTIwMzpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUyMDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTUyMTUtXG5tbS92bXNjYW4uYzo1MjE2Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTIxNy1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU5NDY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTUwLVxubW0vdm1zY2FuLmM6NTk1MTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU5NTIte1xuLS1cbm1tL3Ztc2Nhbi5jPTU5NTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTYyLVxubW0vdm1zY2FuLmM6NTk2MzpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTY0LXtcbi0tXG5tbS92bXNjYW4uYy01OTc0LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU5NzU6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU5NzYtXG4tLVxubW0vdm1zY2FuLmM9NjE1ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjIxMy1cbm1tL3Ztc2Nhbi5jOjYyMTQ6XHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy02MjE1LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4MDk9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODM5LVx0ICovXG5tbS92bXNjYW4uYzo2ODQwOlx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4NDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIGhlcmUgdGhhdCBtYWtlcyBtZSByYWlzZSBhbiBleWVicm93LiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAuLi4gaXQmIzM5O3MgZGVjbGFyZWQgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBiaXQgdW51c3VhbCBmb3IgYSBmdW5jdGlvbiBsaWtlIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBleHRlcm5hbCBsaW5rYWdlLCBtZWFuaW5nIHRoZXkgKmNvdWxkKiBiZSBjYWxsZWQgZnJvbSBvdGhlciBjb21waWxhdGlvbiB1bml0cy4gSXMgdGhhdCB0aGUgaW50ZW50IGhlcmU/IElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGJyb2FkZXIgQVBJLCBvciBpcyBpdCBsaWtlbHkgYW4gb3ZlcnNpZ2h0IG9yIGFuIGluZGljYXRpb24gb2YgYW4gb3B0aW1pemF0aW9uIHRoYXQgcmVxdWlyZXMgZXh0ZXJuYWwgYWNjZXNzPyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlZmluaXRpb24sIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGFuZCB3aGV0aGVyIHRoZXJlJiMzOTtzIGFuIG9idmlvdXMgcmVhc29uIGZvciBpdHMgdmlzaWJpbGl0eS4gSXQmIzM5O3MgdGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgbG9vayBmb3IgdGhlIHJhdGlvbmFsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY3NjM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjgwOC0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODA5OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODEwLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IEEgUXVlc3Rpb24gb2YgU2NvcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIG15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIE1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgb2YgdGhhdCBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCBtaWdodCBiZSBjYWxsYWJsZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLCB3aGljaCByYWlzZXMgY2VydGFpbiBpbXBsaWNhdGlvbnMgd2hlbiBjb25zaWRlcmluZyBjb25jdXJyZW5jeSBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHBhZ2VzLgoKQnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBjcml0aWNhbCBwb2ludCBoZXJlLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYHNocmlua19ub2RlYD8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgdW5jbGVhci4gSG93IGRvIHRoZXkgaW50ZXJhY3Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbm9kZSBzaHJpbmtpbmcgcHJvY2VzcyByZWxhdGVzIHRvIHRoZSBhY3Qgb2YgZnJlZWluZyBwYWdlcy4gQXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlIG9wZXJhdGlvbnM/IERvZXMgb25lIHRyaWdnZXIgdGhlIG90aGVyPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGRhdGEgZmxvdy4gVGhlIGludGVycGxheSBiZXR3ZWVuIG5vZGUgc2hyaW5raW5nIGFuZCBhY3R1YWwgcGFnZSBmcmVlaW5nIGlzIGNydWNpYWwgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJiMzOTt2ZSBnb3QgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgdHdvIHBpZWNlcyBvZiB0aGUgcHV6emxlIGZpdCB0b2dldGhlciB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTQ0PXN0YXRpYyBpbnQgY3VycmVudF9tYXlfdGhyb3R0bGUodm9pZClcbi0tXG5tbS92bXNjYW4uYy0xOTQ5LS8qXG5tbS92bXNjYW4uYzoxOTUwOiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbm1tL3Ztc2Nhbi5jLTE5NTEtICogb2YgcmVjbGFpbWVkIHBhZ2VzXG4tLVxubW0vdm1zY2FuLmM9NTIwMz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjIzLVxubW0vdm1zY2FuLmM6NTIyNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIyNS17XG4tLVxubW0vdm1zY2FuLmM9NTk1MT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTU1LVxubW0vdm1zY2FuLmM6NTk1NjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTk1Ny17XG4tLVxubW0vdm1zY2FuLmM9NjEwMj1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy02MTUzLVxubW0vdm1zY2FuLmM6NjE1NDpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MTU1LXtcbi0tXG5tbS92bXNjYW4uYy02MjMyLVxubW0vdm1zY2FuLmM6NjIzMzpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYyMzQte1xuLS1cbm1tL3Ztc2Nhbi5jLTYyNDAtXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MjQxOlx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjQyLVxuLS1cbm1tL3Ztc2Nhbi5jLTYyNTctXG5tbS92bXNjYW4uYzo2MjU4Olx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTY0MTg9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY0OTYtXHRcdGxhc3RfcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG5tbS92bXNjYW4uYzo2NDk3Olx0XHRzaHJpbmtfbm9kZSh6b25lLVx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTY0OTgtXHR9XG4tLVxubW0vdm1zY2FuLmM9Njc2Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02ODA4LS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbm1tL3Ztc2Nhbi5jOjY4MDk6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY4MTAtXHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4MzUtXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY4MzY6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02ODM3LVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9Njk1Nz1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNjk4MS1cdFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjY5ODI6XHRcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXG5tbS92bXNjYW4uYy02OTgzLVx0XHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXG4tLVxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzA3Ny0gKi9cbm1tL3Ztc2Nhbi5jOjcwNzg6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MDc5LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy03MDk0LVx0ICovXG5tbS92bXNjYW4uYzo3MDk1Olx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTcwOTYtXG4tLVxubW0vdm1zY2FuLmM9NzE1MT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcyNTgtXG5tbS92bXNjYW4uYzo3MjU5Olx0XHQvKiBDYWxsIHNvZnQgbGltaXQgcmVjbGFpbSBiZWZvcmUgY2FsbGluZyBzaHJpbmtfbm9kZS4gKi9cbm1tL3Ztc2Nhbi5jLTcyNjAtXHRcdHNjLm5yX3NjYW5uZWQgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTcyNzAtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzI3MTpcdFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXHUwMDI2c2MpKVxubW0vdm1zY2FuLmMtNzI3Mi1cdFx0XHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTc4MjM9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vdm1zY2FuLmMtNzg1MC1cdFx0ZG8ge1xubW0vdm1zY2FuLmM6Nzg1MTpcdFx0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzg1Mi1cdFx0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXJlY3QgUmVjbGFpbSBFbnRyeSBQb2ludHMqKgoKUmlnaHQsIHNvLCBkaXZpbmcgaW50byBtZW1vcnkgcmVjbGFpbS4uLiBJIHNlZSB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgdGhlIHByaW1hcnkgd29ya2hvcnNlIGZvciAqZGlyZWN0KiByZWNsYWltLiBUaGF0IG1ha2VzIHNlbnNlLCBpdCYjMzk7cyB0aGUgaW1tZWRpYXRlIGF0dGVtcHQgdG8gZnJlZSB1cCBtZW1vcnkgd2hlbiBhIHByb2Nlc3MgaXMgZGlyZWN0bHkgcmVxdWVzdGluZyBpdCwgbGlrZSBkdXJpbmcgYSBwYWdlIGZhdWx0IG9yIGEgbWVtb3J5IGFsbG9jYXRpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGJhbGFuY2VfcGdkYXRgLCB0aGF0JiMzOTtzIHRoZSBiaWcgb25lLCB0aGUgZW50cnkgcG9pbnQgZm9yIGBrc3dhcGRgLCB3aGljaCBJIGtub3cgaXMgdGhlIGJhY2tncm91bmQgZGFlbW9uIGNvbnN0YW50bHkgd29ya2luZyB0byBrZWVwIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IGhlYWx0aHkuIEFuZCwgb2YgY291cnNlLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIHdoaWNoIEkgZXhwZWN0IHdpbGwgYmUgc2ltaWxhciwgYnV0IHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCByZWNsYWltaW5nIG1lbW9yeSB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRob3NlIHR3bzogYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjgwOT11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NDgtXG5tbS92bXNjYW4uYzo2ODQ5OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODUwLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4ODktI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjY4OTA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY4OTEtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmM9Nzk0OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4tLVxubW0vdm1zY2FuLmMtODAwOC1cdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcbm1tL3Ztc2Nhbi5jOjgwMDk6XHRcdFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcbm1tL3Ztc2Nhbi5jLTgwMTAtXHRcdFx0XHRcdFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uIEZvY3VzKioKCkFscmlnaHQsIEkmIzM5O20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZnJlZWluZyB1cCBtZW1vcnkgcGFnZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGhlcmUgYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGluIHRoaXMgYXJlYS4KCkhtbSwgd2FpdCBhIHNlY29uZC4uLiBgYmFsYW5jZV9wZ2RhdGAuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCBvbmUuIElzbiYjMzk7dCB0aGF0IHR5cGljYWxseSBhIHN0YXRpYyBmdW5jdGlvbj8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBsaW5rYWdlIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGluIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSBrZXkgaW1wbGljYXRpb25zIG9mIHRoYXQgc3RhdGljIGRlY2xhcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWxhbmNlX3BnZGF0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjgwOT11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4MzUtXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY4MzY6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02ODM3LVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzA0Mi1cdC8qXG5tbS92bXNjYW4uYzo3MDQzOlx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xubW0vdm1zY2FuLmMtNzA0NC1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbi0tXG5tbS92bXNjYW4uYy03MDQ3LVx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjcwNDg6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jLTcwNDktXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbi0tXG5tbS92bXNjYW4uYy03MDUxLVx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYzo3MDUyOlx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xubW0vdm1zY2FuLmMtNzA1My1cdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXG4tLVxubW0vdm1zY2FuLmM9NzEzMz1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxMzgtLypcbm1tL3Ztc2Nhbi5jOjcxMzk6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcxNDAtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzE1MC0gKi9cbm1tL3Ztc2Nhbi5jOjcxNTE6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTcxNTIte1xuLS1cbm1tL3Ztc2Nhbi5jPTc0ODE9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NTI3LVx0XHQvKlxubW0vdm1zY2FuLmM6NzUyODpcdFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJiMzOTt0IGNhbGwgYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNzUyOS1cdFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxuLS1cbm1tL3Ztc2Nhbi5jLTc1NDMtXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzU0NDpcdFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxubW0vdm1zY2FuLmMtNzU0NS1cdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCBDb251bmRydW1zKioKCkFscmlnaHQsIHNvIGBiYWxhbmNlX3BnZGF0YCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIHZhcmlhYmxlLCB0aGF0JiMzOTtzIGNsZWFyLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIHBvcHBpbmcgaW50byBteSBoZWFkIGlzLCB3aGF0IGFib3V0IGBrc3dhcGRgPyBJdCYjMzk7cyBhIGtlcm5lbCB0aHJlYWQsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3RpbmcgaW4gdGhpcyB3aG9sZSBjb250ZXh0LgoKTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgaW50ZXJhY3Rpb24gd2lsbCBiZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gc2VlIGhvdyB0aGVzZSBlbGVtZW50cyByZWxhdGUgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcGFnZSBmcmVlaW5nLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY1MTA9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NTQwLSAqL1xubW0vdm1zY2FuLmM6NjU0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjU0Mi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NjgzPXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NjItXG5tbS92bXNjYW4uYzo2NzYzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNjc2NC1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS92bXNjYW4uYy02Nzk3LVxubW0vdm1zY2FuLmM6Njc5ODpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02Nzk5LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4NDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODgwLVxubW0vdm1zY2FuLmM6Njg4MTpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODgyLVxuLS1cbm1tL3Ztc2Nhbi5jPTc2NDI9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzY2MS1cbm1tL3Ztc2Nhbi5jOjc2NjI6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzY2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBUaGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSYjMzk7cmUgZW50cnkgcG9pbnRzIGFuZCBwb3RlbnRpYWwgdGFyZ2V0cy4gVGhlIGZvY3VzIGlzIG9uIHRoZSBjb3JlIE1HTFJVIGV2aWN0aW9uIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHNvIHRoaXMgYXJlYSB3YXJyYW50cyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYExSVV9HRU5gIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT05GSUdfTFJVX0dFTmAgb3IgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgYWRkIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IHRvIGJlIHN1cmUgSSYjMzk7bSB0ZXN0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGlzIGlzIGNvcmUgdG8gdGhlIGZlYXR1cmUuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgaW5jbHVkaW5nIGNvcmUgTUdMUlUgZXZpY3Rpb24gbG9naWMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSBhIHByaW9yaXR5LiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIHJlY2xhaW1zIG1lbW9yeSBpcyBjcml0aWNhbCwgYW5kIHRoZXJlJiMzOTtzIGJvdW5kIHRvIGJlIGEgbG90IG9mIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgd2hlbiB3b3JraW5nIHdpdGggTUdMUlUuIEkgbmVlZCB0byBiZSBleHRyYSB0aG9yb3VnaC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIExvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgSSBzZWUgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IHJlY2xhaW0uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaGFuZGxlcyBtZW1vcnkgY2dyb3VwIHJlY2xhaW0sIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGFzc29jaWF0ZWQgd2l0aCBoaWJlcm5hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGRpc3RpbmN0aW9ucyBpbiBtaW5kIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGVzdCBjYXNlcyBhbmQgcG90ZW50aWFsIGZhdWx0IHNjZW5hcmlvcy4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzZWQgb24gYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgZnV6emluZyBoYXJuZXNzZXMgdGhlc2UgZW50cnkgcG9pbnRzIGVmZmljaWVudGx5LgoKTm93LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgd2hldGhlciBgTFJVX0dFTl9FTkFCTEVEYCBpcyBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGUgbmV3IGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM3MD1jb25maWcgTFJVX0dFTlxuLS1cbm1tL0tjb25maWctMTM3OC1cbm1tL0tjb25maWc6MTM3OTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTEzODAtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDY4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGBMUlVfR0VOX0VOQUJMRURgIEltcGFjdCoqCgpSaWdodCwgYExSVV9HRU5fRU5BQkxFRGAuLi4gdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IG1hY3JvJiMzOTtzIGxpa2VseSBzZXR0aW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIGJlIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgY29uZmlybSB0aGlzIGJ5IHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgY29uZGl0aW9ucyBnb3Zlcm4gaXRzIHJldHVybiB2YWx1ZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTg2NT1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04ODktXG5tbS92bXNjYW4uYzo4OTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy04OTEtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jPTIyODU9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjI4OS1cbm1tL3Ztc2Nhbi5jOjIyOTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjI5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTUzNTM9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNjMtXG5tbS92bXNjYW4uYzo1MzY0Olx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXG5tbS92bXNjYW4uYy01MzY1LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS92bXNjYW4uYz01NDUxPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDc3LVxubW0vdm1zY2FuLmM6NTQ3ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ3OS1cbm1tL3Ztc2Nhbi5jPTU0ODA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbm1tL3Ztc2Nhbi5jLTU0ODEtXHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmM6NTQ4MjpcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYy01NDgzLVx0TlVMTFxuLS1cbm1tL3Ztc2Nhbi5jPTU4NjU9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01ODcyLVx0bHJ1Z2VuLVx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyAmIzQzOyAxO1xubW0vdm1zY2FuLmM6NTg3MzpcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG5tbS92bXNjYW4uYy01ODc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5NjM9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NzMtXG5tbS92bXNjYW4uYzo1OTc0Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTU5NzUtXHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbi0tXG5tbS92bXNjYW4uYz02MjMzPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMzgtXG5tbS92bXNjYW4uYzo2MjM5Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjI0MC1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbi0tXG5tbS92bXNjYW4uYz02NTEwPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjUxNC1cbm1tL3Ztc2Nhbi5jOjY1MTU6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtNjUxNi1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTY5MDA9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY5MDQtXG5tbS92bXNjYW4uYzo2OTA1Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTY5MDYtXHRcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzIKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1HTFJVIEV2aWN0aW9uIExvZ2ljIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGFsdGVyaW5nIHRoZSBldmljdGlvbiBsb2dpYyB3aXRoaW4gTUdMUlUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggc2l0dWF0aW9ucyB3aGVyZSBmb2xpb3MgYXJlIGdldHRpbmcgc3R1Y2ssIHBlcnBldHVhbGx5IHBpbm5pbmcgYG1pbl9zZXFgLCBwcmVzdW1hYmx5IGR1ZSB0byBpc29sYXRpb24gZmFpbHVyZXMgZnJvbSB0aGUgb2xkZXN0IGdlbmVyYXRpb24uIFRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHR3byBjb25maWd1cmF0aW9uczogYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhpcy4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5ldyBmbGFnLCBgTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVEYCwgdG8gdHJhY2sgKmNvbnNlY3V0aXZlKiBpc29sYXRpb24gZmFpbHVyZXMuIFRoaXMgaXMgdGhlIGNydWNpYWwgYml0IOKAkyBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlc2Ugc3R1Y2sgZm9saW9zIGluZGVmaW5pdGVseSBibG9jayB0aGUgcHJvY2VzcywgdGhlIHBhdGNoIGZvcmNlcyBhZ2luZyB3aGVuIHRoZSBpc29sYXRpb24gYXR0ZW1wdHMgYXJlIHJlcGVhdGVkbHkgZmFpbGluZy4gVGhhdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlIHBvdGVudGlhbCBmb3IgZnV6emluZyBpcyBkZWZpbml0ZWx5IHRoZXJlLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGV5JiMzOTtyZSB0YXJnZXRpbmcgZm9yIGZvY3VzZWQgZnV6emluZyBzZWVtIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBJdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBwYWdlIGZyZWVpbmcgYW5kIG1lbW9yeSByZWNsYWltLCBnaXZlbiB0aGUgTUdMUlUgY29udGV4dC4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgd2lsbCBoYXZlIGVmZmVjdHMgb24gbWVtb3J5IG1hbmFnZW1lbnQsIHNvIEkgYW0gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxODo1My45MDk1OTIzMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTczMTM3MjUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGZvcmNlIGFnaW5nIHdoZW4gZm9saW9zIGZhaWwgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBjb25zZWN1dGl2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxODo1My45MDk1OTc0MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjU1MTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlOTQyOGFkNmUxZGZiMGU2M2JjZDY4OWQ0MTRkYTNkZDBiYzM4MWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTg6MTg6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCA5YWRiMmFkMjFkYTU5Li5iMDYzYzU2ZWEzMGM2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTQzNCw2ICs0MzQsMTIgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiBcXHQgKi9cXG4gXFx0TFJVVkVDX0NHUk9VUF9DT05HRVNURUQsXFxuIFxcdExSVVZFQ19OT0RFX0NPTkdFU1RFRCxcXG4rXFx0LypcXG4rXFx0ICogTUdMUlU6IGV2aWN0aW9uIGZhaWxlZCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIG9uY2VcXG4rXFx0ICogd2hpbGUgdGhlIHdpbmRvdyB3YXMgYXQgTUFYX05SX0dFTlMuIEEgc2Vjb25kIGNvbnNlY3V0aXZlIGZhaWx1cmVcXG4rXFx0ICogZm9yY2VzIGFnaW5nIHNvIHJlc2lkdWFsIGZvbGlvcyBjYW5ub3QgcGluIG1pbl9zZXEgaW5kZWZpbml0ZWx5LlxcbitcXHQgKi9cXG4rXFx0TFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxcbiB9O1xcbiBcXG4gI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJkMWIxYWExMjU4MTkuLmMxOGRiMDhjNWUxMDMgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xNzUsNiArMTc1LDggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBpbW1lZGlhdGU7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBmaWxlX3Rha2VuO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgdGFrZW47XFxuK1xcdFxcdC8qIGZvbGlvcyBpc29sYXRlZCBieSBNR0xSVSBldmljdGlvbiBpbiB0aGUgY3VycmVudCBscnV2ZWMgcGFzcyAqL1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgaXNvbGF0ZWQ7XFxuIFxcdH0gbnI7XFxuIFxcbiBcXHQvKiBmb3IgcmVjb3JkaW5nIHRoZSByZWNsYWltZWQgc2xhYiBieSBub3cgKi9cXG5AQCAtNDc0OCw2ICs0NzUwLDcgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBzY2FuX2JhdGNoLFxcbiBcXHRcXHRcXHRcXHRzY2FubmVkLCBza2lwcGVkLCBpc29sYXRlZCxcXG4gXFx0XFx0XFx0XFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xcbitcXHRzYy1cXHUwMDNlbnIuaXNvbGF0ZWQgKz0gaXNvbGF0ZWQ7XFxuIFxcdGlmICh0eXBlID09IExSVV9HRU5fRklMRSlcXG4gXFx0XFx0c2MtXFx1MDAzZW5yLmZpbGVfdGFrZW4gKz0gaXNvbGF0ZWQ7XFxuIFxcdC8qXFxuQEAgLTQ5OTgsNiArNTAwMSwxMSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXHRsb25nIG5yX3RvX3NjYW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7XFxuIFxcdGludCBzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuK1xcdGJvb2wgYXR0ZW1wdGVkID0gZmFsc2U7XFxuK1xcdGJvb2wgcm90YXRlZCA9IGZhbHNlO1xcbitcXG4rXFx0LyogcGVyLWxydXZlYyBwYXNzOyBzYyBpcyBzaGFyZWQgYWNyb3NzIGxydXZlY3MgZHVyaW5nIHJlY2xhaW0gKi9cXG4rXFx0c2MtXFx1MDAzZW5yLmlzb2xhdGVkID0gMDtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdGludCBkZWx0YTtcXG5AQCAtNTAwNiw2ICs1MDE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0XFx0aWYgKG5yX3RvX3NjYW4gXFx1MDAzYz0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHRhdHRlbXB0ZWQgPSB0cnVlO1xcbiBcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG4gXFx0XFx0aWYgKCFkZWx0YSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTUwMjAsNiArNTAyOSw0MCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRXZpY3Rpb24gaXNvbGF0ZWQgbm90aGluZyB3aGlsZSB0aGUgc2xpZGluZyB3aW5kb3cgaXMgYWxyZWFkeSBhdFxcbitcXHQgKiBNQVhfTlJfR0VOUy4gSW4gdGhhdCBzdGF0ZSBzaG91bGRfcnVuX2FnaW5nKCkgaXMgZmFsc2UsIHNvXFxuK1xcdCAqIGdldF9ucl90b19zY2FuKCkgbmV2ZXIgY2FsbHMgdHJ5X3RvX2luY19tYXhfc2VxKCkuIFJlc2lkdWFsIGZvbGlvc1xcbitcXHQgKiB0aGF0IGZhaWwgaXNvbGF0ZV9mb2xpbygpIGNhbiBwaW4gbWluX3NlcSBhbmQgaGlkZSByZWNsYWltYWJsZVxcbitcXHQgKiBmb2xpb3MgaW4geW91bmdlciBnZW5lcmF0aW9ucy5cXG4rXFx0ICpcXG4rXFx0ICogUmVxdWlyZSB0d28gY29uc2VjdXRpdmUgaXNvbGF0ZSBmYWlsdXJlcyBvbiB0aGlzIGxydXZlYyBiZWZvcmVcXG4rXFx0ICogZm9yY2luZyBhZ2luZywgc28gYSBzaW5nbGUgbm8tcHJvZ3Jlc3MgYmF0Y2ggZG9lcyBub3Qgcm90YXRlIHRoZVxcbitcXHQgKiB3aW5kb3cuIFN1Y2Nlc3NmdWwgaXNvbGF0aW9uIGNsZWFycyB0aGUgc3RpY2t5IGJpdC5cXG4rXFx0ICpcXG4rXFx0ICogS2V5IG9mZiBzYy1cXHUwMDNlbnIuaXNvbGF0ZWQsIG5vdCBucl9yZWNsYWltZWQ6IGZvbGlvcyBpc29sYXRlZCBidXRcXG4rXFx0ICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvXFxuK1xcdCAqIG5vdCBwaW4gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0dGVtcHRlZCBcXHUwMDI2XFx1MDAyNiAhc2MtXFx1MDAzZW5yLmlzb2xhdGVkKSB7XFxuK1xcdFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuK1xcdFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuK1xcbitcXHRcXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyBcXHUwMDNjIG1heF9zZXEpIHtcXG4rXFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZscnV2ZWMtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRcXHRcXHRyb3RhdGVkID0gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzd2FwcGluZXNzLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdGNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsIFxcdTAwMjZscnV2ZWMtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKHNjLVxcdTAwM2Vuci5pc29sYXRlZCkge1xcbitcXHRcXHRjbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELCBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRvbyBtYW55IGZpbGUgY2FjaGUgaW4gdGhlIGNvbGRlc3QgZ2VuZXJhdGlvbiBjYW4ndCBiZSBldmljdGVkXFxuIFxcdCAqIGR1ZSB0byBiZWluZyBkaXJ0eSwgd2FrZSB1cCB0aGUgZmx1c2hlci5cXG5AQCAtNTA0Myw3ICs1MDg2LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0fVxcbiBcXG4gXFx0Lyogd2hldGhlciB0aGlzIGxydXZlYyBzaG91bGQgYmUgcm90YXRlZCAqL1xcbi1cXHRyZXR1cm4gbnJfdG9fc2NhbiBcXHUwMDNjIDA7XFxuK1xcdHJldHVybiBucl90b19zY2FuIFxcdTAwM2MgMCB8fCByb3RhdGVkO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTg6NTQuMjI2ODY0MDU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjU0MTQwOTE0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBmb3JjZSBhZ2luZyB3aGVuIGZvbGlvcyBmYWlsIHRvIGlzb2xhdGUgZnJvbSB0aGUgb2xkZXN0IGdlbmVyYXRpb24gY29uc2VjdXRpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU5NDI4YWQ2ZTFkZmIwZTYzYmNkNjg5ZDQxNGRhM2RkMGJjMzgxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE4OjE4OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDlhZGIyYWQyMWRhNTkuLmIwNjNjNTZlYTMwYzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDM0LDYgKzQzNCwxMiBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gXHQgKi9cbiBcdExSVVZFQ19DR1JPVVBfQ09OR0VTVEVELFxuIFx0TFJVVkVDX05PREVfQ09OR0VTVEVELFxuK1x0LypcbitcdCAqIE1HTFJVOiBldmljdGlvbiBmYWlsZWQgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBvbmNlXG4rXHQgKiB3aGlsZSB0aGUgd2luZG93IHdhcyBhdCBNQVhfTlJfR0VOUy4gQSBzZWNvbmQgY29uc2VjdXRpdmUgZmFpbHVyZVxuK1x0ICogZm9yY2VzIGFnaW5nIHNvIHJlc2lkdWFsIGZvbGlvcyBjYW5ub3QgcGluIG1pbl9zZXEgaW5kZWZpbml0ZWx5LlxuK1x0ICovXG4rXHRMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsXG4gfTtcbiBcbiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJkMWIxYWExMjU4MTkuLmMxOGRiMDhjNWUxMDMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xNzUsNiArMTc1LDggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHRcdHVuc2lnbmVkIGludCBpbW1lZGlhdGU7XG4gXHRcdHVuc2lnbmVkIGludCBmaWxlX3Rha2VuO1xuIFx0XHR1bnNpZ25lZCBpbnQgdGFrZW47XG4rXHRcdC8qIGZvbGlvcyBpc29sYXRlZCBieSBNR0xSVSBldmljdGlvbiBpbiB0aGUgY3VycmVudCBscnV2ZWMgcGFzcyAqL1xuK1x0XHR1bnNpZ25lZCBpbnQgaXNvbGF0ZWQ7XG4gXHR9IG5yO1xuIFxuIFx0LyogZm9yIHJlY29yZGluZyB0aGUgcmVjbGFpbWVkIHNsYWIgYnkgbm93ICovXG5AQCAtNDc0OCw2ICs0NzUwLDcgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cdTAwM2VyZWNsYWltX2lkeCwgc2MtXHUwMDNlb3JkZXIsIHNjYW5fYmF0Y2gsXG4gXHRcdFx0XHRzY2FubmVkLCBza2lwcGVkLCBpc29sYXRlZCxcbiBcdFx0XHRcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcbitcdHNjLVx1MDAzZW5yLmlzb2xhdGVkICs9IGlzb2xhdGVkO1xuIFx0aWYgKHR5cGUgPT0gTFJVX0dFTl9GSUxFKVxuIFx0XHRzYy1cdTAwM2Vuci5maWxlX3Rha2VuICs9IGlzb2xhdGVkO1xuIFx0LypcbkBAIC00OTk4LDYgKzUwMDEsMTEgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGxvbmcgbnJfdG9fc2NhbjtcbiBcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IDA7XG4gXHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuK1x0Ym9vbCBhdHRlbXB0ZWQgPSBmYWxzZTtcbitcdGJvb2wgcm90YXRlZCA9IGZhbHNlO1xuK1xuK1x0LyogcGVyLWxydXZlYyBwYXNzOyBzYyBpcyBzaGFyZWQgYWNyb3NzIGxydXZlY3MgZHVyaW5nIHJlY2xhaW0gKi9cbitcdHNjLVx1MDAzZW5yLmlzb2xhdGVkID0gMDtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdGludCBkZWx0YTtcbkBAIC01MDA2LDYgKzUwMTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRpZiAobnJfdG9fc2NhbiBcdTAwM2M9IDApXG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGF0dGVtcHRlZCA9IHRydWU7XG4gXHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xuIFx0XHRpZiAoIWRlbHRhKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTUwMjAsNiArNTAyOSw0MCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBFdmljdGlvbiBpc29sYXRlZCBub3RoaW5nIHdoaWxlIHRoZSBzbGlkaW5nIHdpbmRvdyBpcyBhbHJlYWR5IGF0XG4rXHQgKiBNQVhfTlJfR0VOUy4gSW4gdGhhdCBzdGF0ZSBzaG91bGRfcnVuX2FnaW5nKCkgaXMgZmFsc2UsIHNvXG4rXHQgKiBnZXRfbnJfdG9fc2NhbigpIG5ldmVyIGNhbGxzIHRyeV90b19pbmNfbWF4X3NlcSgpLiBSZXNpZHVhbCBmb2xpb3NcbitcdCAqIHRoYXQgZmFpbCBpc29sYXRlX2ZvbGlvKCkgY2FuIHBpbiBtaW5fc2VxIGFuZCBoaWRlIHJlY2xhaW1hYmxlXG4rXHQgKiBmb2xpb3MgaW4geW91bmdlciBnZW5lcmF0aW9ucy5cbitcdCAqXG4rXHQgKiBSZXF1aXJlIHR3byBjb25zZWN1dGl2ZSBpc29sYXRlIGZhaWx1cmVzIG9uIHRoaXMgbHJ1dmVjIGJlZm9yZVxuK1x0ICogZm9yY2luZyBhZ2luZywgc28gYSBzaW5nbGUgbm8tcHJvZ3Jlc3MgYmF0Y2ggZG9lcyBub3Qgcm90YXRlIHRoZVxuK1x0ICogd2luZG93LiBTdWNjZXNzZnVsIGlzb2xhdGlvbiBjbGVhcnMgdGhlIHN0aWNreSBiaXQuXG4rXHQgKlxuK1x0ICogS2V5IG9mZiBzYy1cdTAwM2Vuci5pc29sYXRlZCwgbm90IG5yX3JlY2xhaW1lZDogZm9saW9zIGlzb2xhdGVkIGJ1dFxuK1x0ICogcmVqZWN0ZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhcmUgcHV0IGJhY2sgd2l0aCBQR19hY3RpdmUgYW5kIGRvXG4rXHQgKiBub3QgcGluIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbi5cbitcdCAqL1xuK1x0aWYgKGF0dGVtcHRlZCBcdTAwMjZcdTAwMjYgIXNjLVx1MDAzZW5yLmlzb2xhdGVkKSB7XG4rXHRcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4rXHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4rXG4rXHRcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TIFx1MDAzYyBtYXhfc2VxKSB7XG4rXHRcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNmxydXZlYy1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRcdHJvdGF0ZWQgPSB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBzd2FwcGluZXNzLCBmYWxzZSk7XG4rXHRcdFx0XHRjbGVhcl9iaXQoTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVELFxuK1x0XHRcdFx0XHQgIFx1MDAyNmxydXZlYy1cdTAwM2VmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGNsZWFyX2JpdChMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRUQsIFx1MDAyNmxydXZlYy1cdTAwM2VmbGFncyk7XG4rXHRcdH1cbitcdH0gZWxzZSBpZiAoc2MtXHUwMDNlbnIuaXNvbGF0ZWQpIHtcbitcdFx0Y2xlYXJfYml0KExSVVZFQ19NR0xSVV9JU09MQVRFX0ZBSUxFRCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWZsYWdzKTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBJZiB0b28gbWFueSBmaWxlIGNhY2hlIGluIHRoZSBjb2xkZXN0IGdlbmVyYXRpb24gY2FuJ3QgYmUgZXZpY3RlZFxuIFx0ICogZHVlIHRvIGJlaW5nIGRpcnR5LCB3YWtlIHVwIHRoZSBmbHVzaGVyLlxuQEAgLTUwNDMsNyArNTA4Niw3IEBAIHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHR9XG4gXG4gXHQvKiB3aGV0aGVyIHRoaXMgbHJ1dmVjIHNob3VsZCBiZSByb3RhdGVkICovXG4tXHRyZXR1cm4gbnJfdG9fc2NhbiBcdTAwM2MgMDtcbitcdHJldHVybiBucl90b19zY2FuIFx1MDAzYyAwIHx8IHJvdGF0ZWQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTg6NTQuMjI2ODY1NDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MTYyOTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNR0xSVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGBtbXpvbmUuaGAgYW5kIGB2bXNjYW4uY2AuIEFsd2F5cyBpbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCByZWZpbmluZyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGFsZ29yaXRobSwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgZW5hYmxlZCBieSBgQ09ORklHX0xSVV9HRU5gLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbW0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLCBidXQgbGV0J3MgYXNzdW1lIGl0IGlzLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnLCBgTFJVVkVDX01HTFJVX0lTT0xBVEVfRkFJTEVEYCwgd2hpY2ggaGludHMgdGhhdCB0aGUgaXNvbGF0aW9uIHByb2Nlc3MgaXRzZWxmIGlzIGJlaW5nIHNjcnV0aW5pemVkLiBUaGF0J3MgZ29vZCwgaXNvbGF0aW9uIG9mIHBhZ2VzIGlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgc3RlcCBpbiBNR0xSVS4gSSBub3RpY2UgdGhleSdyZSBhZGRpbmcgYW4gYHVuc2lnbmVkIGludCBpc29sYXRlZGAgY291bnQgaW50byBgc2Nhbl9jb250cm9sYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXTigJlzIGludGVuZGVkIHRvIHRyYWNrIGlzb2xhdGlvbiBmYWlsdXJlcy4gSW5jcmVtZW50aW5nIGBzYy1cdTAwM2Vuci5pc29sYXRlZCArPSBpc29sYXRlZGAgaW4gYHNjYW5fZm9saW9zYCBpcyB0aGUga2V5LlxuXG5UaGVuLCBpbiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBpdCBnZXRzIHJlc2V0LCB3aGljaCBpcyBjcnVjaWFsIGZvciB0cmFja2luZyB0aGUgc2xpZGluZyB3aW5kb3cgc3RhdGUuIEkgY2FuIHRlbGwgdGhpcyBpcyBhbGwgYWJvdXQgbWFraW5nIHN1cmUgdGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoZXkncmUgdHJhY2tpbmcgaG93IG1hbnkgdGltZXMgaXNvbGF0aW9uIGZhaWxzLCBhbmQgYWZ0ZXIgY29uc2VjdXRpdmUgZmFpbHVyZXMsIGZvcmNlIGFnaW5nIHdpdGggYHRyeV90b19pbmNfbWF4X3NlcWAuIFRoYXQgc3VnZ2VzdHMgaXQncyB0cnlpbmcgdG8gYmUgc21hcnRlciBhYm91dCBub3QgZ2V0dGluZyBzdHVjayBpbiBhIHJ1dCB3aGVuIHRoZSBpc29sYXRpb24gcHJvY2VzcyBpc24ndCB5aWVsZGluZyBhbnl0aGluZy4gVGhhdCdzIGEgY2xldmVyIHdheSB0byBoYW5kbGUgZWRnZSBjYXNlcyBvciBzdWJvcHRpbWFsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluZGljYXRlcyB0aGlzIHBhdGNoIGFpbXMgdG8gcHJldmVudCBsaXZlbG9ja3MgaW4gcGFydGljdWxhci5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgbW9uaXRvcmluZyB0aGUgaXNvbGF0aW9uIGJlaGF2aW9yIG9mIE1HTFJVIGFuZCBpbXBsZW1lbnRpbmcgYSBtZWNoYW5pc20gdG8gZ3JhY2VmdWxseSBkZWdyYWRlIChmb3JjZSBhZ2luZykgaWYgaXQgZ2V0cyBzdHVjay4gVGhhdCdzIGEgc29saWQsIHRhcmdldGVkIGVuaGFuY2VtZW50IGZvciBNR0xSVSByb2J1c3RuZXNzIGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjAwLjA3ODQ5ODAzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDMyMjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM2Nz1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTEzNjktIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzNzA6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTEzNzEtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTM3OC1cXG5tbS9LY29uZmlnOjEzNzk6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTM4MC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTM4NC1cXG5tbS9LY29uZmlnOjEzODU6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTEzODYtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMzkzLVxcbm1tL0tjb25maWc6MTM5NDpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTEzOTUtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTowMC4xMTg4MjQzNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAyNzY4MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMUlUgR2VuZXJhdGlvbiBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAuIEl0IGxvb2tzIGxpa2UgdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgZW5hYmxlZCwgd2hpY2ggbWVhbnMgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHRvdWNoZXMgdGhlIGV4aXN0aW5nIGNvZGUgYmFzZS4gSSBzaG91bGQgY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC5cblxuQWxyaWdodCwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIGFmZmVjdGVkIGFyZSBgc2Nhbl9mb2xpb3NgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19vbmVgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIHRoZSBjb2RlPyBBbmQsIG1vcmUgY3JpdGljYWxseSwgd2hpY2ggb2YgdGhlc2UgYXJlIHRoZSByZWFsIGNvcmUgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGFuYWx5c2lzIG9uPyBJIHNlZSB0aGV5J3JlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBteSB1c3VhbCBhcHByb2FjaCBvZiBsb29raW5nIGZvciBjYWxsZXJzIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQ7IEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBjYWxsIHRoZXNlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZpbGUuXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgbW0vdm1zY2FuLmNgLiBJdCdzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIGxvb2sgZm9yIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlc2Ugc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgZnJvbSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSwgdWx0aW1hdGVseSB0byB1bmRlcnN0YW5kIGhvdyBMUlUgZ2VuZXJhdGlvbiBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGF0J3MgdGhlIGtleSB0byB0aGlzIG5ldyBmZWF0dXJlLCBhbmQgaG93IGl0IGltcGFjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjA0LjYyMTU5NDY2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE0MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTcyPXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTk4LVxcbm1tL3Ztc2Nhbi5jOjQ5OTk6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MDAwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwOTI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTExLVxcbm1tL3Ztc2Nhbi5jOjUxMTI6XFx0c3VjY2VzcyA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxMTMtXFxuLS1cXG5tbS92bXNjYW4uYz01MjAzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxNS1cXG5tbS92bXNjYW4uYzo1MjE2OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjE3LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6MDQuNjYzNzQwNDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NDkzODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBpdHMgQ2FsbGluZyBDb250ZXh0KipcblxuSG1tLCBsZXQncyBzZWUsIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgZnVuY3Rpb24uIFJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBzaHJpbmtfbHJ1dmVjYCAob3Igc29tZXRoaW5nICp2ZXJ5KiBzaW1pbGFyIGluIG5hbWUgYW5kIHB1cnBvc2UpIGlzIHRoZSBpbW1lZGlhdGUgY2FsbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byDigJMgaG93IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHNocmlua2luZyB0aGUgTFJVIHZlY3Rvci4gQW0gSSBjb3JyZWN0IGluIGFzc3VtaW5nIHRoYXQgaXQgaXMgY2FsbGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBzaHJpbmtfbHJ1dmVjYD8gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIGluIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHB1enpsZSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWFuYWdpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIHdpdGhpbiB0aGF0IHByb2Nlc3MuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCByZXR1cm4/IEFuZCBtb3N0IGltcG9ydGFudGx5LCAqd2h5KiBpcyBpdCBiZWluZyBjYWxsZWQgYXQgdGhpcyBwb2ludD8gSXMgaXQgYSBjb3JlIGFsZ29yaXRobWljIGNvbXBvbmVudCBvZiB0aGUgc2hyaW5raW5nIHByb2Nlc3Mgb3IgYSBoZWxwZXIgZnVuY3Rpb24/IFRoZSBhcmNoaXRlY3R1cmUgaGVyZSBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6MTAuMzU4NjgwMzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTEwMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTMzPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIwMi1cXG5tbS92bXNjYW4uYzo1MjAzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMDQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk0Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk1MC1cXG5tbS92bXNjYW4uYzo1OTUxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NTIte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk2Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc0LVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo1OTc1OlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01OTc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxMC40MDAxOTQyODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyOTc4NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiBgc2hyaW5rX2xydXZlY2AgYW5kIEl0cyBQbGFjZSoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uc28sIGBzaHJpbmtfbHJ1dmVjYC4gSXQncyBjbGVhciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlaXRoZXIgdGhyb3VnaCBgc2hyaW5rX25vZGVfbWVtY2dzYCBvciBkaXJlY3RseSBieSBgc2hyaW5rX25vZGVgLiBUaGF0J3MgdGhlIGtleS4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdGVsbHMgbWUgKmhvdyogaXQncyBiZWluZyB1c2VkLiBCb3RoIG9mIHRob3NlIHVwc3RyZWFtIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgY3JpdGljYWwgZm9yIG1lbW9yeSByZWNsYWltLiBgc2hyaW5rX25vZGVfbWVtY2dzYCBpbXBsaWVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgdGFyZ2V0aW5nIHJlY2xhaW0gYmFzZWQgb24gdGhvc2UgY29uc3RyYWludHMuIGBzaHJpbmtfbm9kZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBzdWdnZXN0cyBhIGJyb2FkZXIsIG5vZGUtbGV2ZWwgcmVjbGFpbSBvcGVyYXRpb24uXG5cblNvLCBgc2hyaW5rX2xydXZlY2AgbXVzdCBiZSB0aGUgd29ya2hvcnNlIGZvciBhY3R1YWxseSBmcmVlaW5nIHVwIG1lbW9yeSB3aXRoaW4gYW4gTFJVIHZlY3Rvci4gVGhhdCBtYWtlcyB0b3RhbCBzZW5zZS4gV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHBhZ2UgbWFuYWdlbWVudCBhbmQgY2FjaGUgZXZpY3Rpb24g4oCTIHRoZSB3aG9sZSBwb2ludCBvZiB0aGVzZSBMUlUgbGlzdHMuIEl04oCZcyB0aGUgbWVjaGFuaXNtIHRvIGFjdHVhbGx5IHB1bGwgcGFnZXMgb2ZmIHRoZSBMUlUgbGlzdHMgdG8gbWVldCBlaXRoZXIgdGhlIHNwZWNpZmljIGRlbWFuZHMgb2YgYSBtZW1vcnkgY29udHJvbCBncm91cCBvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gcHJlc3N1cmUgdG8gcmVjbGFpbSBtZW1vcnkgb24gYSBub2RlLiBUaGUgY29udGV4dCBvZiB3aGljaCBmdW5jdGlvbiBpcyBjYWxsaW5nIGl0IHRlbGxzIG1lIGV4YWN0bHkgd2h5IHRob3NlIHBhZ2VzIGFyZSBiZWluZyByZWNsYWltZWQsIHdoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBpcyBkcml2aW5nIGl0LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaC4gSSdkIG5lZWQgdG8gZ28gbG9vayBhdCBleGFjdGx5ICpob3cqIGl0J3MgaW1wbGVtZW50ZWQuIEJ1dCB0aGUgY2FsbGVyIGluZm9ybWF0aW9uLCBpbiBpdHNlbGYsIGlzIHZlcnkgaW5mb3JtYXRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxNC4xMDMxNzU4MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDc3ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDk3Mj1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk5OC1cXG5tbS92bXNjYW4uYzo0OTk5OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTAwMC17XFxuLS1cXG5tbS92bXNjYW4uYz01MDkyPXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTExMS1cXG5tbS92bXNjYW4uYzo1MTEyOlxcdHN1Y2Nlc3MgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MTEzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTEzMz1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMDItXFxubW0vdm1zY2FuLmM6NTIwMzpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MjA0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMTUtXFxubW0vdm1zY2FuLmM6NTIxNjpcXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTIxNy1cXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxuLS1cXG5tbS92bXNjYW4uYz01OTQ2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTUwLVxcbm1tL3Ztc2Nhbi5jOjU5NTE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTk1Mi17XFxuLS1cXG5tbS92bXNjYW4uYz01OTU2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTYyLVxcbm1tL3Ztc2Nhbi5jOjU5NjM6c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNTk3NC1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NTk3NTpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTk3Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNTQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIxMy1cXG5tbS92bXNjYW4uYzo2MjE0OlxcdFxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjIxNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MDk9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MzktXFx0ICovXFxubW0vdm1zY2FuLmM6Njg0MDpcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxNC4xNDUyNjA0MDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MTU5ODE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgKipcblxuT2theSwgc28gSSdtIHNlZWluZyBzb21ldGhpbmcgaGVyZSB0aGF0IG1ha2VzIG1lIHJhaXNlIGFuIGV5ZWJyb3cuIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4uLiBpdCdzIGRlY2xhcmVkIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGEgZnVuY3Rpb24gbGlrZSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE5vbi1zdGF0aWMgZnVuY3Rpb25zIGhhdmUgZXh0ZXJuYWwgbGlua2FnZSwgbWVhbmluZyB0aGV5ICpjb3VsZCogYmUgY2FsbGVkIGZyb20gb3RoZXIgY29tcGlsYXRpb24gdW5pdHMuIElzIHRoYXQgdGhlIGludGVudCBoZXJlPyBJcyB0aGlzIGZ1bmN0aW9uIHBhcnQgb2YgYSBicm9hZGVyIEFQSSwgb3IgaXMgaXQgbGlrZWx5IGFuIG92ZXJzaWdodCBvciBhbiBpbmRpY2F0aW9uIG9mIGFuIG9wdGltaXphdGlvbiB0aGF0IHJlcXVpcmVzIGV4dGVybmFsIGFjY2Vzcz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24sIHdoZXJlIGl0J3MgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUncyBhbiBvYnZpb3VzIHJlYXNvbiBmb3IgaXRzIHZpc2liaWxpdHkuIEl0J3MgdGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgbG9vayBmb3IgdGhlIHJhdGlvbmFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjE3LjMzNjg2MDY5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNDk2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NzYzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwOC0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXFxubW0vdm1zY2FuLmM6NjgwOTp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4MTAtXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToxNy4zNzc5MTYwOTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MTM4NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIFF1ZXN0aW9uIG9mIFNjb3BlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgbXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXNuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBNYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCB2aXNpYmlsaXR5IG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQgbWlnaHQgYmUgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbSwgd2hpY2ggcmFpc2VzIGNlcnRhaW4gaW1wbGljYXRpb25zIHdoZW4gY29uc2lkZXJpbmcgY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZnJlZWluZyBwYWdlcy5cblxuQnV0IHRoYXQncyBub3QgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUsIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgd2hhdCBhYm91dCBgc2hyaW5rX25vZGVgPyBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBmdW5jdGlvbiBhbmQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB1bmNsZWFyLiBIb3cgZG8gdGhleSBpbnRlcmFjdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub2RlIHNocmlua2luZyBwcm9jZXNzIHJlbGF0ZXMgdG8gdGhlIGFjdCBvZiBmcmVlaW5nIHBhZ2VzLiBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmUgb3BlcmF0aW9ucz8gRG9lcyBvbmUgdHJpZ2dlciB0aGUgb3RoZXI/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgZGF0YSBmbG93LiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gbm9kZSBzaHJpbmtpbmcgYW5kIGFjdHVhbCBwYWdlIGZyZWVpbmcgaXMgY3J1Y2lhbCBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkndmUgZ290IHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgdGhlIHB1enpsZSBmaXQgdG9nZXRoZXIgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToyMy4wNTkzMDU1MTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODQwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NDQ9c3RhdGljIGludCBjdXJyZW50X21heV90aHJvdHRsZSh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtMTk0OS0vKlxcbm1tL3Ztc2Nhbi5jOjE5NTA6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxcbm1tL3Ztc2Nhbi5jLTE5NTEtICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxuLS1cXG5tbS92bXNjYW4uYz01MjAzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIyMy1cXG5tbS92bXNjYW4uYzo1MjI0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTIyNS17XFxuLS1cXG5tbS92bXNjYW4uYz01OTUxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk1NS1cXG5tbS92bXNjYW4uYzo1OTU2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTk1Ny17XFxuLS1cXG5tbS92bXNjYW4uYz02MTAyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjE1My1cXG5tbS92bXNjYW4uYzo2MTU0OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MTU1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMzItXFxubW0vdm1zY2FuLmM6NjIzMzpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MjM0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDAtXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG5tbS92bXNjYW4uYzo2MjQxOlxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MjQyLVxcbi0tXFxubW0vdm1zY2FuLmMtNjI1Ny1cXG5tbS92bXNjYW4uYzo2MjU4OlxcdHNocmlua19ub2RlX21lbWNncyhwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyNTktXFxuLS1cXG5tbS92bXNjYW4uYz02NDE4PXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0OTYtXFx0XFx0bGFzdF9wZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxubW0vdm1zY2FuLmM6NjQ5NzpcXHRcXHRzaHJpbmtfbm9kZSh6b25lLVxcdTAwM2V6b25lX3BnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjQ5OC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYz02NzYzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwOC0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXFxubW0vdm1zY2FuLmM6NjgwOTp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4MTAtXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzNS1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG5tbS92bXNjYW4uYzo2ODM2OlxcdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTY4MzctXFx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY5NTc9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNjk4MS1cXHRcXHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCdzXFxubW0vdm1zY2FuLmM6Njk4MjpcXHRcXHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxcbm1tL3Ztc2Nhbi5jLTY5ODMtXFx0XFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxcbi0tXFxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03MDc3LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwNzg6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzA3OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy03MDk0LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcwOTU6XFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy03MDk2LVxcbi0tXFxubW0vdm1zY2FuLmM9NzE1MT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzI1OC1cXG5tbS92bXNjYW4uYzo3MjU5OlxcdFxcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xcbm1tL3Ztc2Nhbi5jLTcyNjAtXFx0XFx0c2MubnJfc2Nhbm5lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy03MjcwLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcyNzE6XFx0XFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKSlcXG5tbS92bXNjYW4uYy03MjcyLVxcdFxcdFxcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYz03ODIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg1MC1cXHRcXHRkbyB7XFxubW0vdm1zY2FuLmM6Nzg1MTpcXHRcXHRcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTc4NTItXFx0XFx0fSB3aGlsZSAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IC0tc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwM2U9IDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToyMy4xMDMxNTEyNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NzE2MDcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXJlY3QgUmVjbGFpbSBFbnRyeSBQb2ludHMqKlxuXG5SaWdodCwgc28sIGRpdmluZyBpbnRvIG1lbW9yeSByZWNsYWltLi4uIEkgc2VlIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB0aGUgcHJpbWFyeSB3b3JraG9yc2UgZm9yICpkaXJlY3QqIHJlY2xhaW0uIFRoYXQgbWFrZXMgc2Vuc2UsIGl0J3MgdGhlIGltbWVkaWF0ZSBhdHRlbXB0IHRvIGZyZWUgdXAgbWVtb3J5IHdoZW4gYSBwcm9jZXNzIGlzIGRpcmVjdGx5IHJlcXVlc3RpbmcgaXQsIGxpa2UgZHVyaW5nIGEgcGFnZSBmYXVsdCBvciBhIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVuIHRoZXJlJ3MgYGJhbGFuY2VfcGdkYXRgLCB0aGF0J3MgdGhlIGJpZyBvbmUsIHRoZSBlbnRyeSBwb2ludCBmb3IgYGtzd2FwZGAsIHdoaWNoIEkga25vdyBpcyB0aGUgYmFja2dyb3VuZCBkYWVtb24gY29uc3RhbnRseSB3b3JraW5nIHRvIGtlZXAgdGhlIHN5c3RlbSdzIG1lbW9yeSBoZWFsdGh5LiBBbmQsIG9mIGNvdXJzZSwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCB3aGljaCBJIGV4cGVjdCB3aWxsIGJlIHNpbWlsYXIsIGJ1dCBzcGVjaWZpY2FsbHkgY29uY2VybmVkIHdpdGggcmVjbGFpbWluZyBtZW1vcnkgd2l0aGluIGEgbWVtb3J5IGNncm91cC4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRob3NlIHR3bzogYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6MjYuOTcwMzE1MjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDM2MjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY4MDk9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NDgtXFxubW0vdm1zY2FuLmM6Njg0OTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4NTAtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODktI2Vsc2VcXG5tbS92bXNjYW4uYzo2ODkwOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg5MS1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzk0OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDA4LVxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxubW0vdm1zY2FuLmM6ODAwOTpcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTgwMTAtXFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOToyNy4wMTA2ODIzMjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NjM1NjQ0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gRm9jdXMqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZnJlZWluZyB1cCBtZW1vcnkgcGFnZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGhlcmUgYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGluIHRoaXMgYXJlYS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGBiYWxhbmNlX3BnZGF0YC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgb25lLiBJc24ndCB0aGF0IHR5cGljYWxseSBhIHN0YXRpYyBmdW5jdGlvbj8gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGxpbmthZ2UgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlciB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnkga2V5IGltcGxpY2F0aW9ucyBvZiB0aGF0IHN0YXRpYyBkZWNsYXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjM3Ljg3NDI0OTY1MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2Mjg2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFsYW5jZV9wZ2RhdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02ODA5PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODM1LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4MzY6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjgzNy1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzAzOT1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03MDQyLVxcdC8qXFxubW0vdm1zY2FuLmM6NzA0MzpcXHQgKiBUaGUgdGhyb3R0bGVkIHByb2Nlc3NlcyBhcmUgbm9ybWFsbHkgd29rZW4gdXAgaW4gYmFsYW5jZV9wZ2RhdCgpIGFzXFxubW0vdm1zY2FuLmMtNzA0NC1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxuLS1cXG5tbS92bXNjYW4uYy03MDQ3LVxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzA0ODpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYy03MDQ5LVxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbi0tXFxubW0vdm1zY2FuLmMtNzA1MS1cXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYzo3MDUyOlxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG5tbS92bXNjYW4uYy03MDUzLVxcdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXFxuLS1cXG5tbS92bXNjYW4uYz03MTMzPWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTM4LS8qXFxubW0vdm1zY2FuLmM6NzEzOTogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcxNDAtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MTUwLSAqL1xcbm1tL3Ztc2Nhbi5jOjcxNTE6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MTUyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc0ODE9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1MjctXFx0XFx0LypcXG5tbS92bXNjYW4uYzo3NTI4OlxcdFxcdCAqIFdlIGNhbiBzcGVlZCB1cCB0aGF3aW5nIHRhc2tzIGlmIHdlIGRvbid0IGNhbGwgYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTc1MjktXFx0XFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxcbi0tXFxubW0vdm1zY2FuLmMtNzU0My1cXHRcXHRcXHRcXHRcXHRcXHRhbGxvY19vcmRlcik7XFxubW0vdm1zY2FuLmM6NzU0NDpcXHRcXHRyZWNsYWltX29yZGVyID0gYmFsYW5jZV9wZ2RhdChwZ2RhdCwgYWxsb2Nfb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU0NS1cXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTozNy45MTU4ODU4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMwOTA1NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgQ29udW5kcnVtcyoqXG5cbkFscmlnaHQsIHNvIGBiYWxhbmNlX3BnZGF0YCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIHZhcmlhYmxlLCB0aGF0J3MgY2xlYXIuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYGtzd2FwZGA/IEl0J3MgYSBrZXJuZWwgdGhyZWFkLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3RpbmcgaW4gdGhpcyB3aG9sZSBjb250ZXh0LlxuXG5NeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiB3aWxsIGJlIGB0cnlfdG9fZnJlZV9wYWdlc2AgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIHRvIHNlZSBob3cgdGhlc2UgZWxlbWVudHMgcmVsYXRlIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2UgZnJlZWluZy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTo0MS42NDY3OTQ3MTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzUzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY1MTA9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1NDAtICovXFxubW0vdm1zY2FuLmM6NjU0MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY1NDItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2ODM9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzYyLVxcbm1tL3Ztc2Nhbi5jOjY3NjM6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjc2NC1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02Nzk3LVxcbm1tL3Ztc2Nhbi5jOjY3OTg6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc5OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODAtXFxubW0vdm1zY2FuLmM6Njg4MTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODgyLVxcbi0tXFxubW0vdm1zY2FuLmM9NzY0Mj11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NjEtXFxubW0vdm1zY2FuLmM6NzY2MjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NjYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTo0MS42ODk1NTQwMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5MjY1MjkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBUaGV5J3JlIGFsbCBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5J3JlIGVudHJ5IHBvaW50cyBhbmQgcG90ZW50aWFsIHRhcmdldHMuIFRoZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBNR0xSVSBldmljdGlvbiBtZWNoYW5pc20gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzbyB0aGlzIGFyZWEgd2FycmFudHMgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYExSVV9HRU5gIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT05GSUdfTFJVX0dFTmAgb3IgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBJJ2xsIGFkZCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB0byBiZSBzdXJlIEknbSB0ZXN0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGlzIGlzIGNvcmUgdG8gdGhlIGZlYXR1cmUuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBpbmNsdWRpbmcgY29yZSBNR0xSVSBldmljdGlvbiBsb2dpYywgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgcHJpb3JpdHkuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gcmVjbGFpbXMgbWVtb3J5IGlzIGNyaXRpY2FsLCBhbmQgdGhlcmUncyBib3VuZCB0byBiZSBhIGxvdCBvZiBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIHdoZW4gd29ya2luZyB3aXRoIE1HTFJVLiBJIG5lZWQgdG8gYmUgZXh0cmEgdGhvcm91Z2guXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTG9va2luZyBhdCBgbW0vdm1zY2FuLmNgLCBJIHNlZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgcmVjbGFpbS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGhhbmRsZXMgbWVtb3J5IGNncm91cCByZWNsYWltLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBpcyBhc3NvY2lhdGVkIHdpdGggaGliZXJuYXRpb24uIEknbGwgbmVlZCB0byBrZWVwIHRob3NlIGRpc3RpbmN0aW9ucyBpbiBtaW5kIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGVzdCBjYXNlcyBhbmQgcG90ZW50aWFsIGZhdWx0IHNjZW5hcmlvcy5cblxuVGhlIGtleSBzeW1ib2xzIEknbSBmb2N1c2VkIG9uIGFyZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IGZ1enppbmcgaGFybmVzc2VzIHRoZXNlIGVudHJ5IHBvaW50cyBlZmZpY2llbnRseS5cblxuTm93LCBJJ2xsIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBMUlVfR0VOX0VOQUJMRURgIGlzIHN1ZmZpY2llbnQgZm9yIGVuYWJsaW5nIHRoZSBuZXcgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6NDcuNjgyMjA5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzA0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzNzA9Y29uZmlnIExSVV9HRU5cXG4tLVxcbm1tL0tjb25maWctMTM3OC1cXG5tbS9LY29uZmlnOjEzNzk6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTM4MC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6NDcuNzIzOTE5Mjk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjQ4NzExOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGBMUlVfR0VOX0VOQUJMRURgIEltcGFjdCoqXG5cblJpZ2h0LCBgTFJVX0dFTl9FTkFCTEVEYC4uLiB0aGF0J3MgdGhlIGtleS4gVGhhdCBtYWNybydzIGxpa2VseSBzZXR0aW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIGJlIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBMZXQncyBjb25maXJtIHRoaXMgYnkgdHJhY2luZyB0aGUgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBscnVfZ2VuX2VuYWJsZWQoKWAgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBjb25kaXRpb25zIGdvdmVybiBpdHMgcmV0dXJuIHZhbHVlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxODoxOTo1MS43ODg3OTI5NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTQzMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZW5hYmxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04NjU9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04ODktXFxubW0vdm1zY2FuLmM6ODkwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTg5MS1cXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODU9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjg5LVxcbm1tL3Ztc2Nhbi5jOjIyOTA6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTIyOTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NTM1Mz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01MzYzLVxcbm1tL3Ztc2Nhbi5jOjUzNjQ6XFx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vdm1zY2FuLmMtNTM2NS1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NTE9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ3Ny1cXG5tbS92bXNjYW4uYzo1NDc4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XFxubW0vdm1zY2FuLmMtNTQ3OS1cXG5tbS92bXNjYW4uYz01NDgwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcXG5tbS92bXNjYW4uYzo1NDgyOlxcdFxcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jLTU0ODMtXFx0TlVMTFxcbi0tXFxubW0vdm1zY2FuLmM9NTg2NT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg3Mi1cXHRscnVnZW4tXFx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyArIDE7XFxubW0vdm1zY2FuLmM6NTg3MzpcXHRscnVnZW4tXFx1MDAzZWVuYWJsZWQgPSBscnVfZ2VuX2VuYWJsZWQoKTtcXG5tbS92bXNjYW4uYy01ODc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk2Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTczLVxcbm1tL3Ztc2Nhbi5jOjU5NzQ6XFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTU5NzUtXFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjIzMz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMzgtXFxubW0vdm1zY2FuLmM6NjIzOTpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2IHJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYy02MjQwLVxcdFxcdG1lbXNldChcXHUwMDI2c2MtXFx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXFx1MDAzZW5yKSk7XFxuLS1cXG5tbS92bXNjYW4uYz02NTEwPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTE0LVxcbm1tL3Ztc2Nhbi5jOjY1MTU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTY1MTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NjkwMD1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02OTA0LVxcbm1tL3Ztc2Nhbi5jOjY5MDU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy02OTA2LVxcdFxcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTg6MTk6NTEuODI5OTQzMjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczMTM4MTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNR0xSVSBFdmljdGlvbiBMb2dpYyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBhbHRlcmluZyB0aGUgZXZpY3Rpb24gbG9naWMgd2l0aGluIE1HTFJVLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHNpdHVhdGlvbnMgd2hlcmUgZm9saW9zIGFyZSBnZXR0aW5nIHN0dWNrLCBwZXJwZXR1YWxseSBwaW5uaW5nIGBtaW5fc2VxYCwgcHJlc3VtYWJseSBkdWUgdG8gaXNvbGF0aW9uIGZhaWx1cmVzIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLiBUaGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0d28gY29uZmlndXJhdGlvbnM6IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIHdoaWNoIGFyZSBjZW50cmFsIHRvIHRoaXMuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIGludHJvZHVjaW5nIGEgbmV3IGZsYWcsIGBMUlVWRUNfTUdMUlVfSVNPTEFURV9GQUlMRURgLCB0byB0cmFjayAqY29uc2VjdXRpdmUqIGlzb2xhdGlvbiBmYWlsdXJlcy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBiaXQg4oCTIGluc3RlYWQgb2YgbGV0dGluZyB0aGVzZSBzdHVjayBmb2xpb3MgaW5kZWZpbml0ZWx5IGJsb2NrIHRoZSBwcm9jZXNzLCB0aGUgcGF0Y2ggZm9yY2VzIGFnaW5nIHdoZW4gdGhlIGlzb2xhdGlvbiBhdHRlbXB0cyBhcmUgcmVwZWF0ZWRseSBmYWlsaW5nLiBUaGF0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSB0aGVyZSwgc28gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhleSdyZSB0YXJnZXRpbmcgZm9yIGZvY3VzZWQgZnV6emluZyBzZWVtIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBJdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRoYXQgdGhleSdyZSByZWxhdGVkIHRvIHBhZ2UgZnJlZWluZyBhbmQgbWVtb3J5IHJlY2xhaW0sIGdpdmVuIHRoZSBNR0xSVSBjb250ZXh0LlxuXG5JJ20gY29uZmlkZW50IHRoaXMgd2lsbCBoYXZlIGVmZmVjdHMgb24gbWVtb3J5IG1hbmFnZW1lbnQsIHNvIEkgYW0gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzIsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE4OjE5OjU5LjU2MTMyNjY2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjI1OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGZvcmNlIGFnaW5nIHdoZW4gZm9saW9zIGZhaWwgdG8gaXNvbGF0ZSBmcm9tIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBjb25zZWN1dGl2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3Nocmlua19ub2RlXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gZm9yY2UgYWdpbmcgd2hlbiBmb2xpb3MgZmFpbCB0byBpc29sYXRlIGZyb20gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGNvbnNlY3V0aXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[1] Phase: Succeeded StartedAt: 2026-07-31 18:20:10 +0000 UTC FinishedAt: 2026-07-31 18:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 18:20:10 +0000 UTC FinishedAt: 2026-07-31 18:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2] Phase: Succeeded StartedAt: 2026-07-31 18:20:10 +0000 UTC FinishedAt: 2026-07-31 22:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:20:10 +0000 UTC FinishedAt: 2026-07-31 22:16:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:20:10 +0000 UTC FinishedAt: 2026-07-31 18:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:20:10 +0000 UTC FinishedAt: 2026-07-31 18:20:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1439064209/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:20:21 +0000 UTC FinishedAt: 2026-07-31 18:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:20:21 +0000 UTC FinishedAt: 2026-07-31 18:40:58 +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:*c26a4c8b-d3e0-421d-a9ea-340201213809,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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1439064209/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": "d2934247-41bb-441d-95e4-2fece9bac381", "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-workflowq6hq8/series-workflowq6hq8-build-action-1660437055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:20:21 +0000 UTC FinishedAt: 2026-07-31 18:40: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:*c26a4c8b-d3e0-421d-a9ea-340201213809,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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1439064209/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": "d2934247-41bb-441d-95e4-2fece9bac381", "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-workflowq6hq8/series-workflowq6hq8-build-action-1660437055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:40:58 +0000 UTC FinishedAt: 2026-07-31 18:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:40:58 +0000 UTC FinishedAt: 2026-07-31 18:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:40:58 +0000 UTC FinishedAt: 2026-07-31 18:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:40:58 +0000 UTC FinishedAt: 2026-07-31 18:41:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1547065956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:41:18 +0000 UTC FinishedAt: 2026-07-31 18:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:41:18 +0000 UTC FinishedAt: 2026-07-31 18:43:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2934247-41bb-441d-95e4-2fece9bac381,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-workflowq6hq8/series-workflowq6hq8-build-action-1660437055/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-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:43:19 +0000 UTC FinishedAt: 2026-07-31 18:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:43:19 +0000 UTC FinishedAt: 2026-07-31 18:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:43:19 +0000 UTC FinishedAt: 2026-07-31 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:43:19 +0000 UTC FinishedAt: 2026-07-31 19:07:53 +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:*c26a4c8b-d3e0-421d-a9ea-340201213809,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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1547065956/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": "ebe9be79-8e25-49fc-bdd5-d4a776827dd7", "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-workflowq6hq8/series-workflowq6hq8-build-action-993289200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 18:43:19 +0000 UTC FinishedAt: 2026-07-31 19:07:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c26a4c8b-d3e0-421d-a9ea-340201213809,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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1547065956/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": "ebe9be79-8e25-49fc-bdd5-d4a776827dd7", "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-workflowq6hq8/series-workflowq6hq8-build-action-993289200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:07:53 +0000 UTC FinishedAt: 2026-07-31 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:07:53 +0000 UTC FinishedAt: 2026-07-31 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:07:53 +0000 UTC FinishedAt: 2026-07-31 19:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:07:53 +0000 UTC FinishedAt: 2026-07-31 19:09:42 +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:*ebe9be79-8e25-49fc-bdd5-d4a776827dd7,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-workflowq6hq8/series-workflowq6hq8-build-action-993289200/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-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 22:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 22:16:51 +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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"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:*d2934247-41bb-441d-95e4-2fece9bac381,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebe9be79-8e25-49fc-bdd5-d4a776827dd7,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-workflowq6hq8/series-workflowq6hq8-build-action-1660437055/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-workflowq6hq8/series-workflowq6hq8-build-action-993289200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 19:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 19:09:56 +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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1532254189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 19:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 19:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:09:52 +0000 UTC FinishedAt: 2026-07-31 19:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:10:02 +0000 UTC FinishedAt: 2026-07-31 22:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6hq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","mem_cgroup_shrink_node","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5c4851e4cdfc3204128f88991be64a6e3929d3d0","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ea908a97-2916-421a-b8c0-419e5a5a2768","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-31 19:10:02 +0000 UTC FinishedAt: 2026-07-31 22:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2934247-41bb-441d-95e4-2fece9bac381,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebe9be79-8e25-49fc-bdd5-d4a776827dd7,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-workflowq6hq8/series-workflowq6hq8-build-action-1660437055/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-workflowq6hq8/series-workflowq6hq8-build-action-993289200/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-workflowq6hq8/series-workflowq6hq8-convert-artifact-1532254189/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,}