Name: series-workflowj5vtm Phase: Succeeded StartedAt: 2026-08-01 09:22:31 +0000 UTC FinishedAt: 2026-08-01 13:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[0] Phase: Succeeded StartedAt: 2026-08-01 09:22:31 +0000 UTC FinishedAt: 2026-08-01 09:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 09:22:31 +0000 UTC FinishedAt: 2026-08-01 09:25:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "2659f94ed3be147942acbea96405efc562afb34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "EVM", "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "2659f94ed3be147942acbea96405efc562afb34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "EVM", "BPF_SYSCALL", "BPF_JIT" ], "series_id": "12135746-946e-499a-b153-2d18852b1f8c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_init_inode_xattr", "security_lsmxattr_add", "security_inode_init_security", "evm_inode_init_security" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtFVk0mIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2V2bV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgdGhhdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIGR1cmluZyBpbm9kZSBjcmVhdGlvbi4gSXQgYWxzbyByZWZhY3RvcnMgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHRvIHVzZSBhIG5ldyBgc3RydWN0IGxzbV94YXR0cnNgIGFuZCB1cGRhdGVzIEVWTSwgU0VMaW51eCwgYW5kIFNNQUNLIHRvIHVzZSBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlY3VyaXR5IGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OTgwMTMxNzE5YzA1MTNmZjNiNzNiMzk4MjUxYTcxMzAwMjA0NGI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwOToyMzo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTExLDcgJiM0MzsxMSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG5AQCAtMzc5LDYgJiM0MzszODEsNDQgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9kYXRhX2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIGRfcmVhbF9pbm9kZShmaWxlX2RlbnRyeShmaWxlKSk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG4mIzQzOyAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XG4mIzQzOyAqIEBuYW1lX19zdHI6IHhhdHRyIG5hbWUgKGUuZy4sIFwmIzM0O2JwZi5maWxlX2xhYmVsXCYjMzQ7KVxuJiM0MzsgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdFxuJiM0MzsgKiAgICAgICAgIHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbiwgbmVnYXRpdmUgZXJyb3Igb24gb3RoZXIgZmFpbHVyZXMuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xuJiM0MztcdGNvbnN0IHZvaWQgKnZhbHVlO1xuJiM0MztcdHUzMiB2YWx1ZV9sZW47XG4mIzQzO1xuJiM0MztcdGlmICghbmFtZV9fc3RyKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCxcbiYjNDM7XHRcdCAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhhdHRycy1cdTAwM2V4YXR0cnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XG4mIzQzO1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfbHNteGF0dHJfYWRkKHhhdHRycywgTFNNX0lEX0JQRixcbiYjNDM7XHRcdFx0XHQgICAgIG5hbWVfX3N0ciAmIzQzOyBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSxcbiYjNDM7XHRcdFx0XHQgICAgIHZhbHVlLCB2YWx1ZV9sZW4pO1xuJiM0Mzt9XG4mIzQzO1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zOTAsNiAmIzQzOzQzMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfZGF0YV9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cilcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbiBcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbmluZGV4IGRkYTI3MmQ3OGYwMTMuLjRiZjM1MGVmMDJmNDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbkBAIC0xMiw2ICYjNDM7MTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiBcbiYjNDM7LyogbWF4IGJwZiB4YXR0cnMgcGVyIGlub2RlICovXG4mIzQzOyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfQlBGX0xTTVxuIFxuIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5pbmRleCA5MTNmNDU3M2IyMDM4Li41MjhmMzYwZjMzMDhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldm0uaFxuQEAgLTEyLDYgJiM0MzsxMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0VWTVxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtMjEsOCAmIzQzOzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFx0XHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxuQEAgLTYzLDggJiM0Mzs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uNWIyZGU3ODY1Y2U4MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTExNiw4ICYjNDM7MTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHQgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG5pbmRleCBiNGY4Y2FkNTNkZGIwLi43YWZlMDZhOGQ0YzZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuQEAgLTIwMCwyMCAmIzQzOzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiAvKipcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcbi0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnNcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXG4mIzQzOyAqIEBjdHg6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXG4gICpcbi0gKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEB4YXR0cnMgYXJyYXkgdG8gZmlsbCB3aXRoIGFuIHhhdHRyLFxuLSAqIGFuZCBpbmNyZW1lbnQgQHhhdHRyX2NvdW50LlxuJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXHUwMDNleGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhblxuJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVx1MDAzZXhhdHRyX2NvdW50LlxuICAqXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQGN0eC1cdTAwM2V4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgICAgICBpbnQgKnhhdHRyX2NvdW50KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4ge1xuLVx0aWYgKHVubGlrZWx5KCF4YXR0cnMpKVxuJiM0MztcdGlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtXHUwMDNleGF0dHJzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpJiM0MzsmIzQzO107XG4mIzQzO1x0cmV0dXJuIFx1MDAyNmN0eC1cdTAwM2V4YXR0cnNbY3R4LVx1MDAzZXhhdHRyX2NvdW50JiM0MzsmIzQzO107XG4gfVxuIFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmQzNWZkZTdhYTExZjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcbiBzdHJ1Y3QgbHNtX2N0eDtcbiBcbiYjNDM7c3RydWN0IGxzbV94YXR0cnMge1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuJiM0MztcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cbkBAIC00MDEsNiAmIzQzOzQwNiw5IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiBcdFx0XHRcdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpO1xuJiM0MztpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4mIzQzO1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZV9leHRyYSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzQzO1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbik7XG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuQEAgLTg5NSw2ICYjNDM7OTAzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lX2V4dHJhLFxuJiM0MztcdFx0XHRcdFx0Y29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuaW5kZXggN2I5OGY1ZDFlMmJlOC4uOGY4YzNkZTMwMzVmMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMzLDYgJiM0MzszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4mIzQzO1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4Li5iNzE1OGZjNjM1NDNlIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbkBAIC0xMDYyLDE0ICYjNDM7MTA2MiwxNiBAQCBzdGF0aWMgaW50IGV2bV9pbm9kZV9jb3B5X3VwX3hhdHRyKHN0cnVjdCBkZW50cnkgKnNyYywgY29uc3QgY2hhciAqbmFtZSlcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXG4gICovXG4gaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0ICAgIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKVxuIHtcbiBcdHN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7XG4gXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuIFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xuIFx0aW50IHJjO1xuIFxuJiM0MztcdHhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLVx1MDAzZXhhdHRycyA6IE5VTEw7XG4gXHRpZiAoIShldm1faW5pdGlhbGl6ZWQgXHUwMDI2IEVWTV9JTklUX0hNQUMpIHx8ICF4YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwODcsNyAmIzQzOzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWV2bV9wcm90ZWN0ZWRfeGF0dHJzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbiYjNDM7XHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XG4gXHQvKlxuIFx0ICogQXJyYXkgdGVybWluYXRvciAoeGF0dHIgbmFtZSA9IE5VTEwpIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1maWxsZWRcbiBcdCAqIHhhdHRyIHNsb3QuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDcxYWVhOGZkZjAxNDIuLmFlNzIxMDJjZDI5YjggMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O0xTTTogXCYjMzQ7IGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RjYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzMzLDggJiM0MzsxMzM0LDggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxuIHtcbiBcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xuLVx0c3RydWN0IHhhdHRyICpuZXdfeGF0dHJzID0gTlVMTDtcbi1cdGludCByZXQgPSAtRU9QTk9UU1VQUCwgeGF0dHJfY291bnQgPSAwO1xuJiM0MztcdHN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9O1xuJiM0MztcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEzNDQsMTUgJiM0MzsxMzQ1LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIFx0aWYgKGluaXR4YXR0cnMpIHtcbiBcdFx0LyogQWxsb2NhdGUgJiM0MzsxIGFzIHRlcm1pbmF0b3IuICovXG4tXHRcdG5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsXG4tXHRcdFx0XHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcbi1cdFx0aWYgKCFuZXdfeGF0dHJzKVxuJiM0MztcdFx0eGF0dHJzLnhhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgJiM0MzsgMSxcbiYjNDM7XHRcdFx0XHRcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcbiYjNDM7XHRcdGlmICgheGF0dHJzLnhhdHRycylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBpbm9kZV9pbml0X3NlY3VyaXR5KSB7XG4tXHRcdHJldCA9IHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLFxuLVx0XHRcdFx0XHRcdCAgXHUwMDI2eGF0dHJfY291bnQpO1xuJiM0MztcdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cnMpO1xuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdC8qXG5AQCAtMTM2NCwxOCAmIzQzOzEzNjUsMTEzIEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFxuIFx0LyogSWYgaW5pdHhhdHRycygpIGlzIE5VTEwsIHhhdHRyX2NvdW50IGlzIHplcm8sIHNraXAgdGhlIGNhbGwuICovXG4tXHRpZiAoIXhhdHRyX2NvdW50KVxuJiM0MztcdGlmICgheGF0dHJzLnhhdHRyX2NvdW50KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIG5ld194YXR0cnMsIGZzX2RhdGEpO1xuJiM0MztcdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpO1xuIG91dDpcbi1cdGZvciAoOyB4YXR0cl9jb3VudCBcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcbi1cdFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcbi1cdGtmcmVlKG5ld194YXR0cnMpO1xuJiM0MztcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRycy54YXR0cl9jb3VudC0tKVxuJiM0MztcdFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4mIzQzO1x0a2ZyZWUoeGF0dHJzLnhhdHRycyk7XG4gXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpO1xuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGxzbV94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpwcmVmaXgpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpO1xuJiM0MztcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgeGF0dHJzLVx1MDAzZXhhdHRyX2NvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZSA9IHhhdHRycy1cdTAwM2V4YXR0cnNbaV0ubmFtZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmFtZSBcdTAwMjZcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcbiYjNDM7XHRcdFx0biYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcbiYjNDM7ICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiYjNDM7ICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXG4mIzQzOyAqIEBuYW1lX2V4dHJhOiB4YXR0ciBuYW1lIGNvbXBvbmVudHMgYmV5b25kIHRoZSBjYWxsaW5nIExTTSYjMzk7cyBzdGFuZGFyZFxuJiM0MzsgKiAgICAgICAgICAgICAgeGF0dHIgc3VmZml4LCBOVUxMIGlmIHRoZSBzdGFuZGFyZCBzdWZmaXggaXMgdGhlIGZ1bGwgbmFtZVxuJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlXG4mIzQzOyAqIEB2YWx1ZV9sZW46IGxlbmd0aCBvZiBAdmFsdWVcbiYjNDM7ICpcbiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogQGxzbV9pZCBhbmQgZmlsbCBpdCB3aXRoIGEgY29weSBvZiBAdmFsdWUuIFRoZSB4YXR0ciBuYW1lIGlzIGJ1aWx0IGZyb21cbiYjNDM7ICogdGhlIHN0YW5kYXJkIHhhdHRyIHN1ZmZpeCBvZiB0aGUgY2FsbGluZyBMU00sIGZvbGxvd2VkIGJ5IEBuYW1lX2V4dHJhLlxuJiM0MzsgKiBDYWxsZXJzIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBpZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBhY2NlcHQgeGF0dHJzXG4mIzQzOyAqICAgICAgICAgYXQgaW5vZGUgY3JlYXRpb24sIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJiMzOTtzIHNsb3QgYnVkZ2V0IGlzXG4mIzQzOyAqICAgICAgICAgZXhoYXVzdGVkLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZXJyb3JzLlxuJiM0MzsgKi9cbiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWVfZXh0cmEsIGNvbnN0IHZvaWQgKnZhbHVlLFxuJiM0MztcdFx0XHQgIHNpemVfdCB2YWx1ZV9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xuJiM0MztcdHZvaWQgKnhhdHRyX3ZhbHVlO1xuJiM0MztcdGNvbnN0IGNoYXIgKnN1ZmZpeDtcbiYjNDM7XHRzaXplX3Qgc3VmZml4X2xlbiwgZXh0cmFfbGVuLCBuYW1lX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4YXR0cnMgfHwgIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaWxlc3lzdGVtIGRpZCBub3QgcHJvdmlkZSBhbiBpbml0eGF0dHJzIGNhbGxiYWNrLiAqL1xuJiM0MztcdGlmICgheGF0dHJzLVx1MDAzZXhhdHRycylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGxzbV9pZCkge1xuJiM0MztcdGNhc2UgTFNNX0lEX0JQRjpcbiYjNDM7XHRcdGlmICghbmFtZV9leHRyYSB8fCAhbmFtZV9leHRyYVswXSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRzdWZmaXggPSBYQVRUUl9CUEZfTFNNX1NVRkZJWDtcbiYjNDM7XHRcdGlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgXHUwMDNlPVxuJiM0MztcdFx0ICAgIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpO1xuJiM0MztcdGV4dHJhX2xlbiA9IG5hbWVfZXh0cmEgPyBzdHJsZW4obmFtZV9leHRyYSkgOiAwO1xuJiM0MztcdG5hbWVfbGVuID0gc3VmZml4X2xlbiAmIzQzOyBleHRyYV9sZW47XG4mIzQzO1x0aWYgKG5hbWVfbGVuIFx1MDAzZSBYQVRUUl9OQU1FX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gXHUwMDNlIFhBVFRSX1NJWkVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgJiM0MzsgbmFtZSBpbnRvIG9uZSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdHhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW4gJiM0MzsgMSwgR0ZQX05PV0FJVCk7XG4mIzQzO1x0aWYgKCF4YXR0cl92YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkoeGF0dHJfdmFsdWUsIHZhbHVlLCB2YWx1ZV9sZW4pO1xuJiM0MztcdG1lbWNweSh4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW4sIHN1ZmZpeCwgc3VmZml4X2xlbik7XG4mIzQzO1x0aWYgKGV4dHJhX2xlbilcbiYjNDM7XHRcdG1lbWNweSh4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW4gJiM0Mzsgc3VmZml4X2xlbiwgbmFtZV9leHRyYSxcbiYjNDM7XHRcdCAgICAgICBleHRyYV9sZW4pO1xuJiM0MztcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiYjNDM7XHRpZiAoIXhhdHRyKSB7XG4mIzQzO1x0XHRrZnJlZSh4YXR0cl92YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4mIzQzO1x0eGF0dHItXHUwMDNlbmFtZSA9IChjb25zdCBjaGFyICopeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZVxuICAqIEBpbm9kZTogdGhlIGlub2RlXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCA4ZDY5NDVlZGFlN2FhLi4yMTU0NGM3NzVjMTc2IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yOTYyLDcgJiM0MzsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcbiBcbiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgY3JlZF9zZWN1cml0eV9zdHJ1Y3QgKmNyc2VjID0gc2VsaW51eF9jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XG5AQCAtMjk5Miw3ICYjNDM7Mjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0ICAgICEoc2JzZWMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNCTEFCRUxfTU5UKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4mIzQzO1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcdGlmICh4YXR0cikge1xuIFx0XHRyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0X2ZvcmNlKG5ld3NpZCxcbiBcdFx0XHRcdFx0XHQgICBcdTAwMjZjb250ZXh0LCBcdTAwMjZjbGVuKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCBmZjExNTA2OGM1YzA2Li40NTAxMDc4NDMwY2EwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtOTgxLDEwICYjNDM7OTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiBcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWxsZW4pXG4ge1xuLVx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4mIzQzO1x0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcbiBcdGlmICgheGF0dHIpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEwMDMsMTQgJiM0MzsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbiYjNDM7ICogQHhhdHRyczogd2hlcmUgdG8gcHV0IGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZSBjb3VudFxuICAqXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUmIzM5O3Mgbm8gbWVtb3J5XG4gICovXG4gc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0dHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTtcbiBcbi1cdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0XHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXG4tXHRcdFx0XHRUUkFOU19UUlVFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRV9TSVpFXG4tXHRcdFx0KSlcbiYjNDM7XHRcdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsXG4mIzQzO1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuJiM0MztcdFx0XHRcdFx0IFRSQU5TX1RSVUUsXG4mIzQzO1x0XHRcdFx0XHQgVFJBTlNfVFJVRV9TSVpFKSlcbiBcdFx0XHRcdHJjID0gLUVOT01FTTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHJjID09IDApXG4tXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxuLVx0XHRcdCAgICBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4tXHRcdCAgICAgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bilcbi1cdFx0KSlcbiYjNDM7XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuJiM0MztcdFx0XHRcdCBYQVRUUl9TTUFDS19TVUZGSVgsXG4mIzQzO1x0XHRcdFx0IGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bixcbiYjNDM7XHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxOC4uMjYzOWY5Zjk0MTk1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICYjNDM7OTIsOSBAQCBleHRlcm4gaW50IGJwZl9zZXRfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcbiBleHRlcm4gaW50IGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyKSBfX2tzeW0gX193ZWFrO1xuIFxuJiM0MztzdHJ1Y3QgbHNtX3hhdHRycztcbiYjNDM7ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9nZXRfeGF0dHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9zZXRfcmVtb3ZlX3hhdHRyLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3RfZnN2ZXJpdHkuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcJiMzNDtcbiBcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXCYjMzQ7L3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc1wmIzM0OztcbiBcbkBAIC0yNjgsNiAmIzQzOzI2OSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxuIFx0cmVtb3ZlKHRlc3RmaWxlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IGZkID0gLTEsIGVycjtcbiYjNDM7XHRjaGFyIHZhbHVlX291dFs2NF07XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgdGVzdCBtdXN0IGJlIHJ1biBmcm9tIGEgZnMgdGhhdCBjYWxsc1xuJiM0MztcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcJiMzNDsvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcJiMzNDs7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuJiM0MztcdGVyciA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRyaWdnZXIgaW5vZGVfaW5pdF9zZWN1cml0eSAqL1xuJiM0MztcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9iYWJseSBzaG91bGQgbm90IGJlIG5lZWRlZCBhcyB3ZSB3aWxsIGJlIGxhYmVsaW5nIGEgZmlsZVxuJiM0MztcdCAqIGluIC9kZXYvc2htLCBidXQganVzdCBpbiBjYXNlIHdlIGNoZWNrIGlmIHRoZSBob29rIHdhcyBhY3R1YWxseVxuJiM0MztcdCAqIGNhbGxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNlYnNzLVx1MDAzZWhvb2tfcmFuKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDppbm9kZV9pbml0X3NlY3VyaXR5IGhvb2sgd2FzIG5vdCBpbnZva2VkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIF9fZnVuY19fKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbi4gKi9cbiYjNDM7XHRpZiAoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0ID09IC1FT1BOT1RTVVBQKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTFNNIGluaXQgeGF0dHJzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIF9fZnVuY19fKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdCwgMCwgXCYjMzQ7aW5pdF9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBpbml0eGF0dHJzIHByZXBlbmRzIFwmIzM0O3NlY3VyaXR5LlwmIzM0OyB0byB0aGUgbmFtZS4gKi9cbiYjNDM7XHRlcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsIFwmIzM0O3NlY3VyaXR5LmJwZi50ZXN0X2xhYmVsXCYjMzQ7LCB2YWx1ZV9vdXQsXG4mIzQzO1x0XHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0RBVEEpIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIF9fZnVuY19fKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFwmIzM0O2dldHhhdHRyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAoaW50KXNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNleGF0dHJfdmFsdWUpLCBcJiMzNDt4YXR0cl9zaXplXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsIFwmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwmIzM0OyxcbiYjNDM7XHRcdFx0ICBzaXplb2YoXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7KSksIDAsXG4mIzQzO1x0XHQgIFwmIzM0O3hhdHRyX3ZhbHVlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xuJiM0MzsjZGVmaW5lIElOSVRfSU5PREVfWEFUVFJfTUFYIDRcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW1zIG1heSBhdHRhY2ggdG8gaW5vZGVfaW5pdF9zZWN1cml0eSB3aXRob3V0IGFuIGF0dGFjaC10aW1lIGxpbWl0LCBidXRcbiYjNDM7ICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxuJiM0MzsgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTtcbiYjNDM7XHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gXCYjMzQ7L2Rldi9zaG0vdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdFwmIzM0OztcbiYjNDM7XHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG5vdHJ1biA9IDAsIG90aGVyID0gMDtcbiYjNDM7XHRpbnQgaSwgZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuKCk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXCYjMzQ7b3BlblwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKHNrZWxbaV0tXHUwMDNlcm9kYXRhLVx1MDAzZXhhdHRyX25hbWUsXG4mIzQzO1x0XHRcdCBzaXplb2Yoc2tlbFtpXS1cdTAwM2Vyb2RhdGEtXHUwMDNleGF0dHJfbmFtZSksIFwmIzM0O2JwZi5sYWJlbF8lZFwmIzM0OyxcbiYjNDM7XHRcdFx0IGkpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXCYjMzQ7bG9hZFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHNrZWxbaV0tXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmtbaV0sIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXG4mIzQzO1x0ZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGVzdFxuJiM0MztcdCAqIHhhdHRyIGJ1ZGdldCBhY2NvdW50aW5nIHdpdGggLUVOT1NQQy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmVzID0gc2tlbFtpXS1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghc2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlaG9va19yYW4gfHwgcmVzID09IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRub3RydW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0ZWxzZSBpZiAocmVzID09IDApXG4mIzQzO1x0XHRcdG9rJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKVxuJiM0MztcdFx0XHRub3NwYyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG90aGVyJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChub3RydW4gPT0gSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMSkge1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyVzOlNLSVA6aG9vayBub3QgaW52b2tlZCBvciBmcyBsYWNrcyBMU00gaW5pdCB4YXR0cnNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCBcJiMzNDtzbG90c193aXRoaW5fYnVkZ2V0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEobm9zcGMsIDEsIFwmIzM0O3Nsb3Rfb3Zlcl9idWRnZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShvdGhlciwgMCwgXCYjMzQ7dW5leHBlY3RlZF9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7XG4mIzQzO1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlbW92ZSh0ZXN0ZmlsZV9zbG90KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpXG4ge1xuIFx0LyogTWF0Y2hlcyB4YXR0cl9uYW1lcyBpbiBwcm9ncy90ZXN0X2dldF94YXR0ci5jICovXG5AQCAtMjg4LDQgJiM0Mzs0MzgsMTAgQEAgdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxuIFxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnN2ZXJpdHlcJiMzNDspKVxuIFx0XHR0ZXN0X2ZzdmVyaXR5KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2luaXRfaW5vZGVfeGF0dHJcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZTNkOGQzOWRlOWNhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgJiM0MzsxLDMzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2tmdW5jcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7X191MzIgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGhvb2tfcmFuO1xuJiM0MztpbnQgaW5pdF9yZXN1bHQgPSAtMTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSBcJiMzNDticGYudGVzdF9sYWJlbFwmIzM0OztcbiYjNDM7Y2hhciB4YXR0cl92YWx1ZVtdID0gXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9pbml0X3NlY3VyaXR5XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyO1xuJiM0MztcdF9fdTMyIHBpZDtcbiYjNDM7XG4mIzQzO1x0cGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRob29rX3JhbiA9IDE7XG4mIzQzO1x0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXHUwMDI2dmFsdWVfcHRyKTtcbiYjNDM7XHRpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgXHUwMDI2dmFsdWVfcHRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDssCiAgICAmIzM0O0VWTSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luaXRfaW5vZGVfeGF0dHImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfbHNteGF0dHJfYWRkJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7ZXZtX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBJdCBhbHNvIHJlZmFjdG9ycyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2AgYW5kIHVwZGF0ZXMgRVZNLCBTRUxpbnV4LCBhbmQgU01BQ0sgdG8gdXNlIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgc2VjdXJpdHkgYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk5ODAxMzE3MTljMDUxM2ZmM2I3M2IzOTgyNTFhNzEzMDAyMDQ0YjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA5OjIzOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jCmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0Ci0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9icGZfZnNfa2Z1bmNzLmMKQEAgLTExLDcgJiM0MzsxMSw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgveGF0dHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9sc20uaCZndDsKIAogX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogCkBAIC0zNzksNiAmIzQzOzM4MSw0NCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2RhdGFfaW5vZGUoc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIGRfcmVhbF9pbm9kZShmaWxlX2RlbnRyeShmaWxlKSk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHkKJiM0MzsgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dAomIzQzOyAqIEBuYW1lX19zdHI6IHhhdHRyIG5hbWUgKGUuZy4sICYjMzQ7YnBmLmZpbGVfbGFiZWwmIzM0OykKJiM0MzsgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlCiYjNDM7ICoKJiM0MzsgKiBPbmx5IGNhbGxhYmxlIGZyb20gbHNtL2lub2RlX2luaXRfc2VjdXJpdHkgcHJvZ3JhbXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0CiYjNDM7ICogICAgICAgICB4YXR0cnMgYXQgaW5vZGUgY3JlYXRpb24sIG5lZ2F0aXZlIGVycm9yIG9uIG90aGVyIGZhaWx1cmVzLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLAomIzQzOwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnZhbHVlX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopdmFsdWVfcDsKJiM0MzsJY29uc3Qgdm9pZCAqdmFsdWU7CiYjNDM7CXUzMiB2YWx1ZV9sZW47CiYjNDM7CiYjNDM7CWlmICghbmFtZV9fc3RyKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsCiYjNDM7CQkgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJaWYgKCF4YXR0cnMtJmd0O3hhdHRycykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJdmFsdWVfbGVuID0gX19icGZfZHlucHRyX3NpemUodmFsdWVfcHRyKTsKJiM0MzsJdmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCh4YXR0cnMsIExTTV9JRF9CUEYsCiYjNDM7CQkJCSAgICAgbmFtZV9fc3RyICYjNDM7IHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxLAomIzQzOwkJCQkgICAgIHZhbHVlLCB2YWx1ZV9sZW4pOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpCkBAIC0zOTAsNiAmIzQzOzQzMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfZGF0YV9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyKQogQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpCiAKIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaCBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCmluZGV4IGRkYTI3MmQ3OGYwMTMuLjRiZjM1MGVmMDJmNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCkBAIC0xMiw2ICYjNDM7MTIsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl92ZXJpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xzbV9ob29rcy5oJmd0OwogCiYjNDM7LyogbWF4IGJwZiB4YXR0cnMgcGVyIGlub2RlICovCiYjNDM7I2RlZmluZSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIDQKJiM0MzsKICNpZmRlZiBDT05GSUdfQlBGX0xTTQogCiBleHRlcm4gYm9vbCBicGZfbHNtX2luaXRpYWxpemVkIF9fcm9fYWZ0ZXJfaW5pdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oCmluZGV4IDkxM2Y0NTczYjIwMzguLjUyOGYzNjBmMzMwOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldm0uaApAQCAtMTIsNiAmIzQzOzEyLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlZ3JpdHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC94YXR0ci5oJmd0OwogCiYjNDM7c3RydWN0IGxzbV94YXR0cnM7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0VWTQogZXh0ZXJuIGludCBldm1fc2V0X2tleSh2b2lkICprZXksIHNpemVfdCBrZXlsZW4pOwogZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtMjEsOCAmIzQzOzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsCiAJCSBjb25zdCBjaGFyICp4YXR0cl92YWx1ZSwgc2l6ZV90IHhhdHRyX3ZhbHVlX2xlbik7CiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLAotCQkJICAgIGludCAqeGF0dHJfY291bnQpOwomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKJiM0MzsJCQkgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7CiBleHRlcm4gYm9vbCBldm1fcmV2YWxpZGF0ZV9zdGF0dXMoY29uc3QgY2hhciAqeGF0dHJfbmFtZSk7CiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7CiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLApAQCAtNjMsOCAmIzQzOzY1LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSwKIAogc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCSAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJCSAgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJCSAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uNWIyZGU3ODY1Y2U4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTExNiw4ICYjNDM7MTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KQogTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKJiM0MzsJIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmgKaW5kZXggYjRmOGNhZDUzZGRiMC4uN2FmZTA2YThkNGM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7CiAKIC8qKgogICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4Ci0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnMKLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZCkKJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rcwogICoKLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsCi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC4KJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtJmd0O3hhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4KJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LSZndDt4YXR0cl9jb3VudC4KICAqCi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtJmd0O3hhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgICAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eCkKIHsKLQlpZiAodW5saWtlbHkoIXhhdHRycykpCiYjNDM7CWlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtJmd0O3hhdHRycykpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiAmYW1wO3hhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdOwomIzQzOwlyZXR1cm4gJmFtcDtjdHgtJmd0O3hhdHRyc1tjdHgtJmd0O3hhdHRyX2NvdW50JiM0MzsmIzQzO107CiB9CiAKICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li5kMzVmZGU3YWExMWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC02OCw2ICYjNDM7NjgsMTEgQEAgc3RydWN0IHdhdGNoOwogc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjsKIHN0cnVjdCBsc21fY3R4OwogCiYjNDM7c3RydWN0IGxzbV94YXR0cnMgewomIzQzOwlzdHJ1Y3QgeGF0dHIgKnhhdHRyczsKJiM0MzsJdW5zaWduZWQgaW50IHhhdHRyX2NvdW50OwomIzQzO307CiYjNDM7CiAvKiBEZWZhdWx0IChubykgb3B0aW9ucyBmb3IgdGhlIGNhcGFibGUgZnVuY3Rpb24gKi8KICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MAogLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi8KQEAgLTQwMSw2ICYjNDM7NDA2LDkgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAogCQkJCSBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpOwomIzQzO2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKm5hbWVfZXh0cmEsIGNvbnN0IHZvaWQgKnZhbHVlLAomIzQzOwkJCSAgc2l6ZV90IHZhbHVlX2xlbik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKQEAgLTg5NSw2ICYjNDM7OTAzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLAomIzQzOwkJCQkJY29uc3QgY2hhciAqbmFtZV9leHRyYSwKJiM0MzsJCQkJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmMKaW5kZXggN2I5OGY1ZDFlMmJlOC4uOGY4YzNkZTMwMzVmMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYnBmL2hvb2tzLmMKQEAgLTMzLDYgJiM0MzszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKQogCiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iKSwKJiM0MzsJLmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsCiB9OwogCiBERUZJTkVfTFNNKGJwZikgPSB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5kZXggYjU5ZTNmMTIxYjhhOC4uYjcxNThmYzYzNTQzZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYwpAQCAtMTA2MiwxNCAmIzQzOzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpCiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlCiAgKi8KIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CQkJICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKQogewogCXN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7CiAJc3RydWN0IHhhdHRyICp4YXR0ciwgKmV2bV94YXR0cjsKJiM0MzsJc3RydWN0IHhhdHRyICp4YXR0cnM7CiAJYm9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlOwogCWludCByYzsKIAomIzQzOwl4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy0mZ3Q7eGF0dHJzIDogTlVMTDsKIAlpZiAoIShldm1faW5pdGlhbGl6ZWQgJmFtcDsgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycykKIAkJcmV0dXJuIDA7CiAKQEAgLTEwODcsNyAmIzQzOzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFldm1fcHJvdGVjdGVkX3hhdHRycykKIAkJcmV0dXJuIDA7CiAKLQlldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CWV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTsKIAkvKgogCSAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkCiAJICogeGF0dHIgc2xvdC4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDIuLmFlNzIxMDJjZDI5YjggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtMU006ICYjMzQ7IGZtdAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9sc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYXBhYmlsaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGNhY2hlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzMzLDggJiM0MzsxMzM0LDggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJIGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSkKIHsKIAlzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDsKLQlzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMOwotCWludCByZXQgPSAtRU9QTk9UU1VQUCwgeGF0dHJfY291bnQgPSAwOwomIzQzOwlzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTsKJiM0MzsJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7CkBAIC0xMzQ0LDE1ICYjNDM7MTM0NSwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogCWlmIChpbml0eGF0dHJzKSB7CiAJCS8qIEFsbG9jYXRlICYjNDM7MSBhcyB0ZXJtaW5hdG9yLiAqLwotCQluZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLAotCQkJCSAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpOwotCQlpZiAoIW5ld194YXR0cnMpCiYjNDM7CQl4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLAomIzQzOwkJCQkJc2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpOwomIzQzOwkJaWYgKCF4YXR0cnMueGF0dHJzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHsKLQkJcmV0ID0gc2NhbGwtJmd0O2hsLSZndDtob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycywKLQkJCQkJCSAgJmFtcDt4YXR0cl9jb3VudCk7CiYjNDM7CQlyZXQgPSBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLAomIzQzOwkJCQkJCQkgICZhbXA7eGF0dHJzKTsKIAkJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRU9QTk9UU1VQUCkKIAkJCWdvdG8gb3V0OwogCQkvKgpAQCAtMTM2NCwxOCAmIzQzOzEzNjUsMTEzIEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCX0KIAogCS8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqLwotCWlmICgheGF0dHJfY291bnQpCiYjNDM7CWlmICgheGF0dHJzLnhhdHRyX2NvdW50KQogCQlnb3RvIG91dDsKIAotCXJldCA9IGluaXR4YXR0cnMoaW5vZGUsIG5ld194YXR0cnMsIGZzX2RhdGEpOwomIzQzOwlyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTsKIG91dDoKLQlmb3IgKDsgeGF0dHJfY291bnQgJmd0OyAwOyB4YXR0cl9jb3VudC0tKQotCQlrZnJlZShuZXdfeGF0dHJzW3hhdHRyX2NvdW50IC0gMV0udmFsdWUpOwotCWtmcmVlKG5ld194YXR0cnMpOwomIzQzOwlmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50ICZndDsgMDsgeGF0dHJzLnhhdHRyX2NvdW50LS0pCiYjNDM7CQlrZnJlZSh4YXR0cnMueGF0dHJzW3hhdHRycy54YXR0cl9jb3VudCAtIDFdLnZhbHVlKTsKJiM0MzsJa2ZyZWUoeGF0dHJzLnhhdHRycyk7CiAJcmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGxzbV94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLAomIzQzOwkJCQkgICAgY29uc3QgY2hhciAqcHJlZml4KQomIzQzO3sKJiM0MzsJc2l6ZV90IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKJiM0MzsJdW5zaWduZWQgaW50IGksIG4gPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgeGF0dHJzLSZndDt4YXR0cl9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtJmd0O3hhdHRyc1tpXS5uYW1lOwomIzQzOwomIzQzOwkJaWYgKG5hbWUgJmFtcDsmYW1wOyAhc3RybmNtcChuYW1lLCBwcmVmaXgsIHByZWZpeF9sZW4pKQomIzQzOwkJCW4mIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiBuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzZWN1cml0eV9sc214YXR0cl9hZGQoKSAtIEFkZCBhbiB4YXR0ciBkdXJpbmcgaW5vZGVfaW5pdF9zZWN1cml0eQomIzQzOyAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzCiYjNDM7ICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNCiYjNDM7ICogQG5hbWVfZXh0cmE6IHhhdHRyIG5hbWUgY29tcG9uZW50cyBiZXlvbmQgdGhlIGNhbGxpbmcgTFNNJiMzOTtzIHN0YW5kYXJkCiYjNDM7ICogICAgICAgICAgICAgIHhhdHRyIHN1ZmZpeCwgTlVMTCBpZiB0aGUgc3RhbmRhcmQgc3VmZml4IGlzIHRoZSBmdWxsIG5hbWUKJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlCiYjNDM7ICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZQomIzQzOyAqCiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkKJiM0MzsgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEB2YWx1ZS4gVGhlIHhhdHRyIG5hbWUgaXMgYnVpbHQgZnJvbQomIzQzOyAqIHRoZSBzdGFuZGFyZCB4YXR0ciBzdWZmaXggb2YgdGhlIGNhbGxpbmcgTFNNLCBmb2xsb3dlZCBieSBAbmFtZV9leHRyYS4KJiM0MzsgKiBDYWxsZXJzIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgaWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRycwomIzQzOyAqICAgICAgICAgYXQgaW5vZGUgY3JlYXRpb24sIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJiMzOTtzIHNsb3QgYnVkZ2V0IGlzCiYjNDM7ICogICAgICAgICBleGhhdXN0ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBlcnJvcnMuCiYjNDM7ICovCiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLAomIzQzOwkJCSAgY29uc3QgY2hhciAqbmFtZV9leHRyYSwgY29uc3Qgdm9pZCAqdmFsdWUsCiYjNDM7CQkJICBzaXplX3QgdmFsdWVfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHhhdHRyICp4YXR0cjsKJiM0MzsJdm9pZCAqeGF0dHJfdmFsdWU7CiYjNDM7CWNvbnN0IGNoYXIgKnN1ZmZpeDsKJiM0MzsJc2l6ZV90IHN1ZmZpeF9sZW4sIGV4dHJhX2xlbiwgbmFtZV9sZW47CiYjNDM7CiYjNDM7CWlmICgheGF0dHJzIHx8ICF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBUaGUgZmlsZXN5c3RlbSBkaWQgbm90IHByb3ZpZGUgYW4gaW5pdHhhdHRycyBjYWxsYmFjay4gKi8KJiM0MzsJaWYgKCF4YXR0cnMtJmd0O3hhdHRycykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGxzbV9pZCkgewomIzQzOwljYXNlIExTTV9JRF9CUEY6CiYjNDM7CQlpZiAoIW5hbWVfZXh0cmEgfHwgIW5hbWVfZXh0cmFbMF0pCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlzdWZmaXggPSBYQVRUUl9CUEZfTFNNX1NVRkZJWDsKJiM0MzsJCWlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgJmd0Oz0KJiM0MzsJCSAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKQomIzQzOwkJCXJldHVybiAtRU5PU1BDOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeCk7CiYjNDM7CWV4dHJhX2xlbiA9IG5hbWVfZXh0cmEgPyBzdHJsZW4obmFtZV9leHRyYSkgOiAwOwomIzQzOwluYW1lX2xlbiA9IHN1ZmZpeF9sZW4gJiM0MzsgZXh0cmFfbGVuOwomIzQzOwlpZiAobmFtZV9sZW4gJmd0OyBYQVRUUl9OQU1FX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuICZndDsgWEFUVFJfU0laRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogQ29tYmluZSB4YXR0ciB2YWx1ZSAmIzQzOyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovCiYjNDM7CXhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW4gJiM0MzsgMSwgR0ZQX05PV0FJVCk7CiYjNDM7CWlmICgheGF0dHJfdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbiwgc3VmZml4LCBzdWZmaXhfbGVuKTsKJiM0MzsJaWYgKGV4dHJhX2xlbikKJiM0MzsJCW1lbWNweSh4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW4gJiM0Mzsgc3VmZml4X2xlbiwgbmFtZV9leHRyYSwKJiM0MzsJCSAgICAgICBleHRyYV9sZW4pOwomIzQzOwkoKGNoYXIgKil4YXR0cl92YWx1ZSlbdmFsdWVfbGVuICYjNDM7IG5hbWVfbGVuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTsKJiM0MzsJaWYgKCF4YXR0cikgewomIzQzOwkJa2ZyZWUoeGF0dHJfdmFsdWUpOwomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeGF0dHItJmd0O3ZhbHVlID0geGF0dHJfdmFsdWU7CiYjNDM7CXhhdHRyLSZndDtuYW1lID0gKGNvbnN0IGNoYXIgKil4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW47CiYjNDM7CXhhdHRyLSZndDt2YWx1ZV9sZW4gPSB2YWx1ZV9sZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZQogICogQGlub2RlOiB0aGUgaW5vZGUKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA4ZDY5NDVlZGFlN2FhLi4yMTU0NGM3NzVjMTc2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0yOTYyLDcgJiM0MzsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAotCQkJCSAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7CiAJc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYzsKQEAgLTI5OTIsNyAmIzQzOzI5OTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkgICAgIShzYnNlYy0mZ3Q7ZmxhZ3MgJmFtcDsgU0JMQUJFTF9NTlQpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQl4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTsKJiM0MzsJeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTsKIAlpZiAoeGF0dHIpIHsKIAkJcmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsCiAJCQkJCQkgICAmYW1wO2NvbnRleHQsICZhbXA7Y2xlbik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IGZmMTE1MDY4YzVjMDYuLjQ1MDEwNzg0MzBjYTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05ODEsMTAgJiM0Mzs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsCiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCwKJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKIAkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKQogewotCXN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwogCiAJaWYgKCF4YXR0cikKIAkJcmV0dXJuIDA7CkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsCiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlCiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3QKICAqIEBxc3RyOiB1bnVzZWQKLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlcwotICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKQomIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnQKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSYjMzk7cyBubyBtZW1vcnkKICAqLwogc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTsKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpOwpAQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQkJdHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTsKIAotCQkJaWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LAotCQkJCVhBVFRSX1NNQUNLX1RSQU5TTVVURSwKLQkJCQlUUkFOU19UUlVFLAotCQkJCVRSQU5TX1RSVUVfU0laRQotCQkJKSkKJiM0MzsJCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywKJiM0MzsJCQkJCSBYQVRUUl9TTUFDS19UUkFOU01VVEUsCiYjNDM7CQkJCQkgVFJBTlNfVFJVRSwKJiM0MzsJCQkJCSBUUkFOU19UUlVFX1NJWkUpKQogCQkJCXJjID0gLUVOT01FTTsKIAkJfQogCX0KIAogCWlmIChyYyA9PSAwKQotCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsCi0JCQkgICAgWEFUVFJfU01BQ0tfU1VGRklYLAotCQkJICAgIGlzc3AtJmd0O3Nta19pbm9kZS0mZ3Q7c21rX2tub3duLAotCQkgICAgIHN0cmxlbihpc3NwLSZndDtzbWtfaW5vZGUtJmd0O3Nta19rbm93bikKLQkJKSkKJiM0MzsJCWlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLAomIzQzOwkJCQkgWEFUVFJfU01BQ0tfU1VGRklYLAomIzQzOwkJCQkgaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24sCiYjNDM7CQkJCSBzdHJsZW4oaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24pKSkKIAkJCXJjID0gLUVOT01FTTsKIGluc3RhbnRfaW5vZGU6CiAJaXNzcC0mZ3Q7c21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaAppbmRleCBhZTcxZTliNjkwNTE4Li4yNjM5ZjlmOTQxOTU1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgKQEAgLTkyLDQgJiM0Mzs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsCiAJCQkJY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhazsKIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRyczsKJiM0MztleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCWNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMKaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjaW5jbHVkZSAmIzM0O3Rlc3RfZ2V0X3hhdHRyLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X2ZzdmVyaXR5LnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHIuc2tlbC5oJiMzNDsKIAogc3RhdGljIGNvbnN0IGNoYXIgdGVzdGZpbGVbXSA9ICYjMzQ7L3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jcyYjMzQ7OwogCkBAIC0yNjgsNiAmIzQzOzI2OSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKQogCXJlbW92ZSh0ZXN0ZmlsZSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgZmQgPSAtMSwgZXJyOwomIzQzOwljaGFyIHZhbHVlX291dFs2NF07CiYjNDM7CiYjNDM7CS8qIFRoaXMgdGVzdCBtdXN0IGJlIHJ1biBmcm9tIGEgZnMgdGhhdCBjYWxscwomIzQzOwkgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSAmIzM0Oy9kZXYvc2htL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX25ldyYjMzQ7OwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CWVyciA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovCiYjNDM7CWZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGVfZmlsZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9iYWJseSBzaG91bGQgbm90IGJlIG5lZWRlZCBhcyB3ZSB3aWxsIGJlIGxhYmVsaW5nIGEgZmlsZQomIzQzOwkgKiBpbiAvZGV2L3NobSwgYnV0IGp1c3QgaW4gY2FzZSB3ZSBjaGVjayBpZiB0aGUgaG9vayB3YXMgYWN0dWFsbHkKJiM0MzsJICogY2FsbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFza2VsLSZndDtic3MtJmd0O2hvb2tfcmFuKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOmlub2RlX2luaXRfc2VjdXJpdHkgaG9vayB3YXMgbm90IGludm9rZWRcbiYjMzQ7LAomIzQzOwkJICAgICAgIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdCB4YXR0cnMgYXQgaW5vZGUgY3JlYXRpb24uICovCiYjNDM7CWlmIChza2VsLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdCA9PSAtRU9QTk9UU1VQUCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTFNNIGluaXQgeGF0dHJzXG4mIzM0OywKJiM0MzsJCSAgICAgICBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7aW5pdF9yZXN1bHQsIDAsICYjMzQ7aW5pdF9yZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIGluaXR4YXR0cnMgcHJlcGVuZHMgJiMzNDtzZWN1cml0eS4mIzM0OyB0byB0aGUgbmFtZS4gKi8KJiM0MzsJZXJyID0gZ2V0eGF0dHIodGVzdGZpbGVfbmV3LCAmIzM0O3NlY3VyaXR5LmJwZi50ZXN0X2xhYmVsJiMzNDssIHZhbHVlX291dCwKJiM0MzsJCSAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7CiYjNDM7CWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRU5PREFUQSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xuJiMzNDssCiYjNDM7CQkgICAgICAgX19mdW5jX18pOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfR0UoZXJyLCAwLCAmIzM0O2dldHhhdHRyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3hhdHRyX3ZhbHVlKSwgJiMzNDt4YXR0cl9zaXplJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsICYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwJiMzNDssCiYjNDM7CQkJICBzaXplb2YoJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OykpLCAwLAomIzQzOwkJICAmIzM0O3hhdHRyX3ZhbHVlJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwl0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXJlbW92ZSh0ZXN0ZmlsZV9uZXcpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqLwomIzQzOyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNAomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dAomIzQzOyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS4KJiM0MzsgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGlua1tJTklUX0lOT0RFX1hBVFRSX01BWCAmIzQzOyAxXSA9IHt9OwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gJiMzNDsvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19zbG90JiMzNDs7CiYjNDM7CWludCBvayA9IDAsIG5vc3BjID0gMCwgbm90cnVuID0gMCwgb3RoZXIgPSAwOwomIzQzOwlpbnQgaSwgZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNrZWxbaV0gPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW4oKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihza2VsW2ldLCAmIzM0O29wZW4mIzM0OykpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlzbnByaW50Zihza2VsW2ldLSZndDtyb2RhdGEtJmd0O3hhdHRyX25hbWUsCiYjNDM7CQkJIHNpemVvZihza2VsW2ldLSZndDtyb2RhdGEtJmd0O3hhdHRyX25hbWUpLCAmIzM0O2JwZi5sYWJlbF8lZCYjMzQ7LAomIzQzOwkJCSBpKTsKJiM0MzsKJiM0MzsJCWlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgJiMzNDtsb2FkJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJc2tlbFtpXS0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CQlsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS0mZ3Q7cHJvZ3MudGVzdF9pbml0X2lub2RlX3hhdHRyKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGVfZmlsZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGVzdAomIzQzOwkgKiB4YXR0ciBidWRnZXQgYWNjb3VudGluZyB3aXRoIC1FTk9TUEMuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDs9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJlcyA9IHNrZWxbaV0tJmd0O2RhdGEtJmd0O2luaXRfcmVzdWx0OwomIzQzOwomIzQzOwkJaWYgKCFza2VsW2ldLSZndDtic3MtJmd0O2hvb2tfcmFuIHx8IHJlcyA9PSAtRU9QTk9UU1VQUCkKJiM0MzsJCQlub3RydW4mIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAocmVzID09IDApCiYjNDM7CQkJb2smIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAocmVzID09IC1FTk9TUEMpCiYjNDM7CQkJbm9zcGMmIzQzOyYjNDM7OwomIzQzOwkJZWxzZQomIzQzOwkJCW90aGVyJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobm90cnVuID09IElOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDEpIHsKJiM0MzsJCXByaW50ZigmIzM0OyVzOlNLSVA6aG9vayBub3QgaW52b2tlZCBvciBmcyBsYWNrcyBMU00gaW5pdCB4YXR0cnNcbiYjMzQ7LAomIzQzOwkJICAgICAgIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsICYjMzQ7c2xvdHNfd2l0aGluX2J1ZGdldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKG5vc3BjLCAxLCAmIzM0O3Nsb3Rfb3Zlcl9idWRnZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShvdGhlciwgMCwgJiMzNDt1bmV4cGVjdGVkX3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDs9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7CiYjNDM7CQl0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7CiYjNDM7CX0KJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX3Nsb3QpOwomIzQzO30KJiM0MzsKIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIHsKIAkvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi8KQEAgLTI4OCw0ICYjNDM7NDM4LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIAogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZnN2ZXJpdHkmIzM0OykpCiAJCXRlc3RfZnN2ZXJpdHkoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpbml0X2lub2RlX3hhdHRyJiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0JiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jZTNkOGQzOWRlOWNhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jCkBAIC0wLDAgJiM0MzsxLDMzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfa2Z1bmNzLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztfX3UzMiBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBob29rX3JhbjsKJiM0MztpbnQgaW5pdF9yZXN1bHQgPSAtMTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyIHhhdHRyX25hbWVbMTZdID0gJiMzNDticGYudGVzdF9sYWJlbCYjMzQ7OwomIzQzO2NoYXIgeGF0dHJfdmFsdWVbXSA9ICYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwJiMzNDs7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHZhbHVlX3B0cjsKJiM0MzsJX191MzIgcGlkOwomIzQzOwomIzQzOwlwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJaWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWhvb2tfcmFuID0gMTsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwlpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTMzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gdGhlIE5ldyBCUEYgWGF0dHIgS2Z1bmMgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYWxsb3cgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgcG93ZXJmdWwuIFRoZSBwYXRjaCBpcyBmYWlybHkgYnJvYWQsIHVwZGF0aW5nIHNldmVyYWwgc2VjdXJpdHkgc3Vic3lzdGVtcyB0byBhY2NvbW1vZGF0ZSB0aGlzIGNoYW5nZS4gVGhleSYjMzk7dmUgb3B0ZWQgZm9yIGEgYHN0cnVjdCBsc21feGF0dHJzYCB0byBtYW5hZ2UgdGhlc2UgYXR0cmlidXRlcyBpbnN0ZWFkIG9mIHRoZSByYXcgYXJyYXkgcHJldmlvdXNseSB1c2VkLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbWFpbnRhaW5hYmlsaXR5LiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSB1cGRhdGVkIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3IHN0cnVjdHVyZSBhbmQgYSBuZXcgZnVuY3Rpb24sIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhpcyBuZXcga2Z1bmMuCgpMZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgb2YgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBpcyBpbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQganVzdCBkZWxlZ2F0ZXMgdG8gYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAuIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBub3cgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBzZWN1cml0eS9zZWN1cml0eS5jYCB0byBjb250YWluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoZSBvdGhlciBzdWJzeXN0ZW1zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgYWxzbyB1cGRhdGVzIGBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNgLCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgdG8gdXNlIHRoZSBgc3RydWN0IGxzbV94YXR0cnNgLgoKVGhpcyBjZXJ0YWlubHkgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgcGF0Y2gsIGFuZCByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHRob3NlIGtleSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgZnV6emluZy4gV2Ugc2hvdWxkIHplcm8gaW4gb246CiogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgCiogICBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYAoqICAgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgCgpCZWZvcmUgd2UgbW92ZSBvbiwgSSB3YW50IHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgdG8gd29yay4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGZzL2JwZl9mc19rZnVuY3MuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZzX2tmdW5jcy5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEyOT1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVx0XHQmIzQzOz0gem9uZWZzL1xuZnMvTWFrZWZpbGU6MTMwOm9iai0kKENPTkZJR19CUEZfTFNNKVx0XHQmIzQzOz0gYnBmX2ZzX2tmdW5jcy5vXG5mcy9NYWtlZmlsZS0xMzEtb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXHQmIzQzOz0gcmVzY3RybC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBMU00gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIEJQRiBMU00gaXNzdWUsIGFuZCBpdCBzZWVtcyBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIE1ha2VzIHNlbnNlLiBCZWZvcmUgSSBkaXZlIGRlZXBlciwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIGNvcnJlY3QgY29uZmlnIG9wdGlvbiB0byBiZSBmb2N1c2luZyBvbi4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIHJlZCBoZXJyaW5nLiBUaW1lIHRvIGNyYWNrIG9wZW4gYHNlY3VyaXR5L2JwZi9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBgQ09ORklHX0JQRl9MU01gIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGRvdWJsZS1jaGVjayB0aGVzZSB0aGluZ3Mgd2hlbiBkZWFsaW5nIHdpdGggc2VjdXJpdHkgZmVhdHVyZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ibGVtIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3QgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHNwZWNpZmljIEJQRiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGNvbnRleHQsIHRoYXQgdGhlIG1vc3QgcmVsZXZhbnQgaW5mb3JtYXRpb24gbWlnaHQgcmVzaWRlIHdpdGhpbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQmIzM5O3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBCUEYgc3Vic3lzdGVtIGFyZSBsYWlkIG91dC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2VseSBhcm91bmQgbGluZSA5MiwgcGVydGFpbmluZyB0byB0aGUgYXJlYSBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBrbm93IGFib3V0LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsIHRvIGZpbmQgb3V0IGFsbCBvZiB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcdCAgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHNpZGUtY2hhbm5lbCB2dWxuZXJhYmlsaXRpZXMgb24gdW5taXRpZ2F0ZWRcbiAgODY6XHRcdCAgYWZmZWN0ZWQgaGFyZHdhcmUuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuXG4gIDg5Olx0XG4gIDkwOlx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJQRl9MU01cbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAgOTU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgOTY6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTc6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuICA5ODpcdFx0aGVscFxuICA5OTpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTAwOlx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gMTAzOlx0XG4gMTA0Olx0ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY2MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBMU00gUGF0Y2ggRGVwZW5kZW5jaWVzIGFuZCBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgQlBGX0xTTWAgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzOyBpdCBsb29rcyBsaWtlIGBCUEZfTFNNYCByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4aXN0aW5nIHNlY3VyaXR5IGluZnJhc3RydWN0dXJlIGlzIGJlaW5nIGludGVncmF0ZWQgd2l0aCBCUEYuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgaXQgaXMgY29tcGlsZWQgaWYgYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgZXhwZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoZSBwYXRjaCB0b3VjaGVzIGBFVk1gLCBgU0VMSU5VWGAsIGFuZCBgU01BQ0tgIGNvbmZpZ3VyYXRpb25zLCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBzdGVtIGZyb20gdGhlIG5ldyBCUEYga2Z1bmMuIElmIEkgZW5hYmxlIGBCUEZfTFNNYCwgSSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvbiB0ZXN0aW5nIHRoYXQga2Z1bmMmIzM5O3MgaW50ZWdyYXRpb24uIFRoZSBtb2RpZmljYXRpb24gdG8gdGhvc2Ugc2VjdXJpdHkgbW9kdWxlcyBhcHBlYXJzIHRvIGJlIGFib3V0IGhvb2tpbmcgaW50byBgaW5vZGVfaW5pdF9zZWN1cml0eWAgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBnZXQgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBvbiB0aGUgY2hhbmdlcyB0aGVyZS4gU28sIHRvIGVuc3VyZSBJIGNhbiBjb21wcmVoZW5zaXZlbHkgdGVzdCB0aG9zZSBjaGFuZ2VzLCBlbmFibGluZyBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgRVZNYCBpcyBhIGdvb2QgaWRlYS4gVGhhdCB3aWxsIGVuc3VyZSB0aGUgbW9kaWZpZWQgaG9va3MgYXJlIHRlc3RlZC4KCk5leHQsIEkgbmVlZCB0byBzZWUgaG93IHRoZSB4YXR0ciBmdW5jdGlvbnMgY29tZSBpbnRvIHBsYXkuIEkmIzM5O2xsIGxvb2sgYXQgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLiBPa2F5LCBpdCYjMzk7cyBkZWZpbmVkIGFuZCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19TRUNVUklUWWAgaXMgc2V0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgQlBGIHNpZGUuIEkmIzM5O2xsIGV4YW1pbmUgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBpbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYC4gQWgsIHRoZXJlIGl0IGlzLCBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX0xTTWAsIGFzIGV4cGVjdGVkLiBTbywgaXQgY2FsbHMgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAuCgpUbyBzdW1tYXJpemUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQ6CgoqICAgYEJQRl9MU01gCiogICBgU0VDVVJJVFlgCiogICBgQlBGX1NZU0NBTExgCiogICBgQlBGX0pJVGAKCkFuZCBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBJJiMzOTttIG1pc3NpbmcuCgpUaGUgY3JpdGljYWwgcGllY2VzIG9mIHRoaXMgYXJlOgoKKiAgIGBicGZfaW5pdF9pbm9kZV94YXR0cmAKKiAgIGBzZWN1cml0eV9sc214YXR0cl9hZGRgCiogICBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAKCkZpbmFsbHksIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIHRob3NlIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vayBhbmQgdXNlcyBgbHNtX2dldF94YXR0cl9zbG90YC4gT2gsIGFuZCBgbHNtX2dldF94YXR0cl9zbG90YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYGluY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhgLiBJJiMzOTtsbCB3YW50IHRvIGVuYWJsZSB0aG9zZSBjb25maWdzIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlIHVwZGF0ZXMgYXJlIGNvcnJlY3QsIHNvOgoKKiAgIGBTRUNVUklUWV9TRUxJTlVYYAoqICAgYFNFQ1VSSVRZX1NNQUNLYAoqICAgYEVWTWAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGNvbXByZWhlbnNpdmUgdGVzdCBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVWTSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYEVWTWAuIFRoaXMgaXMgdGhlIGp1bXBpbmctb2ZmIHBvaW50OyBiZWZvcmUgSSBjb25zaWRlciBhbnkgZGVlcGVyIGRpYWdub3N0aWNzIG9yIHBvdGVudGlhbCBpc3N1ZXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgYXMgSSB3b3VsZCBleHBlY3QuIFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycz8gQXJlIHRoZSBnYXMgbGltaXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgYW50aWNpcGF0ZWQgdHJhbnNhY3Rpb24gbG9hZD8gSXMgdGhlIGJsb2NrIHRpbWUgY29uZmlndXJlZCBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgdGhlIGNvbnNlbnN1cyBtZWNoYW5pc20gc2V0dGluZ3M/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBvciBvdmVycmlkZXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyBwZXJmb3JtYW5jZSBvciBiZWhhdmlvcj8gSSB3YW50IHRvIGtub3cgZXZlcnl0aGluZy4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIGlzIGEgcHJvZHVjdCBvZiBzb21lIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVWTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzoyOmNvbmZpZyBFVk1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtFVk0gc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xNi1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzoxNzpjb25maWcgRVZNX0FUVFJfRlNVVUlEXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMTgtXHRib29sIFwmIzM0O0ZTVVVJRCAodmVyc2lvbiAyKVwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zMC1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMTpjb25maWcgRVZNX0VYVFJBX1NNQUNLX1hBVFRSU1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtBZGRpdGlvbmFsIFNNQUNLIHhhdHRyc1wmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy00Ny1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo0ODpjb25maWcgRVZNX0FERF9YQVRUUlNcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy00OS1cdGJvb2wgXCYjMzQ7QWRkIGFkZGl0aW9uYWwgRVZNIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXQgcnVudGltZVwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy01OC1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo1OTpjb25maWcgRVZNX0xPQURfWDUwOVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTYwLVx0Ym9vbCBcJiMzNDtMb2FkIGFuIFg1MDkgY2VydGlmaWNhdGUgb250byB0aGUgJiMzOTsuZXZtJiMzOTsgdHJ1c3RlZCBrZXlyaW5nXCYjMzQ7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTcwLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjcxOmNvbmZpZyBFVk1fWDUwOV9QQVRIXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNzItXHRzdHJpbmcgXCYjMzQ7RVZNIFg1MDkgY2VydGlmaWNhdGUgcGF0aFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgUXVpY2sgU2NhbiBmb3IgdGhlIE9idmlvdXMqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgaW50byBteSBtaW5kIGlzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBXaGVuIGRlYWxpbmcgd2l0aCBzZWN1cml0eSwgeW91IGFsd2F5cyBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0cywgdGhlIGxvdy1oYW5naW5nIGZydWl0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgU0VDVVJJVFlfU01BQ0tgLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBpdCBieSBteSBtZW50YWwgY2hlY2tsaXN0LiBJcyBpdCBhIHZhcmlhYmxlLCBhIGZ1bmN0aW9uLCBhIG1vZHVsZSwgYSBsaWJyYXJ5PyBJcyBpdCBzb21ldGhpbmcgaW50ZXJuYWwgb3IgZXh0ZXJuYWw/IElzIHRoaXMgc29tZXRoaW5nIEkmIzM5O3ZlIHdvcmtlZCB3aXRoIGJlZm9yZT8gSXMgdGhlcmUgYSBrbm93biB2dWxuZXJhYmlsaXR5LCBhIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIGEgY29tbW9uIG1pc2ludGVycHJldGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hbWU/IFRoaXMgaXMgYmFzaWMgdHJpYWdlLCBidXQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHByZXZlbnQgZ2V0dGluZyBzaWRlLXRyYWNrZWQgYnkgc29tZXRoaW5nIHRyaXZpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWV9TTUFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zbWFjay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0JSSU5HVVBcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTctXHRib29sIFwmIzM0O1JlcG9ydGluZyBvbiBhY2Nlc3MgZ3JhbnRlZCBieSBTbWFjayBydWxlc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzMtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjM0OmNvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVJcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXHRib29sIFwmIzM0O1BhY2tldCBtYXJraW5nIHVzaW5nIHNlY21hcmtzIGZvciBuZXRmaWx0ZXJcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ0LVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDYtXHRib29sIFwmIzM0O1RyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDg1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBrZnVuYyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2VybmVsIGZ1bmN0aW9uLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gYWxsb3cgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBwaGFzZS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaGlnaGxpZ2h0IHRoYXQgdGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgZm9yIGludmVzdGlnYXRpb24gd2lsbCBiZTogYGJwZl9pbml0X2lub2RlX3hhdHRyYCAob2YgY291cnNlISksIGFsb25nc2lkZSB0aGUgb3RoZXIgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkOiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YC4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBCUEZfTFNNYCwgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEVWTWAuCgpJJiMzOTttIG5vdyB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgZXhpc3Rpbmcgc2VjdXJpdHkgbW9kdWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgaG93IGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAgYmVoYXZlcywgc28gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIExvb2tzIGxpa2UgaW4gYHNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY2AgaXQmIzM5O3MgZGVmaW5lZCBhcyBgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KC4uLilgIC0gc28sIG5vdCBzdGF0aWMuCgpOb3csIHdhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBtb3JlIGNhcmVmdWwuIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgZmFjdCB0aGF0IGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgICppcyogc3RhdGljIChpbiBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgSSYjMzk7bGwgZG91YmxlLWNoZWNrKSwgbWVhbnMgaXQgY291bGQgYmUgaW5saW5lZCwgb3IgbWlnaHQgbm90IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYywgc28gbGV0IG1lIHF1aWNrbHkgZ28gYmFjayBhbmQgY29uZmlybSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI5NDI9c3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjk2Mi1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyOTYzOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI5NjQtXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwMDgtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzAwOTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzAxMC1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTUzPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc1OTEtXHRMU01fSE9PS19JTklUKGlub2RlX2ZyZWVfc2VjdXJpdHksIHNlbGludXhfaW5vZGVfZnJlZV9zZWN1cml0eSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU5MjpcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NTkzOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTk0LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9jcmVhdGUsIHNlbGludXhfaW5vZGVfY3JlYXRlKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTFNNIEhvb2sgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHNlY3VyaXR5IG1vZHVsZSBnZXRzIGluaXRpYWxpemVkLCBhbmQgSSYjMzk7dmUgZ290IGEga2V5IHBvaW50IGluIG1pbmQ6IGJlY2F1c2UgdGhpcyBmdW5jdGlvbiYjMzk7cyBiZWluZyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBMU01fSE9PS19JTklUYCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoZSBjb21waWxlciYjMzk7cyBnb2luZyB0byBpbmxpbmUgaXQuIFRoYXQmIzM5O3MganVzdCB0aGUgbmF0dXJlIG9mIGhvdyBmdW5jdGlvbiBwb2ludGVycyB3b3JrLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBkZWVwIGRpdmUuCgpHaXZlbiB0aGF0LCBJIHRoaW5rIHRoZSBjcml0aWNhbCBhcmVhcyB0byBzY3J1dGluaXplIGFyZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBhbmQgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YC4gVGhvc2UgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzIGZvciB3aGVyZSB0aGUgYWN0dWFsIGluaXRpYWxpemF0aW9uIGxvZ2ljIHJlc2lkZXMsIGFuZCB3aGVyZSBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhlIGNvcmUgbWVjaGFuaXNtcy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkmIzM5O20ganVzdCBnb2luZyB0byBkb3VibGUtY2hlY2sgYHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlgLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG90aGVyIHNlY3VyaXR5IG1vZHVsZSBvdmVycmlkZXMgdGhpcyBtb2R1bGUmIzM5O3MgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9OTg0PXhhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMDEtLyoqXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMDAyOiAqIHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkgLSBjb3B5IG91dCB0aGUgc21hY2sgZnJvbSBhbiBpbm9kZVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAwMy0gKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAwOS0gKi9cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMTA6c3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAxMS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9NTEyMT1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzbWFja19ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTM4LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9hbGxvY19zZWN1cml0eSwgc21hY2tfaW5vZGVfYWxsb2Nfc2VjdXJpdHkpLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6NTEzOTpcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTQwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzbWFja19pbm9kZV9saW5rKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODEKCQkJCQkJCW91dHB1dDogMjEzCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIGNsZWFyIGRpcmVjdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBhbmQgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YC4gSSBrbm93IGV4YWN0bHkgd2hhdCB0aGVzZSB0aGluZ3MgYXJlLgoKUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBJIG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25maWdzIGluIGFueSB0ZXN0aW5nIHNjZW5hcmlvOiBgQlBGX0xTTWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIGBFVk1gLiBBbmQsIHdhaXQsIEkgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcyBkZXBlbmRlbmNpZXMuIE5vdGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBCUEYga2Z1bmM6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIFRoaXMgaXMga2V5LiBJdCYjMzk7cyBnaXZpbmcgQlBGIExTTSBwcm9ncmFtcyB0aGUgY2FwYWJpbGl0eSB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbGl0eSBhZGRpdGlvbiwgYW5kIG9wZW5zIG5ldyBhdHRhY2sgc3VyZmFjZXMuIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYHN0cnVjdCBsc21feGF0dHJzYCBpbnN0ZWFkIG9mIGEgcmF3IGFycmF5IC0gaW1wcm92aW5nIHRoZSBhcmNoaXRlY3R1cmUuIEFuZCwgaXQgdXBkYXRlcyBzZXZlcmFsIExTTXMgdG8gdXNlIGl0OiBgZXZtYCwgYHNlbGludXhgLCBhbmQgYHNtYWNrYC4gVGhlIG5ldyBmdW5jdGlvbiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgY2FsbGVkIGJ5IHRoZSBuZXcga2Z1bmMsIHdhcnJhbnRzIHNjcnV0aW55LgoKSW4gc2hvcnQsIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBpbnRyb2R1Y2VzIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCwgdGhlcmVmb3JlLCBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCB0byBkb2N1bWVudCBteSBhbmFseXNpcyBhbmQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7RVZNJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7RVZNJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MDAuNjE0MzE3MTc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4NzE0NDE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkVWTVwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5pdF9pbm9kZV94YXR0clwiLFxuICAgIFwic2VjdXJpdHlfbHNteGF0dHJfYWRkXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgdGhhdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIGR1cmluZyBpbm9kZSBjcmVhdGlvbi4gSXQgYWxzbyByZWZhY3RvcnMgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHRvIHVzZSBhIG5ldyBgc3RydWN0IGxzbV94YXR0cnNgIGFuZCB1cGRhdGVzIEVWTSwgU0VMaW51eCwgYW5kIFNNQUNLIHRvIHVzZSBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlY3VyaXR5IGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjAwLjYxNDMyNjkzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNzgwNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTk4MDEzMTcxOWMwNTEzZmYzYjczYjM5ODI1MWE3MTMwMDIwNDRiOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA5OjIzOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0XFxuLS0tIGEvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuKysrIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuQEAgLTExLDcgKzExLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXR0ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sc20uaFxcdTAwM2VcXG4gXFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gXFxuQEAgLTM3OSw2ICszODEsNDQgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9kYXRhX2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gZF9yZWFsX2lub2RlKGZpbGVfZGVudHJ5KGZpbGUpKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxcbisgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dFxcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcXFwiYnBmLmZpbGVfbGFiZWxcXFwiKVxcbisgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlXFxuKyAqXFxuKyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdFxcbisgKiAgICAgICAgIHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbiwgbmVnYXRpdmUgZXJyb3Igb24gb3RoZXIgZmFpbHVyZXMuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xcbitcXHRjb25zdCB2b2lkICp2YWx1ZTtcXG4rXFx0dTMyIHZhbHVlX2xlbjtcXG4rXFxuK1xcdGlmICghbmFtZV9fc3RyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCxcXG4rXFx0XFx0ICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdGlmICgheGF0dHJzLVxcdTAwM2V4YXR0cnMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XFxuK1xcdHZhbHVlID0gX19icGZfZHlucHRyX2RhdGEodmFsdWVfcHRyLCB2YWx1ZV9sZW4pO1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBzZWN1cml0eV9sc214YXR0cl9hZGQoeGF0dHJzLCBMU01fSURfQlBGLFxcbitcXHRcXHRcXHRcXHQgICAgIG5hbWVfX3N0ciArIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxLFxcbitcXHRcXHRcXHRcXHQgICAgIHZhbHVlLCB2YWx1ZV9sZW4pO1xcbit9XFxuK1xcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbiBcXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG5AQCAtMzkwLDYgKzQzMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZXRfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfZGF0YV9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cilcXG4gQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXFxuIFxcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaCBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXFxuaW5kZXggZGRhMjcyZDc4ZjAxMy4uNGJmMzUwZWYwMmY0OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXFxuQEAgLTEyLDYgKzEyLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcXHUwMDNlXFxuIFxcbisvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cXG4rI2RlZmluZSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIDRcXG4rXFxuICNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbiBcXG4gZXh0ZXJuIGJvb2wgYnBmX2xzbV9pbml0aWFsaXplZCBfX3JvX2FmdGVyX2luaXQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuaW5kZXggOTEzZjQ1NzNiMjAzOC4uNTI4ZjM2MGYzMzA4ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ldm0uaFxcbkBAIC0xMiw2ICsxMiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlZ3JpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhdHRyLmhcXHUwMDNlXFxuIFxcbitzdHJ1Y3QgbHNtX3hhdHRycztcXG4rXFxuICNpZmRlZiBDT05GSUdfRVZNXFxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcXG4gZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbkBAIC0yMSw4ICsyMyw4IEBAIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXFxuIFxcdFxcdCBjb25zdCBjaGFyICp4YXR0cl92YWx1ZSwgc2l6ZV90IHhhdHRyX3ZhbHVlX2xlbik7XFxuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0XFx0XFx0ICAgIGludCAqeGF0dHJfY291bnQpO1xcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTtcXG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xcbiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7XFxuIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsXFxuQEAgLTYzLDggKzY1LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGludCAqeGF0dHJfY291bnQpXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uNWIyZGU3ODY1Y2U4MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTExNiw4ICsxMTYsOCBAQCBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2FsbG9jX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KVxcbiBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0IGludCAqeGF0dHJfY291bnQpXFxuK1xcdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbmluZGV4IGI0ZjhjYWQ1M2RkYjAuLjdhZmUwNmE4ZDRjNmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcXG5AQCAtMjAwLDIwICsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiAvKipcXG4gICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4XFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEBjdHg6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuICAqXFxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXFxuLSAqIGFuZCBpbmNyZW1lbnQgQHhhdHRyX2NvdW50LlxcbisgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXFx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cXG4rICogeGF0dHIsIGFuZCBpbmNyZW1lbnQgQGN0eC1cXHUwMDNleGF0dHJfY291bnQuXFxuICAqXFxuLSAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAeGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXFx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseSgheGF0dHJzKSlcXG4rXFx0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cXHUwMDNleGF0dHJzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdHJldHVybiBcXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xcbitcXHRyZXR1cm4gXFx1MDAyNmN0eC1cXHUwMDNleGF0dHJzW2N0eC1cXHUwMDNleGF0dHJfY291bnQrK107XFxuIH1cXG4gXFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmOC4uZDM1ZmRlN2FhMTFmMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5AQCAtNjgsNiArNjgsMTEgQEAgc3RydWN0IHdhdGNoO1xcbiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uO1xcbiBzdHJ1Y3QgbHNtX2N0eDtcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzIHtcXG4rXFx0c3RydWN0IHhhdHRyICp4YXR0cnM7XFxuK1xcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcXG4rfTtcXG4rXFxuIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqL1xcbiAjZGVmaW5lIENBUF9PUFRfTk9ORSAweDBcXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cXG5AQCAtNDAxLDYgKzQwNiw5IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4gXFx0XFx0XFx0XFx0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSk7XFxuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lX2V4dHJhLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4rXFx0XFx0XFx0ICBzaXplX3QgdmFsdWVfbGVuKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcXG5AQCAtODk1LDYgKzkwMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZV9leHRyYSxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9icGYvaG9va3MuYyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jXFxuaW5kZXggN2I5OGY1ZDFlMmJlOC4uOGY4YzNkZTMwMzVmMCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9icGYvaG9va3MuY1xcbisrKyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jXFxuQEAgLTMzLDYgKzMzLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2xzbV9pbml0KHZvaWQpXFxuIFxcbiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXFxuK1xcdC5sYnNfeGF0dHJfY291bnQgPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTLFxcbiB9O1xcbiBcXG4gREVGSU5FX0xTTShicGYpID0ge1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcXG5pbmRleCBiNTllM2YxMjFiOGE4Li5iNzE1OGZjNjM1NDNlIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXFxuICAqL1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqbHNtX3hhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXZtX3hhdHRyICp4YXR0cl9kYXRhO1xcbiBcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4gXFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cXHUwMDNleGF0dHJzIDogTlVMTDtcXG4gXFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFxcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XFxuIFxcdC8qXFxuIFxcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXFxuIFxcdCAqIHhhdHRyIHNsb3QuXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uYWU3MjEwMmNkMjliOCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIkxTTTogXFxcIiBmbXRcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9sc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RjYWNoZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuQEAgLTEzMzMsOCArMTMzNCw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbi1cXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xcbi1cXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcXG4rXFx0c3RydWN0IGxzbV94YXR0cnMgeGF0dHJzID0ge307XFxuK1xcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMzQ0LDE1ICsxMzQ1LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXG4gXFx0aWYgKGluaXR4YXR0cnMpIHtcXG4gXFx0XFx0LyogQWxsb2NhdGUgKzEgYXMgdGVybWluYXRvci4gKi9cXG4tXFx0XFx0bmV3X3hhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgKyAxLFxcbi1cXHRcXHRcXHRcXHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCFuZXdfeGF0dHJzKVxcbitcXHRcXHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcXG4rXFx0XFx0aWYgKCF4YXR0cnMueGF0dHJzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcXG4tXFx0XFx0cmV0ID0gc2NhbGwtXFx1MDAzZWhsLVxcdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eGF0dHJfY291bnQpO1xcbitcXHRcXHRyZXQgPSBzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cnMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdC8qXFxuQEAgLTEzNjQsMTggKzEzNjUsMTEzIEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBJZiBpbml0eGF0dHJzKCkgaXMgTlVMTCwgeGF0dHJfY291bnQgaXMgemVybywgc2tpcCB0aGUgY2FsbC4gKi9cXG4tXFx0aWYgKCF4YXR0cl9jb3VudClcXG4rXFx0aWYgKCF4YXR0cnMueGF0dHJfY291bnQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgbmV3X3hhdHRycywgZnNfZGF0YSk7XFxuK1xcdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpO1xcbiBvdXQ6XFxuLVxcdGZvciAoOyB4YXR0cl9jb3VudCBcXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXFxuLVxcdFxcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XFxuLVxcdGtmcmVlKG5ld194YXR0cnMpO1xcbitcXHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFxcdTAwM2UgMDsgeGF0dHJzLnhhdHRyX2NvdW50LS0pXFxuK1xcdFxcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xcbitcXHRrZnJlZSh4YXR0cnMueGF0dHJzKTtcXG4gXFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpO1xcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBsc21feGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKnByZWZpeClcXG4re1xcbitcXHRzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpO1xcbitcXHR1bnNpZ25lZCBpbnQgaSwgbiA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgeGF0dHJzLVxcdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtXFx1MDAzZXhhdHRyc1tpXS5uYW1lO1xcbitcXG4rXFx0XFx0aWYgKG5hbWUgXFx1MDAyNlxcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcXG4rXFx0XFx0XFx0bisrO1xcbitcXHR9XFxuK1xcdHJldHVybiBuO1xcbit9XFxuK1xcbisvKipcXG4rICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcXG4rICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcXG4rICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXFxuKyAqIEBuYW1lX2V4dHJhOiB4YXR0ciBuYW1lIGNvbXBvbmVudHMgYmV5b25kIHRoZSBjYWxsaW5nIExTTSdzIHN0YW5kYXJkXFxuKyAqICAgICAgICAgICAgICB4YXR0ciBzdWZmaXgsIE5VTEwgaWYgdGhlIHN0YW5kYXJkIHN1ZmZpeCBpcyB0aGUgZnVsbCBuYW1lXFxuKyAqIEB2YWx1ZTogeGF0dHIgdmFsdWVcXG4rICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZVxcbisgKlxcbisgKiBDbGFpbSBhbiB4YXR0ciBzbG90IGluIEB4YXR0cnMgb24gYmVoYWxmIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieVxcbisgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEB2YWx1ZS4gVGhlIHhhdHRyIG5hbWUgaXMgYnVpbHQgZnJvbVxcbisgKiB0aGUgc3RhbmRhcmQgeGF0dHIgc3VmZml4IG9mIHRoZSBjYWxsaW5nIExTTSwgZm9sbG93ZWQgYnkgQG5hbWVfZXh0cmEuXFxuKyAqIENhbGxlcnMgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0LlxcbisgKlxcbisgKiBSZXR1cm46IFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdCB4YXR0cnNcXG4rICogICAgICAgICBhdCBpbm9kZSBjcmVhdGlvbiwgLUVOT1NQQyBpZiB0aGUgY2FsbGluZyBMU00ncyBzbG90IGJ1ZGdldCBpc1xcbisgKiAgICAgICAgIGV4aGF1c3RlZCwgbmVnYXRpdmUgdmFsdWVzIG9uIG90aGVyIGVycm9ycy5cXG4rICovXFxuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lX2V4dHJhLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4rXFx0XFx0XFx0ICBzaXplX3QgdmFsdWVfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCB4YXR0ciAqeGF0dHI7XFxuK1xcdHZvaWQgKnhhdHRyX3ZhbHVlO1xcbitcXHRjb25zdCBjaGFyICpzdWZmaXg7XFxuK1xcdHNpemVfdCBzdWZmaXhfbGVuLCBleHRyYV9sZW4sIG5hbWVfbGVuO1xcbitcXG4rXFx0aWYgKCF4YXR0cnMgfHwgIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIFRoZSBmaWxlc3lzdGVtIGRpZCBub3QgcHJvdmlkZSBhbiBpbml0eGF0dHJzIGNhbGxiYWNrLiAqL1xcbitcXHRpZiAoIXhhdHRycy1cXHUwMDNleGF0dHJzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN3aXRjaCAobHNtX2lkKSB7XFxuK1xcdGNhc2UgTFNNX0lEX0JQRjpcXG4rXFx0XFx0aWYgKCFuYW1lX2V4dHJhIHx8ICFuYW1lX2V4dHJhWzBdKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0c3VmZml4ID0gWEFUVFJfQlBGX0xTTV9TVUZGSVg7XFxuK1xcdFxcdGlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgXFx1MDAzZT1cXG4rXFx0XFx0ICAgIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTtcXG4rXFx0ZXh0cmFfbGVuID0gbmFtZV9leHRyYSA/IHN0cmxlbihuYW1lX2V4dHJhKSA6IDA7XFxuK1xcdG5hbWVfbGVuID0gc3VmZml4X2xlbiArIGV4dHJhX2xlbjtcXG4rXFx0aWYgKG5hbWVfbGVuIFxcdTAwM2UgWEFUVFJfTkFNRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuIFxcdTAwM2UgWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cXG4rXFx0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiArIG5hbWVfbGVuICsgMSwgR0ZQX05PV0FJVCk7XFxuK1xcdGlmICgheGF0dHJfdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuLCBzdWZmaXgsIHN1ZmZpeF9sZW4pO1xcbitcXHRpZiAoZXh0cmFfbGVuKVxcbitcXHRcXHRtZW1jcHkoeGF0dHJfdmFsdWUgKyB2YWx1ZV9sZW4gKyBzdWZmaXhfbGVuLCBuYW1lX2V4dHJhLFxcbitcXHRcXHQgICAgICAgZXh0cmFfbGVuKTtcXG4rXFx0KChjaGFyICopeGF0dHJfdmFsdWUpW3ZhbHVlX2xlbiArIG5hbWVfbGVuXSA9ICdcXFxcMCc7XFxuK1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbitcXHRpZiAoIXhhdHRyKSB7XFxuK1xcdFxcdGtmcmVlKHhhdHRyX3ZhbHVlKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdH1cXG4rXFxuK1xcdHhhdHRyLVxcdTAwM2V2YWx1ZSA9IHhhdHRyX3ZhbHVlO1xcbitcXHR4YXR0ci1cXHUwMDNlbmFtZSA9IChjb25zdCBjaGFyICopeGF0dHJfdmFsdWUgKyB2YWx1ZV9sZW47XFxuK1xcdHhhdHRyLVxcdTAwM2V2YWx1ZV9sZW4gPSB2YWx1ZV9sZW47XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbigpIC0gSW5pdGlhbGl6ZSBhbiBhbm9ueW1vdXMgaW5vZGVcXG4gICogQGlub2RlOiB0aGUgaW5vZGVcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggOGQ2OTQ1ZWRhZTdhYS4uMjE1NDRjNzc1YzE3NiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4gXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XFxuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIShzYnNlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQkxBQkVMX01OVCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXHRpZiAoeGF0dHIpIHtcXG4gXFx0XFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjb250ZXh0LCBcXHUwMDI2Y2xlbik7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCBmZjExNTA2OGM1YzA2Li40NTAxMDc4NDMwY2EwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5AQCAtOTgxLDEwICs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxcbit4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4gXFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbGxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcXG4rXFx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcXG4gXFxuIFxcdGlmICgheGF0dHIpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMDAzLDE0ICsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcXG4gICogQGlub2RlOiB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZVxcbiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3RcXG4gICogQHFzdHI6IHVudXNlZFxcbi0gKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgdGhlIGF0dHJpYnV0ZXNcXG4tICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKVxcbisgKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgYXR0cmlidXRlcyBhbmQgdXBkYXRlIGNvdW50XFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBpdCBhbGwgd29ya3Mgb3V0LCAtRU5PTUVNIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5XFxuICAqL1xcbiBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gc21hY2tfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XFxuQEAgLTEwNTcsMjEgKzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRcXHR0cmFuc2ZsYWcgPSBTTUtfSU5PREVfVFJBTlNNVVRFO1xcbiBcXG4tXFx0XFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxcbi1cXHRcXHRcXHRcXHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXFxuLVxcdFxcdFxcdFxcdFRSQU5TX1RSVUUsXFxuLVxcdFxcdFxcdFxcdFRSQU5TX1RSVUVfU0laRVxcbi1cXHRcXHRcXHQpKVxcbitcXHRcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcXG4rXFx0XFx0XFx0XFx0XFx0IFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcXG4rXFx0XFx0XFx0XFx0XFx0IFRSQU5TX1RSVUUsXFxuK1xcdFxcdFxcdFxcdFxcdCBUUkFOU19UUlVFX1NJWkUpKVxcbiBcXHRcXHRcXHRcXHRyYyA9IC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJjID09IDApXFxuLVxcdFxcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcXG4tXFx0XFx0XFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcXG4tXFx0XFx0XFx0ICAgIGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duLFxcbi1cXHRcXHQgICAgIHN0cmxlbihpc3NwLVxcdTAwM2VzbWtfaW5vZGUtXFx1MDAzZXNta19rbm93bilcXG4tXFx0XFx0KSlcXG4rXFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsXFxuK1xcdFxcdFxcdFxcdCBYQVRUUl9TTUFDS19TVUZGSVgsXFxuK1xcdFxcdFxcdFxcdCBpc3NwLVxcdTAwM2VzbWtfaW5vZGUtXFx1MDAzZXNta19rbm93bixcXG4rXFx0XFx0XFx0XFx0IHN0cmxlbihpc3NwLVxcdTAwM2VzbWtfaW5vZGUtXFx1MDAzZXNta19rbm93bikpKVxcbiBcXHRcXHRcXHRyYyA9IC1FTk9NRU07XFxuIGluc3RhbnRfaW5vZGU6XFxuIFxcdGlzc3AtXFx1MDAzZXNta19mbGFncyB8PSAoU01LX0lOT0RFX0lOU1RBTlQgfCB0cmFuc2ZsYWcpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxcbmluZGV4IGFlNzFlOWI2OTA1MTguLjI2MzlmOWY5NDE5NTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcXG5AQCAtOTIsNCArOTIsOSBAQCBleHRlcm4gaW50IGJwZl9zZXRfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbiBcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbiBleHRlcm4gaW50IGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyKSBfX2tzeW0gX193ZWFrO1xcbiBcXG4rc3RydWN0IGxzbV94YXR0cnM7XFxuK2V4dGVybiBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXFxcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcXFwiO1xcbiBcXG5AQCAtMjY4LDYgKzI2OSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxcbiBcXHRyZW1vdmUodGVzdGZpbGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTEsIGVycjtcXG4rXFx0Y2hhciB2YWx1ZV9vdXRbNjRdO1xcbitcXG4rXFx0LyogVGhpcyB0ZXN0IG11c3QgYmUgcnVuIGZyb20gYSBmcyB0aGF0IGNhbGxzXFxuK1xcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKS5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX25ldyA9IFxcXCIvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcXFwiO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZV9maWxlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvYmFibHkgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXMgd2Ugd2lsbCBiZSBsYWJlbGluZyBhIGZpbGVcXG4rXFx0ICogaW4gL2Rldi9zaG0sIGJ1dCBqdXN0IGluIGNhc2Ugd2UgY2hlY2sgaWYgdGhlIGhvb2sgd2FzIGFjdHVhbGx5XFxuK1xcdCAqIGNhbGxlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vob29rX3Jhbikge1xcbitcXHRcXHRwcmludGYoXFxcIiVzOlNLSVA6aW5vZGVfaW5pdF9zZWN1cml0eSBob29rIHdhcyBub3QgaW52b2tlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbi4gKi9cXG4rXFx0aWYgKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0ID09IC1FT1BOT1RTVVBQKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTFNNIGluaXQgeGF0dHJzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgX19mdW5jX18pO1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFxcXCJpbml0X3Jlc3VsdFxcXCIpO1xcbitcXG4rXFx0LyogaW5pdHhhdHRycyBwcmVwZW5kcyBcXFwic2VjdXJpdHkuXFxcIiB0byB0aGUgbmFtZS4gKi9cXG4rXFx0ZXJyID0gZ2V0eGF0dHIodGVzdGZpbGVfbmV3LCBcXFwic2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcXFwiLCB2YWx1ZV9vdXQsXFxuK1xcdFxcdCAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVOT0RBVEEpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgX19mdW5jX18pO1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmICghQVNTRVJUX0dFKGVyciwgMCwgXFxcImdldHhhdHRyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNleGF0dHJfdmFsdWUpLCBcXFwieGF0dHJfc2l6ZVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsIFxcXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcXFwiLFxcbitcXHRcXHRcXHQgIHNpemVvZihcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIikpLCAwLFxcbitcXHRcXHQgIFxcXCJ4YXR0cl92YWx1ZVxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShmZCk7XFxuK1xcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcXG4rXFx0cmVtb3ZlKHRlc3RmaWxlX25ldyk7XFxuK31cXG4rXFxuKy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovXFxuKyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxcbitcXG4rLypcXG4rICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxcbisgKiB0aGUga2Z1bmMgb25seSBsZXRzIEJQRiBjbGFpbSBJTklUX0lOT0RFX1hBVFRSX01BWCB4YXR0ciBzbG90cyBwZXIgaW5vZGUuXFxuKyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xcbitcXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gXFxcIi9kZXYvc2htL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcXFwiO1xcbitcXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG5vdHJ1biA9IDAsIG90aGVyID0gMDtcXG4rXFx0aW50IGksIGZkID0gLTE7XFxuK1xcbitcXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXFxcIm9wZW5cXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRzbnByaW50Zihza2VsW2ldLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZXhhdHRyX25hbWUsXFxuK1xcdFxcdFxcdCBzaXplb2Yoc2tlbFtpXS1cXHUwMDNlcm9kYXRhLVxcdTAwM2V4YXR0cl9uYW1lKSwgXFxcImJwZi5sYWJlbF8lZFxcXCIsXFxuK1xcdFxcdFxcdCBpKTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXFxcImxvYWRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRza2VsW2ldLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFxuK1xcdFxcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVxcdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVfZmlsZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0ZXN0XFxuK1xcdCAqIHhhdHRyIGJ1ZGdldCBhY2NvdW50aW5nIHdpdGggLUVOT1NQQy5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xcbitcXHRcXHRpbnQgcmVzID0gc2tlbFtpXS1cXHUwMDNlZGF0YS1cXHUwMDNlaW5pdF9yZXN1bHQ7XFxuK1xcbitcXHRcXHRpZiAoIXNrZWxbaV0tXFx1MDAzZWJzcy1cXHUwMDNlaG9va19yYW4gfHwgcmVzID09IC1FT1BOT1RTVVBQKVxcbitcXHRcXHRcXHRub3RydW4rKztcXG4rXFx0XFx0ZWxzZSBpZiAocmVzID09IDApXFxuK1xcdFxcdFxcdG9rKys7XFxuK1xcdFxcdGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKVxcbitcXHRcXHRcXHRub3NwYysrO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG90aGVyKys7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChub3RydW4gPT0gSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpob29rIG5vdCBpbnZva2VkIG9yIGZzIGxhY2tzIExTTSBpbml0IHhhdHRyc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0VRKG9rLCBJTklUX0lOT0RFX1hBVFRSX01BWCwgXFxcInNsb3RzX3dpdGhpbl9idWRnZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKG5vc3BjLCAxLCBcXFwic2xvdF9vdmVyX2J1ZGdldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEob3RoZXIsIDAsIFxcXCJ1bmV4cGVjdGVkX3Jlc3VsdFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7XFxuK1xcdFxcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsW2ldKTtcXG4rXFx0fVxcbitcXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcXG4ge1xcbiBcXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cXG5AQCAtMjg4LDQgKzQzOCwxMCBAQCB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpXFxuIFxcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiZnN2ZXJpdHlcXFwiKSlcXG4gXFx0XFx0dGVzdF9mc3Zlcml0eSgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImluaXRfaW5vZGVfeGF0dHJcXFwiKSlcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0XFxcIikpXFxuK1xcdFxcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZTNkOGQzOWRlOWNhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuY1xcbkBAIC0wLDAgKzEsMzMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IENpc2NvIFN5c3RlbXMsIEluYy4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9rZnVuY3MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rX191MzIgbW9uaXRvcmVkX3BpZDtcXG4raW50IGhvb2tfcmFuO1xcbitpbnQgaW5pdF9yZXN1bHQgPSAtMTtcXG4rXFxuK2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSBcXFwiYnBmLnRlc3RfbGFiZWxcXFwiO1xcbitjaGFyIHhhdHRyX3ZhbHVlW10gPSBcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIjtcXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX2luaXRfc2VjdXJpdHlcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XFxuK1xcdF9fdTMyIHBpZDtcXG4rXFxuK1xcdHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aG9va19yYW4gPSAxO1xcbitcXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG4rXFx0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFxcdTAwMjZ2YWx1ZV9wdHIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MDEuMTQ4MjEzNDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MTMzNzUzNzkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9sc214YXR0cl9hZGRcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlcIixcbiAgICBcImV2bV9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBJdCBhbHNvIHJlZmFjdG9ycyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2AgYW5kIHVwZGF0ZXMgRVZNLCBTRUxpbnV4LCBhbmQgU01BQ0sgdG8gdXNlIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgc2VjdXJpdHkgYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk4MDEzMTcxOWMwNTEzZmYzYjczYjM5ODI1MWE3MTMwMDIwNDRiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDk6MjM6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTExLDcgKzExLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG5AQCAtMzc5LDYgKzM4MSw0NCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2RhdGFfaW5vZGUoc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gZF9yZWFsX2lub2RlKGZpbGVfZGVudHJ5KGZpbGUpKTtcbiB9XG4gXG4rLyoqXG4rICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG4rICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcImJwZi5maWxlX2xhYmVsXCIpXG4rICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZVxuKyAqXG4rICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdFxuKyAqICAgICAgICAgeGF0dHJzIGF0IGlub2RlIGNyZWF0aW9uLCBuZWdhdGl2ZSBlcnJvciBvbiBvdGhlciBmYWlsdXJlcy5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbitcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICp2YWx1ZV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXZhbHVlX3A7XG4rXHRjb25zdCB2b2lkICp2YWx1ZTtcbitcdHUzMiB2YWx1ZV9sZW47XG4rXG4rXHRpZiAoIW5hbWVfX3N0cilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLFxuK1x0XHQgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0aWYgKCF4YXR0cnMtXHUwMDNleGF0dHJzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHR2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpO1xuK1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiBzZWN1cml0eV9sc214YXR0cl9hZGQoeGF0dHJzLCBMU01fSURfQlBGLFxuK1x0XHRcdFx0ICAgICBuYW1lX19zdHIgKyBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSxcbitcdFx0XHRcdCAgICAgdmFsdWUsIHZhbHVlX2xlbik7XG4rfVxuK1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zOTAsNiArNDMwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9kYXRhX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2luaXRfaW5vZGVfeGF0dHIpXG4gQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG4gXG4gc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaCBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5pbmRleCBkZGEyNzJkNzhmMDEzLi40YmYzNTBlZjAyZjQ4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiBcbisvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cbisjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxuK1xuICNpZmRlZiBDT05GSUdfQlBGX0xTTVxuIFxuIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5pbmRleCA5MTNmNDU3M2IyMDM4Li41MjhmMzYwZjMzMDhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9ldm0uaFxuQEAgLTEyLDYgKzEyLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlZ3JpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhdHRyLmhcdTAwM2VcbiBcbitzdHJ1Y3QgbHNtX3hhdHRycztcbitcbiAjaWZkZWYgQ09ORklHX0VWTVxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtMjEsOCArMjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXHRcdCBjb25zdCBjaGFyICp4YXR0cl92YWx1ZSwgc2l6ZV90IHhhdHRyX3ZhbHVlX2xlbik7XG4gaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0ICAgIGludCAqeGF0dHJfY291bnQpO1xuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxuQEAgLTYzLDggKzY1LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcbiBcbiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0XHQgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjViMmRlNzg2NWNlODEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMTYsOCArMTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4rXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuK1x0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuaW5kZXggYjRmOGNhZDUzZGRiMC4uN2FmZTA2YThkNGM2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbkBAIC0yMDAsMjAgKzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiAvKipcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcbi0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnNcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXG4rICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiAgKlxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXG4rICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAY3R4LVx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cbisgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVx1MDAzZXhhdHRyX2NvdW50LlxuICAqXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAY3R4LVx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICAgICAgIGludCAqeGF0dHJfY291bnQpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxuIHtcbi1cdGlmICh1bmxpa2VseSgheGF0dHJzKSlcbitcdGlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtXHUwMDNleGF0dHJzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xuK1x0cmV0dXJuIFx1MDAyNmN0eC1cdTAwM2V4YXR0cnNbY3R4LVx1MDAzZXhhdHRyX2NvdW50KytdO1xuIH1cbiBcbiAjZW5kaWYgLyogISBfX0xJTlVYX0xTTV9IT09LU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5kMzVmZGU3YWExMWYwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC02OCw2ICs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcbiBzdHJ1Y3QgbHNtX2N0eDtcbiBcbitzdHJ1Y3QgbHNtX3hhdHRycyB7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbitcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcbit9O1xuK1xuIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqL1xuICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MFxuIC8qIElmIGNhcGFibGUgc2hvdWxkIGF1ZGl0IHRoZSBzZWN1cml0eSByZXF1ZXN0ICovXG5AQCAtNDAxLDYgKzQwNiw5IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiBcdFx0XHRcdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpO1xuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcbitcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWVfZXh0cmEsIGNvbnN0IHZvaWQgKnZhbHVlLFxuK1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbik7XG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuQEAgLTg5NSw2ICs5MDMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lX2V4dHJhLFxuK1x0XHRcdFx0XHRjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDdiOThmNWQxZTJiZTguLjhmOGMzZGUzMDM1ZjAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9icGYvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbkBAIC0zMyw2ICszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4rXHQubGJzX3hhdHRyX2NvdW50ID0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyxcbiB9O1xuIFxuIERFRklORV9MU00oYnBmKSA9IHtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbmluZGV4IGI1OWUzZjEyMWI4YTguLmI3MTU4ZmM2MzU0M2UgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgKzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogZXZtX2lub2RlX2luaXRfc2VjdXJpdHkgLSBpbml0aWFsaXplcyBzZWN1cml0eS5ldm0gSE1BQyB2YWx1ZVxuICAqL1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbiBcdGJvb2wgZXZtX3Byb3RlY3RlZF94YXR0cnMgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbitcdHhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLVx1MDAzZXhhdHRycyA6IE5VTEw7XG4gXHRpZiAoIShldm1faW5pdGlhbGl6ZWQgXHUwMDI2IEVWTV9JTklUX0hNQUMpIHx8ICF4YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwODcsNyArMTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuK1x0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KGxzbV94YXR0cnMpO1xuIFx0LypcbiBcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXG4gXHQgKiB4YXR0ciBzbG90LlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCA3MWFlYThmZGYwMTQyLi5hZTcyMTAyY2QyOWI4IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFwiTFNNOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RjYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzMzLDggKzEzMzQsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpXG4ge1xuIFx0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4tXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xuLVx0aW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7XG4rXHRzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTtcbitcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEzNDQsMTUgKzEzNDUsMTUgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gXHRpZiAoaW5pdHhhdHRycykge1xuIFx0XHQvKiBBbGxvY2F0ZSArMSBhcyB0ZXJtaW5hdG9yLiAqL1xuLVx0XHRuZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXG4tXHRcdFx0XHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcbi1cdFx0aWYgKCFuZXdfeGF0dHJzKVxuK1x0XHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXG4rXHRcdFx0XHRcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcbitcdFx0aWYgKCF4YXR0cnMueGF0dHJzKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcbi1cdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsIG5ld194YXR0cnMsXG4tXHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cl9jb3VudCk7XG4rXHRcdHJldCA9IHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cnMpO1xuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdC8qXG5AQCAtMTM2NCwxOCArMTM2NSwxMTMgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHR9XG4gXG4gXHQvKiBJZiBpbml0eGF0dHJzKCkgaXMgTlVMTCwgeGF0dHJfY291bnQgaXMgemVybywgc2tpcCB0aGUgY2FsbC4gKi9cbi1cdGlmICgheGF0dHJfY291bnQpXG4rXHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcbitcdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpO1xuIG91dDpcbi1cdGZvciAoOyB4YXR0cl9jb3VudCBcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcbi1cdFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcbi1cdGtmcmVlKG5ld194YXR0cnMpO1xuK1x0Zm9yICg7IHhhdHRycy54YXR0cl9jb3VudCBcdTAwM2UgMDsgeGF0dHJzLnhhdHRyX2NvdW50LS0pXG4rXHRcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuK1x0a2ZyZWUoeGF0dHJzLnhhdHRycyk7XG4gXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpO1xuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciAqcHJlZml4KVxuK3tcbitcdHNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7XG4rXHR1bnNpZ25lZCBpbnQgaSwgbiA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4YXR0cnMtXHUwMDNleGF0dHJfY291bnQ7IGkrKykge1xuK1x0XHRjb25zdCBjaGFyICpuYW1lID0geGF0dHJzLVx1MDAzZXhhdHRyc1tpXS5uYW1lO1xuK1xuK1x0XHRpZiAobmFtZSBcdTAwMjZcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcbitcdFx0XHRuKys7XG4rXHR9XG4rXHRyZXR1cm4gbjtcbit9XG4rXG4rLyoqXG4rICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcbisgKiBAeGF0dHJzOiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rc1xuKyAqIEBsc21faWQ6IExTTV9JRF8qIHZhbHVlIGlkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIExTTVxuKyAqIEBuYW1lX2V4dHJhOiB4YXR0ciBuYW1lIGNvbXBvbmVudHMgYmV5b25kIHRoZSBjYWxsaW5nIExTTSdzIHN0YW5kYXJkXG4rICogICAgICAgICAgICAgIHhhdHRyIHN1ZmZpeCwgTlVMTCBpZiB0aGUgc3RhbmRhcmQgc3VmZml4IGlzIHRoZSBmdWxsIG5hbWVcbisgKiBAdmFsdWU6IHhhdHRyIHZhbHVlXG4rICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZVxuKyAqXG4rICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbisgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEB2YWx1ZS4gVGhlIHhhdHRyIG5hbWUgaXMgYnVpbHQgZnJvbVxuKyAqIHRoZSBzdGFuZGFyZCB4YXR0ciBzdWZmaXggb2YgdGhlIGNhbGxpbmcgTFNNLCBmb2xsb3dlZCBieSBAbmFtZV9leHRyYS5cbisgKiBDYWxsZXJzIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC5cbisgKlxuKyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgaWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRyc1xuKyAqICAgICAgICAgYXQgaW5vZGUgY3JlYXRpb24sIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJ3Mgc2xvdCBidWRnZXQgaXNcbisgKiAgICAgICAgIGV4aGF1c3RlZCwgbmVnYXRpdmUgdmFsdWVzIG9uIG90aGVyIGVycm9ycy5cbisgKi9cbitpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4rXHRcdFx0ICBjb25zdCBjaGFyICpuYW1lX2V4dHJhLCBjb25zdCB2b2lkICp2YWx1ZSxcbitcdFx0XHQgIHNpemVfdCB2YWx1ZV9sZW4pXG4re1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cjtcbitcdHZvaWQgKnhhdHRyX3ZhbHVlO1xuK1x0Y29uc3QgY2hhciAqc3VmZml4O1xuK1x0c2l6ZV90IHN1ZmZpeF9sZW4sIGV4dHJhX2xlbiwgbmFtZV9sZW47XG4rXG4rXHRpZiAoIXhhdHRycyB8fCAhdmFsdWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogVGhlIGZpbGVzeXN0ZW0gZGlkIG5vdCBwcm92aWRlIGFuIGluaXR4YXR0cnMgY2FsbGJhY2suICovXG4rXHRpZiAoIXhhdHRycy1cdTAwM2V4YXR0cnMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3dpdGNoIChsc21faWQpIHtcbitcdGNhc2UgTFNNX0lEX0JQRjpcbitcdFx0aWYgKCFuYW1lX2V4dHJhIHx8ICFuYW1lX2V4dHJhWzBdKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRzdWZmaXggPSBYQVRUUl9CUEZfTFNNX1NVRkZJWDtcbitcdFx0aWYgKGxzbV94YXR0cnNfdXNlZCh4YXR0cnMsIFhBVFRSX0JQRl9MU01fU1VGRklYKSBcdTAwM2U9XG4rXHRcdCAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxuK1x0XHRcdHJldHVybiAtRU5PU1BDO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpO1xuK1x0ZXh0cmFfbGVuID0gbmFtZV9leHRyYSA/IHN0cmxlbihuYW1lX2V4dHJhKSA6IDA7XG4rXHRuYW1lX2xlbiA9IHN1ZmZpeF9sZW4gKyBleHRyYV9sZW47XG4rXHRpZiAobmFtZV9sZW4gXHUwMDNlIFhBVFRSX05BTUVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gXHUwMDNlIFhBVFRSX1NJWkVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgKyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovXG4rXHR4YXR0cl92YWx1ZSA9IGttYWxsb2ModmFsdWVfbGVuICsgbmFtZV9sZW4gKyAxLCBHRlBfTk9XQUlUKTtcbitcdGlmICgheGF0dHJfdmFsdWUpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcbitcdG1lbWNweSh4YXR0cl92YWx1ZSArIHZhbHVlX2xlbiwgc3VmZml4LCBzdWZmaXhfbGVuKTtcbitcdGlmIChleHRyYV9sZW4pXG4rXHRcdG1lbWNweSh4YXR0cl92YWx1ZSArIHZhbHVlX2xlbiArIHN1ZmZpeF9sZW4sIG5hbWVfZXh0cmEsXG4rXHRcdCAgICAgICBleHRyYV9sZW4pO1xuK1x0KChjaGFyICopeGF0dHJfdmFsdWUpW3ZhbHVlX2xlbiArIG5hbWVfbGVuXSA9ICdcXDAnO1xuK1xuK1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbitcdGlmICgheGF0dHIpIHtcbitcdFx0a2ZyZWUoeGF0dHJfdmFsdWUpO1xuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcdH1cbitcbitcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4rXHR4YXR0ci1cdTAwM2VuYW1lID0gKGNvbnN0IGNoYXIgKil4YXR0cl92YWx1ZSArIHZhbHVlX2xlbjtcbitcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlXG4gICogQGlub2RlOiB0aGUgaW5vZGVcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDhkNjk0NWVkYWU3YWEuLjIxNTQ0Yzc3NWMxNzYgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTI5NjIsNyArMjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXG4gXG4gc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgY3JlZF9zZWN1cml0eV9zdHJ1Y3QgKmNyc2VjID0gc2VsaW51eF9jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XG5AQCAtMjk5Miw3ICsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIShzYnNlYy1cdTAwM2VmbGFncyBcdTAwMjYgU0JMQUJFTF9NTlQpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXHRpZiAoeGF0dHIpIHtcbiBcdFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2Y29udGV4dCwgXHUwMDI2Y2xlbik7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggZmYxMTUwNjhjNWMwNi4uNDUwMTA3ODQzMGNhMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTk4MSwxMCArOTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuIFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbGxlbilcbiB7XG4tXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXG4gXHRpZiAoIXhhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDAzLDE0ICsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbisgKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgYXR0cmlidXRlcyBhbmQgdXBkYXRlIGNvdW50XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSdzIG5vIG1lbW9yeVxuICAqL1xuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHR0cmFuc2ZsYWcgPSBTTUtfSU5PREVfVFJBTlNNVVRFO1xuIFxuLVx0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHRcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbi1cdFx0XHRcdFRSQU5TX1RSVUUsXG4tXHRcdFx0XHRUUkFOU19UUlVFX1NJWkVcbi1cdFx0XHQpKVxuK1x0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuK1x0XHRcdFx0XHQgVFJBTlNfVFJVRSxcbitcdFx0XHRcdFx0IFRSQU5TX1RSVUVfU0laRSkpXG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChyYyA9PSAwKVxuLVx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcbi1cdFx0XHQgICAgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuLVx0XHQgICAgIHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pXG4tXHRcdCkpXG4rXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcbitcdFx0XHRcdCBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4rXHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxOC4uMjYzOWY5Zjk0MTk1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xuIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7XG4gXG4rc3RydWN0IGxzbV94YXR0cnM7XG4rZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRlc3RfZnN2ZXJpdHkuc2tlbC5oXCJcbisjaW5jbHVkZSBcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcIlxuIFxuIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSBcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcIjtcbiBcbkBAIC0yNjgsNiArMjY5LDE1NSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZzdmVyaXR5KHZvaWQpXG4gXHRyZW1vdmUodGVzdGZpbGUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcbitcdGludCBmZCA9IC0xLCBlcnI7XG4rXHRjaGFyIHZhbHVlX291dFs2NF07XG4rXG4rXHQvKiBUaGlzIHRlc3QgbXVzdCBiZSBydW4gZnJvbSBhIGZzIHRoYXQgY2FsbHNcbitcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKS5cbitcdCAqL1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfbmV3ID0gXCIvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcIjtcbitcbitcdHNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1x0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXG4rXHRmZCA9IG9wZW4odGVzdGZpbGVfbmV3LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBQcm9iYWJseSBzaG91bGQgbm90IGJlIG5lZWRlZCBhcyB3ZSB3aWxsIGJlIGxhYmVsaW5nIGEgZmlsZVxuK1x0ICogaW4gL2Rldi9zaG0sIGJ1dCBqdXN0IGluIGNhc2Ugd2UgY2hlY2sgaWYgdGhlIGhvb2sgd2FzIGFjdHVhbGx5XG4rXHQgKiBjYWxsZWQuXG4rXHQgKi9cbitcdGlmICghc2tlbC1cdTAwM2Vic3MtXHUwMDNlaG9va19yYW4pIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDppbm9kZV9pbml0X3NlY3VyaXR5IGhvb2sgd2FzIG5vdCBpbnZva2VkXFxuXCIsXG4rXHRcdCAgICAgICBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBUaGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBhY2NlcHQgeGF0dHJzIGF0IGlub2RlIGNyZWF0aW9uLiAqL1xuK1x0aWYgKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdCA9PSAtRU9QTk9UU1VQUCkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOmZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBMU00gaW5pdCB4YXR0cnNcXG5cIixcbitcdFx0ICAgICAgIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFwiaW5pdF9yZXN1bHRcIik7XG4rXG4rXHQvKiBpbml0eGF0dHJzIHByZXBlbmRzIFwic2VjdXJpdHkuXCIgdG8gdGhlIG5hbWUuICovXG4rXHRlcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsIFwic2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcIiwgdmFsdWVfb3V0LFxuK1x0XHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PREFUQSkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxuXCIsXG4rXHRcdCAgICAgICBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFwiZ2V0eGF0dHJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXhhdHRyX3ZhbHVlKSwgXCJ4YXR0cl9zaXplXCIpO1xuK1x0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiLFxuK1x0XHRcdCAgc2l6ZW9mKFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCIpKSwgMCxcbitcdFx0ICBcInhhdHRyX3ZhbHVlXCIpO1xuK1xuK291dDpcbitcdGNsb3NlKGZkKTtcbitcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcbitcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xuK31cbitcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xuKyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxuK1xuKy8qXG4rICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxuKyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS5cbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbFtJTklUX0lOT0RFX1hBVFRSX01BWCArIDFdID0ge307XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFwiL2Rldi9zaG0vdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdFwiO1xuK1x0aW50IG9rID0gMCwgbm9zcGMgPSAwLCBub3RydW4gPSAwLCBvdGhlciA9IDA7XG4rXHRpbnQgaSwgZmQgPSAtMTtcbitcbitcdC8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xuK1x0XHRza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuKCk7XG4rXHRcdGlmICghQVNTRVJUX09LX1BUUihza2VsW2ldLCBcIm9wZW5cIikpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHNucHJpbnRmKHNrZWxbaV0tXHUwMDNlcm9kYXRhLVx1MDAzZXhhdHRyX25hbWUsXG4rXHRcdFx0IHNpemVvZihza2VsW2ldLVx1MDAzZXJvZGF0YS1cdTAwM2V4YXR0cl9uYW1lKSwgXCJicGYubGFiZWxfJWRcIixcbitcdFx0XHQgaSk7XG4rXG4rXHRcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXCJsb2FkXCIpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRza2VsW2ldLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXG4rXHRcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVx1MDAzZXByb2dzLnRlc3RfaW5pdF9pbm9kZV94YXR0cik7XG4rXHRcdGlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCBcImF0dGFjaFwiKSlcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIFRyaWdnZXIgaW5vZGVfaW5pdF9zZWN1cml0eSBvbmNlIHdpdGggYWxsIHByb2dyYW1zIGF0dGFjaGVkLiAqL1xuK1x0ZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiY3JlYXRlX2ZpbGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LypcbitcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0ZXN0XG4rXHQgKiB4YXR0ciBidWRnZXQgYWNjb3VudGluZyB3aXRoIC1FTk9TUEMuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGludCByZXMgPSBza2VsW2ldLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQ7XG4rXG4rXHRcdGlmICghc2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlaG9va19yYW4gfHwgcmVzID09IC1FT1BOT1RTVVBQKVxuK1x0XHRcdG5vdHJ1bisrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gMClcbitcdFx0XHRvaysrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcbitcdFx0XHRub3NwYysrO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3RoZXIrKztcbitcdH1cbitcbitcdGlmIChub3RydW4gPT0gSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxKSB7XG4rXHRcdHByaW50ZihcIiVzOlNLSVA6aG9vayBub3QgaW52b2tlZCBvciBmcyBsYWNrcyBMU00gaW5pdCB4YXR0cnNcXG5cIixcbitcdFx0ICAgICAgIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwic2xvdHNfd2l0aGluX2J1ZGdldFwiKTtcbitcdEFTU0VSVF9FUShub3NwYywgMSwgXCJzbG90X292ZXJfYnVkZ2V0XCIpO1xuK1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcInVuZXhwZWN0ZWRfcmVzdWx0XCIpO1xuK1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuK1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4rXHR9XG4rXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCArNDM4LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnN2ZXJpdHlcIikpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdF9pbm9kZV94YXR0clwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImluaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2UzZDhkMzlkZTljYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5AQCAtMCwwICsxLDMzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2tmdW5jcy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rX191MzIgbW9uaXRvcmVkX3BpZDtcbitpbnQgaG9va19yYW47XG4raW50IGluaXRfcmVzdWx0ID0gLTE7XG4rXG4rY29uc3QgY2hhciB4YXR0cl9uYW1lWzE2XSA9IFwiYnBmLnRlc3RfbGFiZWxcIjtcbitjaGFyIHhhdHRyX3ZhbHVlW10gPSBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiO1xuK1xuK1NFQyhcImxzbS9pbm9kZV9pbml0X3NlY3VyaXR5XCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5pdF9pbm9kZV94YXR0ciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHZhbHVlX3B0cjtcbitcdF9fdTMyIHBpZDtcbitcbitcdHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRob29rX3JhbiA9IDE7XG4rXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcdTAwMjZ2YWx1ZV9wdHIpO1xuK1x0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDowMS4xNDgyMTU1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNzU0MDAwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgTmV3IEJQRiBYYXR0ciBLZnVuYyBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYWxsb3cgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBxdWl0ZSBwb3dlcmZ1bC4gVGhlIHBhdGNoIGlzIGZhaXJseSBicm9hZCwgdXBkYXRpbmcgc2V2ZXJhbCBzZWN1cml0eSBzdWJzeXN0ZW1zIHRvIGFjY29tbW9kYXRlIHRoaXMgY2hhbmdlLiBUaGV5J3ZlIG9wdGVkIGZvciBhIGBzdHJ1Y3QgbHNtX3hhdHRyc2AgdG8gbWFuYWdlIHRoZXNlIGF0dHJpYnV0ZXMgaW5zdGVhZCBvZiB0aGUgcmF3IGFycmF5IHByZXZpb3VzbHkgdXNlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIG1haW50YWluYWJpbGl0eS4gSXQgc2VlbXMgdGhleSd2ZSB1cGRhdGVkIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3IHN0cnVjdHVyZSBhbmQgYSBuZXcgZnVuY3Rpb24sIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhpcyBuZXcga2Z1bmMuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgY29yZSBvZiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGlzIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBqdXN0IGRlbGVnYXRlcyB0byBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYC4gSSdsbCB3YW50IHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbm93IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBzZWN1cml0eS9zZWN1cml0eS5jYCB0byBjb250YWluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoZSBvdGhlciBzdWJzeXN0ZW1zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgYWxzbyB1cGRhdGVzIGBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNgLCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgdG8gdXNlIHRoZSBgc3RydWN0IGxzbV94YXR0cnNgLlxuXG5UaGlzIGNlcnRhaW5seSBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaCwgYW5kIHJpcGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgdGhvc2Uga2V5IGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSB0aGUgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLiBXZSBzaG91bGQgemVybyBpbiBvbjpcbiogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgXG4qICAgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGBcbiogICBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWBcblxuQmVmb3JlIHdlIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGZzL2JwZl9mc19rZnVuY3MuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTMzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MDcuNDIzNjE4MzE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTE4MzIzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZzX2tmdW5jcy5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEyOT1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVxcdFxcdCs9IHpvbmVmcy9cXG5mcy9NYWtlZmlsZToxMzA6b2JqLSQoQ09ORklHX0JQRl9MU00pXFx0XFx0Kz0gYnBmX2ZzX2tmdW5jcy5vXFxuZnMvTWFrZWZpbGUtMTMxLW9iai0kKENPTkZJR19SRVNDVFJMX0ZTKVxcdCs9IHJlc2N0cmwvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjA5LjkzNTQ1NTY0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzEzOTgzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIExTTSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIEJQRiBMU00gaXNzdWUsIGFuZCBpdCBzZWVtcyBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIE1ha2VzIHNlbnNlLiBCZWZvcmUgSSBkaXZlIGRlZXBlciwgbGV0J3MganVzdCBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBjb3JyZWN0IGNvbmZpZyBvcHRpb24gdG8gYmUgZm9jdXNpbmcgb24uIEknbGwgcXVpY2tseSBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBtYWtlIHN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgcmVkIGhlcnJpbmcuIFRpbWUgdG8gY3JhY2sgb3BlbiBgc2VjdXJpdHkvYnBmL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhlIGBDT05GSUdfQlBGX0xTTWAgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJdCdzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzIHdoZW4gZGVhbGluZyB3aXRoIHNlY3VyaXR5IGZlYXR1cmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbSBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MTMuNjA2ODU2MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNjE1MjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0xTTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctOTEtXFxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXFxua2VybmVsL2JwZi9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MTUuOTMzMDE4Njg0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NDc5MzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHNwZWNpZmljIEJQRiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBMZXQncyBzZWUuLi5JJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uIG1pZ2h0IHJlc2lkZSB3aXRoaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEl0J3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBCUEYgc3Vic3lzdGVtIGFyZSBsYWlkIG91dC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZWx5IGFyb3VuZCBsaW5lIDkyLCBwZXJ0YWluaW5nIHRvIHRoZSBhcmVhIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBrbm93IGFib3V0LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwgdG8gZmluZCBvdXQgYWxsIG9mIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjE4LjkxNzgxNTE3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHQgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzIG9uIHVubWl0aWdhdGVkXFxuICA4NjpcXHRcXHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuXFxuICA4OTpcXHRcXG4gIDkwOlxcdHNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDoxOC45MTc5MDU0MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIyMDM5NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIExTTSBQYXRjaCBEZXBlbmRlbmNpZXMgYW5kIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgQlBGX0xTTWAgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzOyBpdCBsb29rcyBsaWtlIGBCUEZfTFNNYCByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGlzdGluZyBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGggQlBGLiBJJ20gZ29pbmcgdG8gY2hlY2sgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQuIFJpZ2h0LCBpdCBpcyBjb21waWxlZCBpZiBgQ09ORklHX1NFQ1VSSVRZYCBpcyBlbmFibGVkLCB3aGljaCBpcyBleHBlY3RlZC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoZSBwYXRjaCB0b3VjaGVzIGBFVk1gLCBgU0VMSU5VWGAsIGFuZCBgU01BQ0tgIGNvbmZpZ3VyYXRpb25zLCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBzdGVtIGZyb20gdGhlIG5ldyBCUEYga2Z1bmMuIElmIEkgZW5hYmxlIGBCUEZfTFNNYCwgSSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvbiB0ZXN0aW5nIHRoYXQga2Z1bmMncyBpbnRlZ3JhdGlvbi4gVGhlIG1vZGlmaWNhdGlvbiB0byB0aG9zZSBzZWN1cml0eSBtb2R1bGVzIGFwcGVhcnMgdG8gYmUgYWJvdXQgaG9va2luZyBpbnRvIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gZ2V0IGNvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb24gdGhlIGNoYW5nZXMgdGhlcmUuIFNvLCB0byBlbnN1cmUgSSBjYW4gY29tcHJlaGVuc2l2ZWx5IHRlc3QgdGhvc2UgY2hhbmdlcywgZW5hYmxpbmcgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEVWTWAgaXMgYSBnb29kIGlkZWEuIFRoYXQgd2lsbCBlbnN1cmUgdGhlIG1vZGlmaWVkIGhvb2tzIGFyZSB0ZXN0ZWQuXG5cbk5leHQsIEkgbmVlZCB0byBzZWUgaG93IHRoZSB4YXR0ciBmdW5jdGlvbnMgY29tZSBpbnRvIHBsYXkuIEknbGwgbG9vayBhdCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIE9rYXksIGl0J3MgZGVmaW5lZCBhbmQgZG9lc24ndCBhcHBlYXIgdG8gYmUgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHNvIGl0J3MgZGlyZWN0bHkgaW5jbHVkZWQgd2hlbiBgQ09ORklHX1NFQ1VSSVRZYCBpcyBzZXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgQlBGIHNpZGUuIEknbGwgZXhhbWluZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiBBaCwgdGhlcmUgaXQgaXMsIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfTFNNYCwgYXMgZXhwZWN0ZWQuIFNvLCBpdCBjYWxscyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYC5cblxuVG8gc3VtbWFyaXplIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkOlxuXG4qICAgYEJQRl9MU01gXG4qICAgYFNFQ1VSSVRZYFxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX0pJVGBcblxuQW5kIEknbGwgbWFrZSBhIG5vdGUgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWdzIHRoYXQgSSdtIG1pc3NpbmcuXG5cblRoZSBjcml0aWNhbCBwaWVjZXMgb2YgdGhpcyBhcmU6XG5cbiogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgXG4qICAgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGBcbiogICBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWBcblxuRmluYWxseSwgYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhvc2UgYGV2bWAsIGBzZWxpbnV4YCwgYW5kIGBzbWFja2AgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaWduYXR1cmUgb2YgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rIGFuZCB1c2VzIGBsc21fZ2V0X3hhdHRyX3Nsb3RgLiBPaCwgYW5kIGBsc21fZ2V0X3hhdHRyX3Nsb3RgIGlzIGFuIGlubGluZSBmdW5jdGlvbiBpbiBgaW5jbHVkZS9saW51eC9sc21faG9va3MuaGAuIEknbGwgd2FudCB0byBlbmFibGUgdGhvc2UgY29uZmlncyB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZSB1cGRhdGVzIGFyZSBjb3JyZWN0LCBzbzpcblxuKiAgIGBTRUNVUklUWV9TRUxJTlVYYFxuKiAgIGBTRUNVUklUWV9TTUFDS2BcbiogICBgRVZNYFxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBjb21wcmVoZW5zaXZlIHRlc3QgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjYwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MjcuNzM5OTQ5NjE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU2MTMxNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9TRUxJTlVYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiU0VMaW51eCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTExLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU0VMaW51eCBib290IHBhcmFtZXRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNy1cXHRib29sIFxcXCJTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMzktXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQwOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cXHRib29sIFxcXCJTRUxpbnV4IEFWQyBTdGF0aXN0aWNzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQ4LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTUwLVxcdGludCBcXFwiU0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYxOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02Mi1cXHRpbnQgXFxcIlNFTGludXggU0lEIHRvIGNvbnRleHQgc3RyaW5nIHRyYW5zbGF0aW9uIGNhY2hlIHNpemVcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjcyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0FWQ19IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXFx0aW50IFxcXCJTRUxpbnV4IGF2YyBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04Mi1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODQtXFx0Ym9vbCBcXFwiU0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjI5Ljk5NjA4ODA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQwMDc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRVZNIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYEVWTWAuIFRoaXMgaXMgdGhlIGp1bXBpbmctb2ZmIHBvaW50OyBiZWZvcmUgSSBjb25zaWRlciBhbnkgZGVlcGVyIGRpYWdub3N0aWNzIG9yIHBvdGVudGlhbCBpc3N1ZXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgYXMgSSB3b3VsZCBleHBlY3QuIFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycz8gQXJlIHRoZSBnYXMgbGltaXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgYW50aWNpcGF0ZWQgdHJhbnNhY3Rpb24gbG9hZD8gSXMgdGhlIGJsb2NrIHRpbWUgY29uZmlndXJlZCBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgdGhlIGNvbnNlbnN1cyBtZWNoYW5pc20gc2V0dGluZ3M/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBvciBvdmVycmlkZXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyBwZXJmb3JtYW5jZSBvciBiZWhhdmlvcj8gSSB3YW50IHRvIGtub3cgZXZlcnl0aGluZy4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcgaXMgYSBwcm9kdWN0IG9mIHNvbWUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjMzLjg3MDA5OTI5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDM3NjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzoyOmNvbmZpZyBFVk1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMy1cXHRib29sIFxcXCJFVk0gc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xNi1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6MTc6Y29uZmlnIEVWTV9BVFRSX0ZTVVVJRFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJGU1VVSUQgKHZlcnNpb24gMilcXFwiXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMzAtXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjMxOmNvbmZpZyBFVk1fRVhUUkFfU01BQ0tfWEFUVFJTXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkFkZGl0aW9uYWwgU01BQ0sgeGF0dHJzXFxcIlxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ3LVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo0ODpjb25maWcgRVZNX0FERF9YQVRUUlNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNDktXFx0Ym9vbCBcXFwiQWRkIGFkZGl0aW9uYWwgRVZNIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXQgcnVudGltZVxcXCJcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy01OC1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6NTk6Y29uZmlnIEVWTV9MT0FEX1g1MDlcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiTG9hZCBhbiBYNTA5IGNlcnRpZmljYXRlIG9udG8gdGhlICcuZXZtJyB0cnVzdGVkIGtleXJpbmdcXFwiXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNzAtXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjcxOmNvbmZpZyBFVk1fWDUwOV9QQVRIXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTcyLVxcdHN0cmluZyBcXFwiRVZNIFg1MDkgY2VydGlmaWNhdGUgcGF0aFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MzUuOTQ0NDgxMjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNDc3NDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQSBRdWljayBTY2FuIGZvciB0aGUgT2J2aW91cyoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIGludG8gbXkgbWluZCBpcyBhIHF1aWNrIHNhbml0eSBjaGVjay4gV2hlbiBkZWFsaW5nIHdpdGggc2VjdXJpdHksIHlvdSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgY3VscHJpdHMsIHRoZSBsb3ctaGFuZ2luZyBmcnVpdC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgU0VDVVJJVFlfU01BQ0tgLiBJJ20gZ29pbmcgdG8gcnVuIGl0IGJ5IG15IG1lbnRhbCBjaGVja2xpc3QuIElzIGl0IGEgdmFyaWFibGUsIGEgZnVuY3Rpb24sIGEgbW9kdWxlLCBhIGxpYnJhcnk/IElzIGl0IHNvbWV0aGluZyBpbnRlcm5hbCBvciBleHRlcm5hbD8gSXMgdGhpcyBzb21ldGhpbmcgSSd2ZSB3b3JrZWQgd2l0aCBiZWZvcmU/IElzIHRoZXJlIGEga25vd24gdnVsbmVyYWJpbGl0eSwgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBhIGNvbW1vbiBtaXNpbnRlcnByZXRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lPyBUaGlzIGlzIGJhc2ljIHRyaWFnZSwgYnV0IGl0J3MgZXNzZW50aWFsIHRvIHByZXZlbnQgZ2V0dGluZyBzaWRlLXRyYWNrZWQgYnkgc29tZXRoaW5nIHRyaXZpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDM2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MzguOTY5MjU5NjM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM4MTQ1OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9TTUFDS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zbWFjay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMy1cXHRib29sIFxcXCJTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBLZXJuZWwgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTUtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoxNjpjb25maWcgU0VDVVJJVFlfU01BQ0tfQlJJTkdVUFxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTctXFx0Ym9vbCBcXFwiUmVwb3J0aW5nIG9uIGFjY2VzcyBncmFudGVkIGJ5IFNtYWNrIHJ1bGVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zMy1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjM0OmNvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVJcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIlBhY2tldCBtYXJraW5nIHVzaW5nIHNlY21hcmtzIGZvciBuZXRmaWx0ZXJcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ0LVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6NDU6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0FQUEVORF9TSUdOQUxTXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00Ni1cXHRib29sIFxcXCJUcmVhdCBkZWxpdmVyaW5nIHNpZ25hbHMgYXMgYW4gYXBwZW5kIG9wZXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6NDEuNDA3NDEwNTY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTU4MTI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbCBmdW5jdGlvbiwgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFsbG93IEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgcGhhc2UuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGhpZ2hsaWdodCB0aGF0IHRoaXMgbmVlZHMgdGhvcm91Z2ggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgZm9yIGludmVzdGlnYXRpb24gd2lsbCBiZTogYGJwZl9pbml0X2lub2RlX3hhdHRyYCAob2YgY291cnNlISksIGFsb25nc2lkZSB0aGUgb3RoZXIgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkOiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YC4gSSdsbCBhbHNvIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEJQRl9MU01gLCBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgRVZNYC5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgZXhpc3Rpbmcgc2VjdXJpdHkgbW9kdWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gY3VyaW91cyBhYm91dCBob3cgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YCBiZWhhdmVzLCBzbyBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIExvb2tzIGxpa2UgaW4gYHNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY2AgaXQncyBkZWZpbmVkIGFzIGBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoLi4uKWAgLSBzbywgbm90IHN0YXRpYy5cblxuTm93LCB3YWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLiBUaGlua2luZyBhYm91dCBpdCwgdGhlIGZhY3QgdGhhdCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCAqaXMqIHN0YXRpYyAoaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIEknbGwgZG91YmxlLWNoZWNrKSwgbWVhbnMgaXQgY291bGQgYmUgaW5saW5lZCwgb3IgbWlnaHQgbm90IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYywgc28gbGV0IG1lIHF1aWNrbHkgZ28gYmFjayBhbmQgY29uZmlybSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ4NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo0Ni44MjMyMjY3NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTg4Mjc0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yOTQyPXN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjk2Mi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mjk2MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjk2NC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzAwOC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzAwOTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwMTAtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1NTM9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTkxLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfZnJlZV9zZWN1cml0eSwgc2VsaW51eF9pbm9kZV9mcmVlX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU5MjpcXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHksIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc1OTM6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU5NC1cXHRMU01fSE9PS19JTklUKGlub2RlX2NyZWF0ZSwgc2VsaW51eF9pbm9kZV9jcmVhdGUpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo0OC45NDIwNTk4MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjE1MDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIExTTSBIb29rIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgc2VjdXJpdHkgbW9kdWxlIGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBJJ3ZlIGdvdCBhIGtleSBwb2ludCBpbiBtaW5kOiBiZWNhdXNlIHRoaXMgZnVuY3Rpb24ncyBiZWluZyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBMU01fSE9PS19JTklUYCwgdGhlcmUncyBubyB3YXkgdGhlIGNvbXBpbGVyJ3MgZ29pbmcgdG8gaW5saW5lIGl0LiBUaGF0J3MganVzdCB0aGUgbmF0dXJlIG9mIGhvdyBmdW5jdGlvbiBwb2ludGVycyB3b3JrLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBkZWVwIGRpdmUuXG5cbkdpdmVuIHRoYXQsIEkgdGhpbmsgdGhlIGNyaXRpY2FsIGFyZWFzIHRvIHNjcnV0aW5pemUgYXJlIGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGFuZCBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLiBUaG9zZSBhcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIHdoZXJlIHRoZSBhY3R1YWwgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVzaWRlcywgYW5kIHdoZXJlIEknbSBnb2luZyB0byBmaW5kIHRoZSBjb3JlIG1lY2hhbmlzbXMuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEknbSBqdXN0IGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG90aGVyIHNlY3VyaXR5IG1vZHVsZSBvdmVycmlkZXMgdGhpcyBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo1Mi42NDgyMTM5NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzM4OTMwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zbWFjay9zbWFja19sc20uYz05ODQ9eGF0dHJfZHVwdmFsKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDAxLS8qKlxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMDI6ICogc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSAtIGNvcHkgb3V0IHRoZSBzbWFjayBmcm9tIGFuIGlub2RlXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAwMy0gKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDA5LSAqL1xcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMTA6c3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMTEtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTUxMjE9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc21hY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTM4LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHNtYWNrX2lub2RlX2FsbG9jX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTM5OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSksXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE0MC1cXHRMU01fSE9PS19JTklUKGlub2RlX2xpbmssIHNtYWNrX2lub2RlX2xpbmspLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo1NC44ODIxMTMyNjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ4MTU1NzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgY2xlYXIgZGlyZWN0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9sczogYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAsIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAuIEkga25vdyBleGFjdGx5IHdoYXQgdGhlc2UgdGhpbmdzIGFyZS5cblxuUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBJIG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25maWdzIGluIGFueSB0ZXN0aW5nIHNjZW5hcmlvOiBgQlBGX0xTTWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIGBFVk1gLiBBbmQsIHdhaXQsIEkgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcyBkZXBlbmRlbmNpZXMuIE5vdGVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBCUEYga2Z1bmM6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIFRoaXMgaXMga2V5LiBJdCdzIGdpdmluZyBCUEYgTFNNIHByb2dyYW1zIHRoZSBjYXBhYmlsaXR5IHRvIHNldCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGR1cmluZyBgaW5vZGVfaW5pdF9zZWN1cml0eWAuIFRoYXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWxpdHkgYWRkaXRpb24sIGFuZCBvcGVucyBuZXcgYXR0YWNrIHN1cmZhY2VzLiBJdCBhbHNvIHJlZmFjdG9ycyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdG8gdXNlIGBzdHJ1Y3QgbHNtX3hhdHRyc2AgaW5zdGVhZCBvZiBhIHJhdyBhcnJheSAtIGltcHJvdmluZyB0aGUgYXJjaGl0ZWN0dXJlLiBBbmQsIGl0IHVwZGF0ZXMgc2V2ZXJhbCBMU01zIHRvIHVzZSBpdDogYGV2bWAsIGBzZWxpbnV4YCwgYW5kIGBzbWFja2AuIFRoZSBuZXcgZnVuY3Rpb24gYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAsIGNhbGxlZCBieSB0aGUgbmV3IGtmdW5jLCB3YXJyYW50cyBzY3J1dGlueS5cblxuSW4gc2hvcnQsIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBpbnRyb2R1Y2VzIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCwgdGhlcmVmb3JlLCBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCB0byBkb2N1bWVudCBteSBhbmFseXNpcyBhbmQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzgxLCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNTowMi4zNjM2NzQ5NzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwNzI5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCIsXG4gICAgXCJFVk1cIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwiZXZtX2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCIsXG4gICAgXCJFVk1cIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwiZXZtX2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 09:22:31 +0000 UTC FinishedAt: 2026-08-01 09:25:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "2659f94ed3be147942acbea96405efc562afb34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "EVM", "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "2659f94ed3be147942acbea96405efc562afb34c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "EVM", "BPF_SYSCALL", "BPF_JIT" ], "series_id": "12135746-946e-499a-b153-2d18852b1f8c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_init_inode_xattr", "security_lsmxattr_add", "security_inode_init_security", "evm_inode_init_security" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtFVk0mIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2V2bV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgdGhhdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIGR1cmluZyBpbm9kZSBjcmVhdGlvbi4gSXQgYWxzbyByZWZhY3RvcnMgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHRvIHVzZSBhIG5ldyBgc3RydWN0IGxzbV94YXR0cnNgIGFuZCB1cGRhdGVzIEVWTSwgU0VMaW51eCwgYW5kIFNNQUNLIHRvIHVzZSBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlY3VyaXR5IGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OTgwMTMxNzE5YzA1MTNmZjNiNzNiMzk4MjUxYTcxMzAwMjA0NGI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwOToyMzo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTExLDcgJiM0MzsxMSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG5AQCAtMzc5LDYgJiM0MzszODEsNDQgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9kYXRhX2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIGRfcmVhbF9pbm9kZShmaWxlX2RlbnRyeShmaWxlKSk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG4mIzQzOyAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XG4mIzQzOyAqIEBuYW1lX19zdHI6IHhhdHRyIG5hbWUgKGUuZy4sIFwmIzM0O2JwZi5maWxlX2xhYmVsXCYjMzQ7KVxuJiM0MzsgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdFxuJiM0MzsgKiAgICAgICAgIHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbiwgbmVnYXRpdmUgZXJyb3Igb24gb3RoZXIgZmFpbHVyZXMuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xuJiM0MztcdGNvbnN0IHZvaWQgKnZhbHVlO1xuJiM0MztcdHUzMiB2YWx1ZV9sZW47XG4mIzQzO1xuJiM0MztcdGlmICghbmFtZV9fc3RyKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCxcbiYjNDM7XHRcdCAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhhdHRycy1cdTAwM2V4YXR0cnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XG4mIzQzO1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfbHNteGF0dHJfYWRkKHhhdHRycywgTFNNX0lEX0JQRixcbiYjNDM7XHRcdFx0XHQgICAgIG5hbWVfX3N0ciAmIzQzOyBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSxcbiYjNDM7XHRcdFx0XHQgICAgIHZhbHVlLCB2YWx1ZV9sZW4pO1xuJiM0Mzt9XG4mIzQzO1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zOTAsNiAmIzQzOzQzMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfZGF0YV9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cilcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbiBcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbmluZGV4IGRkYTI3MmQ3OGYwMTMuLjRiZjM1MGVmMDJmNDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbkBAIC0xMiw2ICYjNDM7MTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiBcbiYjNDM7LyogbWF4IGJwZiB4YXR0cnMgcGVyIGlub2RlICovXG4mIzQzOyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfQlBGX0xTTVxuIFxuIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5pbmRleCA5MTNmNDU3M2IyMDM4Li41MjhmMzYwZjMzMDhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldm0uaFxuQEAgLTEyLDYgJiM0MzsxMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0VWTVxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtMjEsOCAmIzQzOzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFx0XHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxuQEAgLTYzLDggJiM0Mzs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uNWIyZGU3ODY1Y2U4MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTExNiw4ICYjNDM7MTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHQgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG5pbmRleCBiNGY4Y2FkNTNkZGIwLi43YWZlMDZhOGQ0YzZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuQEAgLTIwMCwyMCAmIzQzOzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiAvKipcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcbi0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnNcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXG4mIzQzOyAqIEBjdHg6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXG4gICpcbi0gKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEB4YXR0cnMgYXJyYXkgdG8gZmlsbCB3aXRoIGFuIHhhdHRyLFxuLSAqIGFuZCBpbmNyZW1lbnQgQHhhdHRyX2NvdW50LlxuJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXHUwMDNleGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhblxuJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVx1MDAzZXhhdHRyX2NvdW50LlxuICAqXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQGN0eC1cdTAwM2V4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgICAgICBpbnQgKnhhdHRyX2NvdW50KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4ge1xuLVx0aWYgKHVubGlrZWx5KCF4YXR0cnMpKVxuJiM0MztcdGlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtXHUwMDNleGF0dHJzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpJiM0MzsmIzQzO107XG4mIzQzO1x0cmV0dXJuIFx1MDAyNmN0eC1cdTAwM2V4YXR0cnNbY3R4LVx1MDAzZXhhdHRyX2NvdW50JiM0MzsmIzQzO107XG4gfVxuIFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmQzNWZkZTdhYTExZjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcbiBzdHJ1Y3QgbHNtX2N0eDtcbiBcbiYjNDM7c3RydWN0IGxzbV94YXR0cnMge1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuJiM0MztcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cbkBAIC00MDEsNiAmIzQzOzQwNiw5IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiBcdFx0XHRcdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpO1xuJiM0MztpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4mIzQzO1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZV9leHRyYSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzQzO1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbik7XG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuQEAgLTg5NSw2ICYjNDM7OTAzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lX2V4dHJhLFxuJiM0MztcdFx0XHRcdFx0Y29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuaW5kZXggN2I5OGY1ZDFlMmJlOC4uOGY4YzNkZTMwMzVmMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMzLDYgJiM0MzszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4mIzQzO1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4Li5iNzE1OGZjNjM1NDNlIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbkBAIC0xMDYyLDE0ICYjNDM7MTA2MiwxNiBAQCBzdGF0aWMgaW50IGV2bV9pbm9kZV9jb3B5X3VwX3hhdHRyKHN0cnVjdCBkZW50cnkgKnNyYywgY29uc3QgY2hhciAqbmFtZSlcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXG4gICovXG4gaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0ICAgIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKVxuIHtcbiBcdHN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7XG4gXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuIFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xuIFx0aW50IHJjO1xuIFxuJiM0MztcdHhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLVx1MDAzZXhhdHRycyA6IE5VTEw7XG4gXHRpZiAoIShldm1faW5pdGlhbGl6ZWQgXHUwMDI2IEVWTV9JTklUX0hNQUMpIHx8ICF4YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwODcsNyAmIzQzOzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWV2bV9wcm90ZWN0ZWRfeGF0dHJzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbiYjNDM7XHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XG4gXHQvKlxuIFx0ICogQXJyYXkgdGVybWluYXRvciAoeGF0dHIgbmFtZSA9IE5VTEwpIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1maWxsZWRcbiBcdCAqIHhhdHRyIHNsb3QuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDcxYWVhOGZkZjAxNDIuLmFlNzIxMDJjZDI5YjggMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O0xTTTogXCYjMzQ7IGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RjYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzMzLDggJiM0MzsxMzM0LDggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxuIHtcbiBcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xuLVx0c3RydWN0IHhhdHRyICpuZXdfeGF0dHJzID0gTlVMTDtcbi1cdGludCByZXQgPSAtRU9QTk9UU1VQUCwgeGF0dHJfY291bnQgPSAwO1xuJiM0MztcdHN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9O1xuJiM0MztcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEzNDQsMTUgJiM0MzsxMzQ1LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIFx0aWYgKGluaXR4YXR0cnMpIHtcbiBcdFx0LyogQWxsb2NhdGUgJiM0MzsxIGFzIHRlcm1pbmF0b3IuICovXG4tXHRcdG5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsXG4tXHRcdFx0XHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcbi1cdFx0aWYgKCFuZXdfeGF0dHJzKVxuJiM0MztcdFx0eGF0dHJzLnhhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgJiM0MzsgMSxcbiYjNDM7XHRcdFx0XHRcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcbiYjNDM7XHRcdGlmICgheGF0dHJzLnhhdHRycylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdGxzbV9mb3JfZWFjaF9ob29rKHNjYWxsLCBpbm9kZV9pbml0X3NlY3VyaXR5KSB7XG4tXHRcdHJldCA9IHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLFxuLVx0XHRcdFx0XHRcdCAgXHUwMDI2eGF0dHJfY291bnQpO1xuJiM0MztcdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cnMpO1xuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdC8qXG5AQCAtMTM2NCwxOCAmIzQzOzEzNjUsMTEzIEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFxuIFx0LyogSWYgaW5pdHhhdHRycygpIGlzIE5VTEwsIHhhdHRyX2NvdW50IGlzIHplcm8sIHNraXAgdGhlIGNhbGwuICovXG4tXHRpZiAoIXhhdHRyX2NvdW50KVxuJiM0MztcdGlmICgheGF0dHJzLnhhdHRyX2NvdW50KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIG5ld194YXR0cnMsIGZzX2RhdGEpO1xuJiM0MztcdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpO1xuIG91dDpcbi1cdGZvciAoOyB4YXR0cl9jb3VudCBcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcbi1cdFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcbi1cdGtmcmVlKG5ld194YXR0cnMpO1xuJiM0MztcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRycy54YXR0cl9jb3VudC0tKVxuJiM0MztcdFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4mIzQzO1x0a2ZyZWUoeGF0dHJzLnhhdHRycyk7XG4gXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpO1xuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGxzbV94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpwcmVmaXgpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpO1xuJiM0MztcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgeGF0dHJzLVx1MDAzZXhhdHRyX2NvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZSA9IHhhdHRycy1cdTAwM2V4YXR0cnNbaV0ubmFtZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmFtZSBcdTAwMjZcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcbiYjNDM7XHRcdFx0biYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcbiYjNDM7ICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiYjNDM7ICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXG4mIzQzOyAqIEBuYW1lX2V4dHJhOiB4YXR0ciBuYW1lIGNvbXBvbmVudHMgYmV5b25kIHRoZSBjYWxsaW5nIExTTSYjMzk7cyBzdGFuZGFyZFxuJiM0MzsgKiAgICAgICAgICAgICAgeGF0dHIgc3VmZml4LCBOVUxMIGlmIHRoZSBzdGFuZGFyZCBzdWZmaXggaXMgdGhlIGZ1bGwgbmFtZVxuJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlXG4mIzQzOyAqIEB2YWx1ZV9sZW46IGxlbmd0aCBvZiBAdmFsdWVcbiYjNDM7ICpcbiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogQGxzbV9pZCBhbmQgZmlsbCBpdCB3aXRoIGEgY29weSBvZiBAdmFsdWUuIFRoZSB4YXR0ciBuYW1lIGlzIGJ1aWx0IGZyb21cbiYjNDM7ICogdGhlIHN0YW5kYXJkIHhhdHRyIHN1ZmZpeCBvZiB0aGUgY2FsbGluZyBMU00sIGZvbGxvd2VkIGJ5IEBuYW1lX2V4dHJhLlxuJiM0MzsgKiBDYWxsZXJzIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBpZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBhY2NlcHQgeGF0dHJzXG4mIzQzOyAqICAgICAgICAgYXQgaW5vZGUgY3JlYXRpb24sIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJiMzOTtzIHNsb3QgYnVkZ2V0IGlzXG4mIzQzOyAqICAgICAgICAgZXhoYXVzdGVkLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZXJyb3JzLlxuJiM0MzsgKi9cbiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWVfZXh0cmEsIGNvbnN0IHZvaWQgKnZhbHVlLFxuJiM0MztcdFx0XHQgIHNpemVfdCB2YWx1ZV9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xuJiM0MztcdHZvaWQgKnhhdHRyX3ZhbHVlO1xuJiM0MztcdGNvbnN0IGNoYXIgKnN1ZmZpeDtcbiYjNDM7XHRzaXplX3Qgc3VmZml4X2xlbiwgZXh0cmFfbGVuLCBuYW1lX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4YXR0cnMgfHwgIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaWxlc3lzdGVtIGRpZCBub3QgcHJvdmlkZSBhbiBpbml0eGF0dHJzIGNhbGxiYWNrLiAqL1xuJiM0MztcdGlmICgheGF0dHJzLVx1MDAzZXhhdHRycylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGxzbV9pZCkge1xuJiM0MztcdGNhc2UgTFNNX0lEX0JQRjpcbiYjNDM7XHRcdGlmICghbmFtZV9leHRyYSB8fCAhbmFtZV9leHRyYVswXSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRzdWZmaXggPSBYQVRUUl9CUEZfTFNNX1NVRkZJWDtcbiYjNDM7XHRcdGlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgXHUwMDNlPVxuJiM0MztcdFx0ICAgIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpO1xuJiM0MztcdGV4dHJhX2xlbiA9IG5hbWVfZXh0cmEgPyBzdHJsZW4obmFtZV9leHRyYSkgOiAwO1xuJiM0MztcdG5hbWVfbGVuID0gc3VmZml4X2xlbiAmIzQzOyBleHRyYV9sZW47XG4mIzQzO1x0aWYgKG5hbWVfbGVuIFx1MDAzZSBYQVRUUl9OQU1FX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gXHUwMDNlIFhBVFRSX1NJWkVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgJiM0MzsgbmFtZSBpbnRvIG9uZSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdHhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW4gJiM0MzsgMSwgR0ZQX05PV0FJVCk7XG4mIzQzO1x0aWYgKCF4YXR0cl92YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkoeGF0dHJfdmFsdWUsIHZhbHVlLCB2YWx1ZV9sZW4pO1xuJiM0MztcdG1lbWNweSh4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW4sIHN1ZmZpeCwgc3VmZml4X2xlbik7XG4mIzQzO1x0aWYgKGV4dHJhX2xlbilcbiYjNDM7XHRcdG1lbWNweSh4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW4gJiM0Mzsgc3VmZml4X2xlbiwgbmFtZV9leHRyYSxcbiYjNDM7XHRcdCAgICAgICBleHRyYV9sZW4pO1xuJiM0MztcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiYjNDM7XHRpZiAoIXhhdHRyKSB7XG4mIzQzO1x0XHRrZnJlZSh4YXR0cl92YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4mIzQzO1x0eGF0dHItXHUwMDNlbmFtZSA9IChjb25zdCBjaGFyICopeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZVxuICAqIEBpbm9kZTogdGhlIGlub2RlXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCA4ZDY5NDVlZGFlN2FhLi4yMTU0NGM3NzVjMTc2IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yOTYyLDcgJiM0MzsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcbiBcbiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgY3JlZF9zZWN1cml0eV9zdHJ1Y3QgKmNyc2VjID0gc2VsaW51eF9jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XG5AQCAtMjk5Miw3ICYjNDM7Mjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0ICAgICEoc2JzZWMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNCTEFCRUxfTU5UKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4mIzQzO1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcdGlmICh4YXR0cikge1xuIFx0XHRyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0X2ZvcmNlKG5ld3NpZCxcbiBcdFx0XHRcdFx0XHQgICBcdTAwMjZjb250ZXh0LCBcdTAwMjZjbGVuKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCBmZjExNTA2OGM1YzA2Li40NTAxMDc4NDMwY2EwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtOTgxLDEwICYjNDM7OTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiBcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWxsZW4pXG4ge1xuLVx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4mIzQzO1x0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcbiBcdGlmICgheGF0dHIpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEwMDMsMTQgJiM0MzsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbiYjNDM7ICogQHhhdHRyczogd2hlcmUgdG8gcHV0IGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZSBjb3VudFxuICAqXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUmIzM5O3Mgbm8gbWVtb3J5XG4gICovXG4gc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0dHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTtcbiBcbi1cdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0XHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXG4tXHRcdFx0XHRUUkFOU19UUlVFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRV9TSVpFXG4tXHRcdFx0KSlcbiYjNDM7XHRcdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsXG4mIzQzO1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuJiM0MztcdFx0XHRcdFx0IFRSQU5TX1RSVUUsXG4mIzQzO1x0XHRcdFx0XHQgVFJBTlNfVFJVRV9TSVpFKSlcbiBcdFx0XHRcdHJjID0gLUVOT01FTTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHJjID09IDApXG4tXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxuLVx0XHRcdCAgICBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4tXHRcdCAgICAgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bilcbi1cdFx0KSlcbiYjNDM7XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuJiM0MztcdFx0XHRcdCBYQVRUUl9TTUFDS19TVUZGSVgsXG4mIzQzO1x0XHRcdFx0IGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bixcbiYjNDM7XHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxOC4uMjYzOWY5Zjk0MTk1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICYjNDM7OTIsOSBAQCBleHRlcm4gaW50IGJwZl9zZXRfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcbiBleHRlcm4gaW50IGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyKSBfX2tzeW0gX193ZWFrO1xuIFxuJiM0MztzdHJ1Y3QgbHNtX3hhdHRycztcbiYjNDM7ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9nZXRfeGF0dHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9zZXRfcmVtb3ZlX3hhdHRyLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3RfZnN2ZXJpdHkuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcJiMzNDtcbiBcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXCYjMzQ7L3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc1wmIzM0OztcbiBcbkBAIC0yNjgsNiAmIzQzOzI2OSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxuIFx0cmVtb3ZlKHRlc3RmaWxlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IGZkID0gLTEsIGVycjtcbiYjNDM7XHRjaGFyIHZhbHVlX291dFs2NF07XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgdGVzdCBtdXN0IGJlIHJ1biBmcm9tIGEgZnMgdGhhdCBjYWxsc1xuJiM0MztcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcJiMzNDsvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcJiMzNDs7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuJiM0MztcdGVyciA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRyaWdnZXIgaW5vZGVfaW5pdF9zZWN1cml0eSAqL1xuJiM0MztcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9iYWJseSBzaG91bGQgbm90IGJlIG5lZWRlZCBhcyB3ZSB3aWxsIGJlIGxhYmVsaW5nIGEgZmlsZVxuJiM0MztcdCAqIGluIC9kZXYvc2htLCBidXQganVzdCBpbiBjYXNlIHdlIGNoZWNrIGlmIHRoZSBob29rIHdhcyBhY3R1YWxseVxuJiM0MztcdCAqIGNhbGxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNlYnNzLVx1MDAzZWhvb2tfcmFuKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDppbm9kZV9pbml0X3NlY3VyaXR5IGhvb2sgd2FzIG5vdCBpbnZva2VkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIF9fZnVuY19fKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbi4gKi9cbiYjNDM7XHRpZiAoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0ID09IC1FT1BOT1RTVVBQKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTFNNIGluaXQgeGF0dHJzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIF9fZnVuY19fKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdCwgMCwgXCYjMzQ7aW5pdF9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBpbml0eGF0dHJzIHByZXBlbmRzIFwmIzM0O3NlY3VyaXR5LlwmIzM0OyB0byB0aGUgbmFtZS4gKi9cbiYjNDM7XHRlcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsIFwmIzM0O3NlY3VyaXR5LmJwZi50ZXN0X2xhYmVsXCYjMzQ7LCB2YWx1ZV9vdXQsXG4mIzQzO1x0XHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0RBVEEpIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIF9fZnVuY19fKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFwmIzM0O2dldHhhdHRyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAoaW50KXNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNleGF0dHJfdmFsdWUpLCBcJiMzNDt4YXR0cl9zaXplXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsIFwmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwmIzM0OyxcbiYjNDM7XHRcdFx0ICBzaXplb2YoXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7KSksIDAsXG4mIzQzO1x0XHQgIFwmIzM0O3hhdHRyX3ZhbHVlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xuJiM0MzsjZGVmaW5lIElOSVRfSU5PREVfWEFUVFJfTUFYIDRcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW1zIG1heSBhdHRhY2ggdG8gaW5vZGVfaW5pdF9zZWN1cml0eSB3aXRob3V0IGFuIGF0dGFjaC10aW1lIGxpbWl0LCBidXRcbiYjNDM7ICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxuJiM0MzsgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTtcbiYjNDM7XHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gXCYjMzQ7L2Rldi9zaG0vdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdFwmIzM0OztcbiYjNDM7XHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG5vdHJ1biA9IDAsIG90aGVyID0gMDtcbiYjNDM7XHRpbnQgaSwgZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuKCk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXCYjMzQ7b3BlblwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKHNrZWxbaV0tXHUwMDNlcm9kYXRhLVx1MDAzZXhhdHRyX25hbWUsXG4mIzQzO1x0XHRcdCBzaXplb2Yoc2tlbFtpXS1cdTAwM2Vyb2RhdGEtXHUwMDNleGF0dHJfbmFtZSksIFwmIzM0O2JwZi5sYWJlbF8lZFwmIzM0OyxcbiYjNDM7XHRcdFx0IGkpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXCYjMzQ7bG9hZFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHNrZWxbaV0tXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmtbaV0sIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXG4mIzQzO1x0ZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGVzdFxuJiM0MztcdCAqIHhhdHRyIGJ1ZGdldCBhY2NvdW50aW5nIHdpdGggLUVOT1NQQy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmVzID0gc2tlbFtpXS1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghc2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlaG9va19yYW4gfHwgcmVzID09IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRub3RydW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0ZWxzZSBpZiAocmVzID09IDApXG4mIzQzO1x0XHRcdG9rJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKVxuJiM0MztcdFx0XHRub3NwYyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG90aGVyJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChub3RydW4gPT0gSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMSkge1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyVzOlNLSVA6aG9vayBub3QgaW52b2tlZCBvciBmcyBsYWNrcyBMU00gaW5pdCB4YXR0cnNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCBcJiMzNDtzbG90c193aXRoaW5fYnVkZ2V0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEobm9zcGMsIDEsIFwmIzM0O3Nsb3Rfb3Zlcl9idWRnZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShvdGhlciwgMCwgXCYjMzQ7dW5leHBlY3RlZF9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7XG4mIzQzO1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlbW92ZSh0ZXN0ZmlsZV9zbG90KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpXG4ge1xuIFx0LyogTWF0Y2hlcyB4YXR0cl9uYW1lcyBpbiBwcm9ncy90ZXN0X2dldF94YXR0ci5jICovXG5AQCAtMjg4LDQgJiM0Mzs0MzgsMTAgQEAgdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxuIFxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnN2ZXJpdHlcJiMzNDspKVxuIFx0XHR0ZXN0X2ZzdmVyaXR5KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2luaXRfaW5vZGVfeGF0dHJcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZTNkOGQzOWRlOWNhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgJiM0MzsxLDMzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2tmdW5jcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7X191MzIgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGhvb2tfcmFuO1xuJiM0MztpbnQgaW5pdF9yZXN1bHQgPSAtMTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSBcJiMzNDticGYudGVzdF9sYWJlbFwmIzM0OztcbiYjNDM7Y2hhciB4YXR0cl92YWx1ZVtdID0gXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9pbml0X3NlY3VyaXR5XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyO1xuJiM0MztcdF9fdTMyIHBpZDtcbiYjNDM7XG4mIzQzO1x0cGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRob29rX3JhbiA9IDE7XG4mIzQzO1x0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXHUwMDI2dmFsdWVfcHRyKTtcbiYjNDM7XHRpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgXHUwMDI2dmFsdWVfcHRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDssCiAgICAmIzM0O0VWTSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luaXRfaW5vZGVfeGF0dHImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfbHNteGF0dHJfYWRkJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7ZXZtX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBJdCBhbHNvIHJlZmFjdG9ycyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2AgYW5kIHVwZGF0ZXMgRVZNLCBTRUxpbnV4LCBhbmQgU01BQ0sgdG8gdXNlIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgc2VjdXJpdHkgYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk5ODAxMzE3MTljMDUxM2ZmM2I3M2IzOTgyNTFhNzEzMDAyMDQ0YjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA5OjIzOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jCmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0Ci0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9icGZfZnNfa2Z1bmNzLmMKQEAgLTExLDcgJiM0MzsxMSw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgveGF0dHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9sc20uaCZndDsKIAogX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogCkBAIC0zNzksNiAmIzQzOzM4MSw0NCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2RhdGFfaW5vZGUoc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIGRfcmVhbF9pbm9kZShmaWxlX2RlbnRyeShmaWxlKSk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHkKJiM0MzsgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dAomIzQzOyAqIEBuYW1lX19zdHI6IHhhdHRyIG5hbWUgKGUuZy4sICYjMzQ7YnBmLmZpbGVfbGFiZWwmIzM0OykKJiM0MzsgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlCiYjNDM7ICoKJiM0MzsgKiBPbmx5IGNhbGxhYmxlIGZyb20gbHNtL2lub2RlX2luaXRfc2VjdXJpdHkgcHJvZ3JhbXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0CiYjNDM7ICogICAgICAgICB4YXR0cnMgYXQgaW5vZGUgY3JlYXRpb24sIG5lZ2F0aXZlIGVycm9yIG9uIG90aGVyIGZhaWx1cmVzLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLAomIzQzOwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnZhbHVlX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopdmFsdWVfcDsKJiM0MzsJY29uc3Qgdm9pZCAqdmFsdWU7CiYjNDM7CXUzMiB2YWx1ZV9sZW47CiYjNDM7CiYjNDM7CWlmICghbmFtZV9fc3RyKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsCiYjNDM7CQkgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJaWYgKCF4YXR0cnMtJmd0O3hhdHRycykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJdmFsdWVfbGVuID0gX19icGZfZHlucHRyX3NpemUodmFsdWVfcHRyKTsKJiM0MzsJdmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCh4YXR0cnMsIExTTV9JRF9CUEYsCiYjNDM7CQkJCSAgICAgbmFtZV9fc3RyICYjNDM7IHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxLAomIzQzOwkJCQkgICAgIHZhbHVlLCB2YWx1ZV9sZW4pOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpCkBAIC0zOTAsNiAmIzQzOzQzMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfZGF0YV9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyKQogQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpCiAKIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaCBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCmluZGV4IGRkYTI3MmQ3OGYwMTMuLjRiZjM1MGVmMDJmNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCkBAIC0xMiw2ICYjNDM7MTIsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl92ZXJpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xzbV9ob29rcy5oJmd0OwogCiYjNDM7LyogbWF4IGJwZiB4YXR0cnMgcGVyIGlub2RlICovCiYjNDM7I2RlZmluZSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIDQKJiM0MzsKICNpZmRlZiBDT05GSUdfQlBGX0xTTQogCiBleHRlcm4gYm9vbCBicGZfbHNtX2luaXRpYWxpemVkIF9fcm9fYWZ0ZXJfaW5pdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oCmluZGV4IDkxM2Y0NTczYjIwMzguLjUyOGYzNjBmMzMwOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldm0uaApAQCAtMTIsNiAmIzQzOzEyLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlZ3JpdHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC94YXR0ci5oJmd0OwogCiYjNDM7c3RydWN0IGxzbV94YXR0cnM7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0VWTQogZXh0ZXJuIGludCBldm1fc2V0X2tleSh2b2lkICprZXksIHNpemVfdCBrZXlsZW4pOwogZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtMjEsOCAmIzQzOzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsCiAJCSBjb25zdCBjaGFyICp4YXR0cl92YWx1ZSwgc2l6ZV90IHhhdHRyX3ZhbHVlX2xlbik7CiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLAotCQkJICAgIGludCAqeGF0dHJfY291bnQpOwomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKJiM0MzsJCQkgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7CiBleHRlcm4gYm9vbCBldm1fcmV2YWxpZGF0ZV9zdGF0dXMoY29uc3QgY2hhciAqeGF0dHJfbmFtZSk7CiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7CiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLApAQCAtNjMsOCAmIzQzOzY1LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSwKIAogc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCSAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJCSAgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJCSAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uNWIyZGU3ODY1Y2U4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTExNiw4ICYjNDM7MTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KQogTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKJiM0MzsJIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmgKaW5kZXggYjRmOGNhZDUzZGRiMC4uN2FmZTA2YThkNGM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7CiAKIC8qKgogICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4Ci0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnMKLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZCkKJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rcwogICoKLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsCi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC4KJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtJmd0O3hhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4KJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LSZndDt4YXR0cl9jb3VudC4KICAqCi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtJmd0O3hhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgICAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eCkKIHsKLQlpZiAodW5saWtlbHkoIXhhdHRycykpCiYjNDM7CWlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtJmd0O3hhdHRycykpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiAmYW1wO3hhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdOwomIzQzOwlyZXR1cm4gJmFtcDtjdHgtJmd0O3hhdHRyc1tjdHgtJmd0O3hhdHRyX2NvdW50JiM0MzsmIzQzO107CiB9CiAKICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li5kMzVmZGU3YWExMWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC02OCw2ICYjNDM7NjgsMTEgQEAgc3RydWN0IHdhdGNoOwogc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjsKIHN0cnVjdCBsc21fY3R4OwogCiYjNDM7c3RydWN0IGxzbV94YXR0cnMgewomIzQzOwlzdHJ1Y3QgeGF0dHIgKnhhdHRyczsKJiM0MzsJdW5zaWduZWQgaW50IHhhdHRyX2NvdW50OwomIzQzO307CiYjNDM7CiAvKiBEZWZhdWx0IChubykgb3B0aW9ucyBmb3IgdGhlIGNhcGFibGUgZnVuY3Rpb24gKi8KICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MAogLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi8KQEAgLTQwMSw2ICYjNDM7NDA2LDkgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAogCQkJCSBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpOwomIzQzO2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKm5hbWVfZXh0cmEsIGNvbnN0IHZvaWQgKnZhbHVlLAomIzQzOwkJCSAgc2l6ZV90IHZhbHVlX2xlbik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKQEAgLTg5NSw2ICYjNDM7OTAzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLAomIzQzOwkJCQkJY29uc3QgY2hhciAqbmFtZV9leHRyYSwKJiM0MzsJCQkJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmMKaW5kZXggN2I5OGY1ZDFlMmJlOC4uOGY4YzNkZTMwMzVmMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYnBmL2hvb2tzLmMKQEAgLTMzLDYgJiM0MzszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKQogCiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iKSwKJiM0MzsJLmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsCiB9OwogCiBERUZJTkVfTFNNKGJwZikgPSB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5kZXggYjU5ZTNmMTIxYjhhOC4uYjcxNThmYzYzNTQzZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYwpAQCAtMTA2MiwxNCAmIzQzOzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpCiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlCiAgKi8KIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CQkJICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKQogewogCXN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7CiAJc3RydWN0IHhhdHRyICp4YXR0ciwgKmV2bV94YXR0cjsKJiM0MzsJc3RydWN0IHhhdHRyICp4YXR0cnM7CiAJYm9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlOwogCWludCByYzsKIAomIzQzOwl4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy0mZ3Q7eGF0dHJzIDogTlVMTDsKIAlpZiAoIShldm1faW5pdGlhbGl6ZWQgJmFtcDsgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycykKIAkJcmV0dXJuIDA7CiAKQEAgLTEwODcsNyAmIzQzOzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFldm1fcHJvdGVjdGVkX3hhdHRycykKIAkJcmV0dXJuIDA7CiAKLQlldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CWV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTsKIAkvKgogCSAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkCiAJICogeGF0dHIgc2xvdC4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDIuLmFlNzIxMDJjZDI5YjggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtMU006ICYjMzQ7IGZtdAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9sc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYXBhYmlsaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGNhY2hlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzMzLDggJiM0MzsxMzM0LDggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJIGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSkKIHsKIAlzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDsKLQlzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMOwotCWludCByZXQgPSAtRU9QTk9UU1VQUCwgeGF0dHJfY291bnQgPSAwOwomIzQzOwlzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTsKJiM0MzsJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7CkBAIC0xMzQ0LDE1ICYjNDM7MTM0NSwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogCWlmIChpbml0eGF0dHJzKSB7CiAJCS8qIEFsbG9jYXRlICYjNDM7MSBhcyB0ZXJtaW5hdG9yLiAqLwotCQluZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLAotCQkJCSAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpOwotCQlpZiAoIW5ld194YXR0cnMpCiYjNDM7CQl4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLAomIzQzOwkJCQkJc2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpOwomIzQzOwkJaWYgKCF4YXR0cnMueGF0dHJzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHsKLQkJcmV0ID0gc2NhbGwtJmd0O2hsLSZndDtob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycywKLQkJCQkJCSAgJmFtcDt4YXR0cl9jb3VudCk7CiYjNDM7CQlyZXQgPSBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLAomIzQzOwkJCQkJCQkgICZhbXA7eGF0dHJzKTsKIAkJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRU9QTk9UU1VQUCkKIAkJCWdvdG8gb3V0OwogCQkvKgpAQCAtMTM2NCwxOCAmIzQzOzEzNjUsMTEzIEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCX0KIAogCS8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqLwotCWlmICgheGF0dHJfY291bnQpCiYjNDM7CWlmICgheGF0dHJzLnhhdHRyX2NvdW50KQogCQlnb3RvIG91dDsKIAotCXJldCA9IGluaXR4YXR0cnMoaW5vZGUsIG5ld194YXR0cnMsIGZzX2RhdGEpOwomIzQzOwlyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTsKIG91dDoKLQlmb3IgKDsgeGF0dHJfY291bnQgJmd0OyAwOyB4YXR0cl9jb3VudC0tKQotCQlrZnJlZShuZXdfeGF0dHJzW3hhdHRyX2NvdW50IC0gMV0udmFsdWUpOwotCWtmcmVlKG5ld194YXR0cnMpOwomIzQzOwlmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50ICZndDsgMDsgeGF0dHJzLnhhdHRyX2NvdW50LS0pCiYjNDM7CQlrZnJlZSh4YXR0cnMueGF0dHJzW3hhdHRycy54YXR0cl9jb3VudCAtIDFdLnZhbHVlKTsKJiM0MzsJa2ZyZWUoeGF0dHJzLnhhdHRycyk7CiAJcmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGxzbV94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLAomIzQzOwkJCQkgICAgY29uc3QgY2hhciAqcHJlZml4KQomIzQzO3sKJiM0MzsJc2l6ZV90IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKJiM0MzsJdW5zaWduZWQgaW50IGksIG4gPSAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgeGF0dHJzLSZndDt4YXR0cl9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtJmd0O3hhdHRyc1tpXS5uYW1lOwomIzQzOwomIzQzOwkJaWYgKG5hbWUgJmFtcDsmYW1wOyAhc3RybmNtcChuYW1lLCBwcmVmaXgsIHByZWZpeF9sZW4pKQomIzQzOwkJCW4mIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiBuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzZWN1cml0eV9sc214YXR0cl9hZGQoKSAtIEFkZCBhbiB4YXR0ciBkdXJpbmcgaW5vZGVfaW5pdF9zZWN1cml0eQomIzQzOyAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzCiYjNDM7ICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNCiYjNDM7ICogQG5hbWVfZXh0cmE6IHhhdHRyIG5hbWUgY29tcG9uZW50cyBiZXlvbmQgdGhlIGNhbGxpbmcgTFNNJiMzOTtzIHN0YW5kYXJkCiYjNDM7ICogICAgICAgICAgICAgIHhhdHRyIHN1ZmZpeCwgTlVMTCBpZiB0aGUgc3RhbmRhcmQgc3VmZml4IGlzIHRoZSBmdWxsIG5hbWUKJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlCiYjNDM7ICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZQomIzQzOyAqCiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkKJiM0MzsgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEB2YWx1ZS4gVGhlIHhhdHRyIG5hbWUgaXMgYnVpbHQgZnJvbQomIzQzOyAqIHRoZSBzdGFuZGFyZCB4YXR0ciBzdWZmaXggb2YgdGhlIGNhbGxpbmcgTFNNLCBmb2xsb3dlZCBieSBAbmFtZV9leHRyYS4KJiM0MzsgKiBDYWxsZXJzIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgaWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRycwomIzQzOyAqICAgICAgICAgYXQgaW5vZGUgY3JlYXRpb24sIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJiMzOTtzIHNsb3QgYnVkZ2V0IGlzCiYjNDM7ICogICAgICAgICBleGhhdXN0ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBlcnJvcnMuCiYjNDM7ICovCiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLAomIzQzOwkJCSAgY29uc3QgY2hhciAqbmFtZV9leHRyYSwgY29uc3Qgdm9pZCAqdmFsdWUsCiYjNDM7CQkJICBzaXplX3QgdmFsdWVfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHhhdHRyICp4YXR0cjsKJiM0MzsJdm9pZCAqeGF0dHJfdmFsdWU7CiYjNDM7CWNvbnN0IGNoYXIgKnN1ZmZpeDsKJiM0MzsJc2l6ZV90IHN1ZmZpeF9sZW4sIGV4dHJhX2xlbiwgbmFtZV9sZW47CiYjNDM7CiYjNDM7CWlmICgheGF0dHJzIHx8ICF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBUaGUgZmlsZXN5c3RlbSBkaWQgbm90IHByb3ZpZGUgYW4gaW5pdHhhdHRycyBjYWxsYmFjay4gKi8KJiM0MzsJaWYgKCF4YXR0cnMtJmd0O3hhdHRycykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGxzbV9pZCkgewomIzQzOwljYXNlIExTTV9JRF9CUEY6CiYjNDM7CQlpZiAoIW5hbWVfZXh0cmEgfHwgIW5hbWVfZXh0cmFbMF0pCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlzdWZmaXggPSBYQVRUUl9CUEZfTFNNX1NVRkZJWDsKJiM0MzsJCWlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgJmd0Oz0KJiM0MzsJCSAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKQomIzQzOwkJCXJldHVybiAtRU5PU1BDOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeCk7CiYjNDM7CWV4dHJhX2xlbiA9IG5hbWVfZXh0cmEgPyBzdHJsZW4obmFtZV9leHRyYSkgOiAwOwomIzQzOwluYW1lX2xlbiA9IHN1ZmZpeF9sZW4gJiM0MzsgZXh0cmFfbGVuOwomIzQzOwlpZiAobmFtZV9sZW4gJmd0OyBYQVRUUl9OQU1FX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuICZndDsgWEFUVFJfU0laRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogQ29tYmluZSB4YXR0ciB2YWx1ZSAmIzQzOyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovCiYjNDM7CXhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW4gJiM0MzsgMSwgR0ZQX05PV0FJVCk7CiYjNDM7CWlmICgheGF0dHJfdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbiwgc3VmZml4LCBzdWZmaXhfbGVuKTsKJiM0MzsJaWYgKGV4dHJhX2xlbikKJiM0MzsJCW1lbWNweSh4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW4gJiM0Mzsgc3VmZml4X2xlbiwgbmFtZV9leHRyYSwKJiM0MzsJCSAgICAgICBleHRyYV9sZW4pOwomIzQzOwkoKGNoYXIgKil4YXR0cl92YWx1ZSlbdmFsdWVfbGVuICYjNDM7IG5hbWVfbGVuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTsKJiM0MzsJaWYgKCF4YXR0cikgewomIzQzOwkJa2ZyZWUoeGF0dHJfdmFsdWUpOwomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeGF0dHItJmd0O3ZhbHVlID0geGF0dHJfdmFsdWU7CiYjNDM7CXhhdHRyLSZndDtuYW1lID0gKGNvbnN0IGNoYXIgKil4YXR0cl92YWx1ZSAmIzQzOyB2YWx1ZV9sZW47CiYjNDM7CXhhdHRyLSZndDt2YWx1ZV9sZW4gPSB2YWx1ZV9sZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZQogICogQGlub2RlOiB0aGUgaW5vZGUKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA4ZDY5NDVlZGFlN2FhLi4yMTU0NGM3NzVjMTc2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0yOTYyLDcgJiM0MzsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAotCQkJCSAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7CiAJc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYzsKQEAgLTI5OTIsNyAmIzQzOzI5OTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkgICAgIShzYnNlYy0mZ3Q7ZmxhZ3MgJmFtcDsgU0JMQUJFTF9NTlQpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQl4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTsKJiM0MzsJeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTsKIAlpZiAoeGF0dHIpIHsKIAkJcmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsCiAJCQkJCQkgICAmYW1wO2NvbnRleHQsICZhbXA7Y2xlbik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IGZmMTE1MDY4YzVjMDYuLjQ1MDEwNzg0MzBjYTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05ODEsMTAgJiM0Mzs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsCiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCwKJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKIAkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKQogewotCXN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwogCiAJaWYgKCF4YXR0cikKIAkJcmV0dXJuIDA7CkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsCiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlCiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3QKICAqIEBxc3RyOiB1bnVzZWQKLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlcwotICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKQomIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnQKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSYjMzk7cyBubyBtZW1vcnkKICAqLwogc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTsKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpOwpAQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQkJdHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTsKIAotCQkJaWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LAotCQkJCVhBVFRSX1NNQUNLX1RSQU5TTVVURSwKLQkJCQlUUkFOU19UUlVFLAotCQkJCVRSQU5TX1RSVUVfU0laRQotCQkJKSkKJiM0MzsJCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywKJiM0MzsJCQkJCSBYQVRUUl9TTUFDS19UUkFOU01VVEUsCiYjNDM7CQkJCQkgVFJBTlNfVFJVRSwKJiM0MzsJCQkJCSBUUkFOU19UUlVFX1NJWkUpKQogCQkJCXJjID0gLUVOT01FTTsKIAkJfQogCX0KIAogCWlmIChyYyA9PSAwKQotCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsCi0JCQkgICAgWEFUVFJfU01BQ0tfU1VGRklYLAotCQkJICAgIGlzc3AtJmd0O3Nta19pbm9kZS0mZ3Q7c21rX2tub3duLAotCQkgICAgIHN0cmxlbihpc3NwLSZndDtzbWtfaW5vZGUtJmd0O3Nta19rbm93bikKLQkJKSkKJiM0MzsJCWlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLAomIzQzOwkJCQkgWEFUVFJfU01BQ0tfU1VGRklYLAomIzQzOwkJCQkgaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24sCiYjNDM7CQkJCSBzdHJsZW4oaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24pKSkKIAkJCXJjID0gLUVOT01FTTsKIGluc3RhbnRfaW5vZGU6CiAJaXNzcC0mZ3Q7c21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaAppbmRleCBhZTcxZTliNjkwNTE4Li4yNjM5ZjlmOTQxOTU1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgKQEAgLTkyLDQgJiM0Mzs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsCiAJCQkJY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhazsKIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRyczsKJiM0MztleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCWNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMKaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjaW5jbHVkZSAmIzM0O3Rlc3RfZ2V0X3hhdHRyLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X2ZzdmVyaXR5LnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHIuc2tlbC5oJiMzNDsKIAogc3RhdGljIGNvbnN0IGNoYXIgdGVzdGZpbGVbXSA9ICYjMzQ7L3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jcyYjMzQ7OwogCkBAIC0yNjgsNiAmIzQzOzI2OSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKQogCXJlbW92ZSh0ZXN0ZmlsZSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgZmQgPSAtMSwgZXJyOwomIzQzOwljaGFyIHZhbHVlX291dFs2NF07CiYjNDM7CiYjNDM7CS8qIFRoaXMgdGVzdCBtdXN0IGJlIHJ1biBmcm9tIGEgZnMgdGhhdCBjYWxscwomIzQzOwkgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSAmIzM0Oy9kZXYvc2htL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX25ldyYjMzQ7OwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CWVyciA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovCiYjNDM7CWZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGVfZmlsZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9iYWJseSBzaG91bGQgbm90IGJlIG5lZWRlZCBhcyB3ZSB3aWxsIGJlIGxhYmVsaW5nIGEgZmlsZQomIzQzOwkgKiBpbiAvZGV2L3NobSwgYnV0IGp1c3QgaW4gY2FzZSB3ZSBjaGVjayBpZiB0aGUgaG9vayB3YXMgYWN0dWFsbHkKJiM0MzsJICogY2FsbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFza2VsLSZndDtic3MtJmd0O2hvb2tfcmFuKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOmlub2RlX2luaXRfc2VjdXJpdHkgaG9vayB3YXMgbm90IGludm9rZWRcbiYjMzQ7LAomIzQzOwkJICAgICAgIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdCB4YXR0cnMgYXQgaW5vZGUgY3JlYXRpb24uICovCiYjNDM7CWlmIChza2VsLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdCA9PSAtRU9QTk9UU1VQUCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTFNNIGluaXQgeGF0dHJzXG4mIzM0OywKJiM0MzsJCSAgICAgICBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7aW5pdF9yZXN1bHQsIDAsICYjMzQ7aW5pdF9yZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIGluaXR4YXR0cnMgcHJlcGVuZHMgJiMzNDtzZWN1cml0eS4mIzM0OyB0byB0aGUgbmFtZS4gKi8KJiM0MzsJZXJyID0gZ2V0eGF0dHIodGVzdGZpbGVfbmV3LCAmIzM0O3NlY3VyaXR5LmJwZi50ZXN0X2xhYmVsJiMzNDssIHZhbHVlX291dCwKJiM0MzsJCSAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7CiYjNDM7CWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRU5PREFUQSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xuJiMzNDssCiYjNDM7CQkgICAgICAgX19mdW5jX18pOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfR0UoZXJyLCAwLCAmIzM0O2dldHhhdHRyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3hhdHRyX3ZhbHVlKSwgJiMzNDt4YXR0cl9zaXplJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsICYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwJiMzNDssCiYjNDM7CQkJICBzaXplb2YoJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OykpLCAwLAomIzQzOwkJICAmIzM0O3hhdHRyX3ZhbHVlJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwl0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXJlbW92ZSh0ZXN0ZmlsZV9uZXcpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqLwomIzQzOyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNAomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dAomIzQzOyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS4KJiM0MzsgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGlua1tJTklUX0lOT0RFX1hBVFRSX01BWCAmIzQzOyAxXSA9IHt9OwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gJiMzNDsvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19zbG90JiMzNDs7CiYjNDM7CWludCBvayA9IDAsIG5vc3BjID0gMCwgbm90cnVuID0gMCwgb3RoZXIgPSAwOwomIzQzOwlpbnQgaSwgZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNrZWxbaV0gPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW4oKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihza2VsW2ldLCAmIzM0O29wZW4mIzM0OykpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlzbnByaW50Zihza2VsW2ldLSZndDtyb2RhdGEtJmd0O3hhdHRyX25hbWUsCiYjNDM7CQkJIHNpemVvZihza2VsW2ldLSZndDtyb2RhdGEtJmd0O3hhdHRyX25hbWUpLCAmIzM0O2JwZi5sYWJlbF8lZCYjMzQ7LAomIzQzOwkJCSBpKTsKJiM0MzsKJiM0MzsJCWlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgJiMzNDtsb2FkJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJc2tlbFtpXS0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CQlsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS0mZ3Q7cHJvZ3MudGVzdF9pbml0X2lub2RlX3hhdHRyKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGVfZmlsZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGVzdAomIzQzOwkgKiB4YXR0ciBidWRnZXQgYWNjb3VudGluZyB3aXRoIC1FTk9TUEMuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDs9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJlcyA9IHNrZWxbaV0tJmd0O2RhdGEtJmd0O2luaXRfcmVzdWx0OwomIzQzOwomIzQzOwkJaWYgKCFza2VsW2ldLSZndDtic3MtJmd0O2hvb2tfcmFuIHx8IHJlcyA9PSAtRU9QTk9UU1VQUCkKJiM0MzsJCQlub3RydW4mIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAocmVzID09IDApCiYjNDM7CQkJb2smIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAocmVzID09IC1FTk9TUEMpCiYjNDM7CQkJbm9zcGMmIzQzOyYjNDM7OwomIzQzOwkJZWxzZQomIzQzOwkJCW90aGVyJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobm90cnVuID09IElOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDEpIHsKJiM0MzsJCXByaW50ZigmIzM0OyVzOlNLSVA6aG9vayBub3QgaW52b2tlZCBvciBmcyBsYWNrcyBMU00gaW5pdCB4YXR0cnNcbiYjMzQ7LAomIzQzOwkJICAgICAgIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsICYjMzQ7c2xvdHNfd2l0aGluX2J1ZGdldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKG5vc3BjLCAxLCAmIzM0O3Nsb3Rfb3Zlcl9idWRnZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShvdGhlciwgMCwgJiMzNDt1bmV4cGVjdGVkX3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDs9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7CiYjNDM7CQl0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7CiYjNDM7CX0KJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX3Nsb3QpOwomIzQzO30KJiM0MzsKIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIHsKIAkvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi8KQEAgLTI4OCw0ICYjNDM7NDM4LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIAogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZnN2ZXJpdHkmIzM0OykpCiAJCXRlc3RfZnN2ZXJpdHkoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpbml0X2lub2RlX3hhdHRyJiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0JiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jZTNkOGQzOWRlOWNhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jCkBAIC0wLDAgJiM0MzsxLDMzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfa2Z1bmNzLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztfX3UzMiBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBob29rX3JhbjsKJiM0MztpbnQgaW5pdF9yZXN1bHQgPSAtMTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyIHhhdHRyX25hbWVbMTZdID0gJiMzNDticGYudGVzdF9sYWJlbCYjMzQ7OwomIzQzO2NoYXIgeGF0dHJfdmFsdWVbXSA9ICYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwJiMzNDs7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHZhbHVlX3B0cjsKJiM0MzsJX191MzIgcGlkOwomIzQzOwomIzQzOwlwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJaWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWhvb2tfcmFuID0gMTsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwlpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTMzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gdGhlIE5ldyBCUEYgWGF0dHIgS2Z1bmMgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYWxsb3cgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgcG93ZXJmdWwuIFRoZSBwYXRjaCBpcyBmYWlybHkgYnJvYWQsIHVwZGF0aW5nIHNldmVyYWwgc2VjdXJpdHkgc3Vic3lzdGVtcyB0byBhY2NvbW1vZGF0ZSB0aGlzIGNoYW5nZS4gVGhleSYjMzk7dmUgb3B0ZWQgZm9yIGEgYHN0cnVjdCBsc21feGF0dHJzYCB0byBtYW5hZ2UgdGhlc2UgYXR0cmlidXRlcyBpbnN0ZWFkIG9mIHRoZSByYXcgYXJyYXkgcHJldmlvdXNseSB1c2VkLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbWFpbnRhaW5hYmlsaXR5LiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSB1cGRhdGVkIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3IHN0cnVjdHVyZSBhbmQgYSBuZXcgZnVuY3Rpb24sIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhpcyBuZXcga2Z1bmMuCgpMZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgb2YgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBpcyBpbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQganVzdCBkZWxlZ2F0ZXMgdG8gYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAuIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBub3cgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBzZWN1cml0eS9zZWN1cml0eS5jYCB0byBjb250YWluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoZSBvdGhlciBzdWJzeXN0ZW1zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgYWxzbyB1cGRhdGVzIGBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNgLCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgdG8gdXNlIHRoZSBgc3RydWN0IGxzbV94YXR0cnNgLgoKVGhpcyBjZXJ0YWlubHkgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgcGF0Y2gsIGFuZCByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHRob3NlIGtleSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgZnV6emluZy4gV2Ugc2hvdWxkIHplcm8gaW4gb246CiogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgCiogICBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYAoqICAgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgCgpCZWZvcmUgd2UgbW92ZSBvbiwgSSB3YW50IHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgdG8gd29yay4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGZzL2JwZl9mc19rZnVuY3MuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZzX2tmdW5jcy5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEyOT1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVx0XHQmIzQzOz0gem9uZWZzL1xuZnMvTWFrZWZpbGU6MTMwOm9iai0kKENPTkZJR19CUEZfTFNNKVx0XHQmIzQzOz0gYnBmX2ZzX2tmdW5jcy5vXG5mcy9NYWtlZmlsZS0xMzEtb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXHQmIzQzOz0gcmVzY3RybC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBMU00gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIEJQRiBMU00gaXNzdWUsIGFuZCBpdCBzZWVtcyBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIE1ha2VzIHNlbnNlLiBCZWZvcmUgSSBkaXZlIGRlZXBlciwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIGNvcnJlY3QgY29uZmlnIG9wdGlvbiB0byBiZSBmb2N1c2luZyBvbi4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIHJlZCBoZXJyaW5nLiBUaW1lIHRvIGNyYWNrIG9wZW4gYHNlY3VyaXR5L2JwZi9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBgQ09ORklHX0JQRl9MU01gIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGRvdWJsZS1jaGVjayB0aGVzZSB0aGluZ3Mgd2hlbiBkZWFsaW5nIHdpdGggc2VjdXJpdHkgZmVhdHVyZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ibGVtIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3QgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHNwZWNpZmljIEJQRiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGNvbnRleHQsIHRoYXQgdGhlIG1vc3QgcmVsZXZhbnQgaW5mb3JtYXRpb24gbWlnaHQgcmVzaWRlIHdpdGhpbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQmIzM5O3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBCUEYgc3Vic3lzdGVtIGFyZSBsYWlkIG91dC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2VseSBhcm91bmQgbGluZSA5MiwgcGVydGFpbmluZyB0byB0aGUgYXJlYSBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBrbm93IGFib3V0LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsIHRvIGZpbmQgb3V0IGFsbCBvZiB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcdCAgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHNpZGUtY2hhbm5lbCB2dWxuZXJhYmlsaXRpZXMgb24gdW5taXRpZ2F0ZWRcbiAgODY6XHRcdCAgYWZmZWN0ZWQgaGFyZHdhcmUuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuXG4gIDg5Olx0XG4gIDkwOlx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJQRl9MU01cbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAgOTU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgOTY6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTc6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuICA5ODpcdFx0aGVscFxuICA5OTpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTAwOlx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gMTAzOlx0XG4gMTA0Olx0ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY2MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBMU00gUGF0Y2ggRGVwZW5kZW5jaWVzIGFuZCBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgQlBGX0xTTWAgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzOyBpdCBsb29rcyBsaWtlIGBCUEZfTFNNYCByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4aXN0aW5nIHNlY3VyaXR5IGluZnJhc3RydWN0dXJlIGlzIGJlaW5nIGludGVncmF0ZWQgd2l0aCBCUEYuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgaXQgaXMgY29tcGlsZWQgaWYgYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgZXhwZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoZSBwYXRjaCB0b3VjaGVzIGBFVk1gLCBgU0VMSU5VWGAsIGFuZCBgU01BQ0tgIGNvbmZpZ3VyYXRpb25zLCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBzdGVtIGZyb20gdGhlIG5ldyBCUEYga2Z1bmMuIElmIEkgZW5hYmxlIGBCUEZfTFNNYCwgSSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvbiB0ZXN0aW5nIHRoYXQga2Z1bmMmIzM5O3MgaW50ZWdyYXRpb24uIFRoZSBtb2RpZmljYXRpb24gdG8gdGhvc2Ugc2VjdXJpdHkgbW9kdWxlcyBhcHBlYXJzIHRvIGJlIGFib3V0IGhvb2tpbmcgaW50byBgaW5vZGVfaW5pdF9zZWN1cml0eWAgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBnZXQgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBvbiB0aGUgY2hhbmdlcyB0aGVyZS4gU28sIHRvIGVuc3VyZSBJIGNhbiBjb21wcmVoZW5zaXZlbHkgdGVzdCB0aG9zZSBjaGFuZ2VzLCBlbmFibGluZyBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgRVZNYCBpcyBhIGdvb2QgaWRlYS4gVGhhdCB3aWxsIGVuc3VyZSB0aGUgbW9kaWZpZWQgaG9va3MgYXJlIHRlc3RlZC4KCk5leHQsIEkgbmVlZCB0byBzZWUgaG93IHRoZSB4YXR0ciBmdW5jdGlvbnMgY29tZSBpbnRvIHBsYXkuIEkmIzM5O2xsIGxvb2sgYXQgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLiBPa2F5LCBpdCYjMzk7cyBkZWZpbmVkIGFuZCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19TRUNVUklUWWAgaXMgc2V0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgQlBGIHNpZGUuIEkmIzM5O2xsIGV4YW1pbmUgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBpbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYC4gQWgsIHRoZXJlIGl0IGlzLCBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX0xTTWAsIGFzIGV4cGVjdGVkLiBTbywgaXQgY2FsbHMgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAuCgpUbyBzdW1tYXJpemUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQ6CgoqICAgYEJQRl9MU01gCiogICBgU0VDVVJJVFlgCiogICBgQlBGX1NZU0NBTExgCiogICBgQlBGX0pJVGAKCkFuZCBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBJJiMzOTttIG1pc3NpbmcuCgpUaGUgY3JpdGljYWwgcGllY2VzIG9mIHRoaXMgYXJlOgoKKiAgIGBicGZfaW5pdF9pbm9kZV94YXR0cmAKKiAgIGBzZWN1cml0eV9sc214YXR0cl9hZGRgCiogICBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAKCkZpbmFsbHksIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIHRob3NlIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vayBhbmQgdXNlcyBgbHNtX2dldF94YXR0cl9zbG90YC4gT2gsIGFuZCBgbHNtX2dldF94YXR0cl9zbG90YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYGluY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhgLiBJJiMzOTtsbCB3YW50IHRvIGVuYWJsZSB0aG9zZSBjb25maWdzIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlIHVwZGF0ZXMgYXJlIGNvcnJlY3QsIHNvOgoKKiAgIGBTRUNVUklUWV9TRUxJTlVYYAoqICAgYFNFQ1VSSVRZX1NNQUNLYAoqICAgYEVWTWAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGNvbXByZWhlbnNpdmUgdGVzdCBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVWTSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYEVWTWAuIFRoaXMgaXMgdGhlIGp1bXBpbmctb2ZmIHBvaW50OyBiZWZvcmUgSSBjb25zaWRlciBhbnkgZGVlcGVyIGRpYWdub3N0aWNzIG9yIHBvdGVudGlhbCBpc3N1ZXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgYXMgSSB3b3VsZCBleHBlY3QuIFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycz8gQXJlIHRoZSBnYXMgbGltaXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgYW50aWNpcGF0ZWQgdHJhbnNhY3Rpb24gbG9hZD8gSXMgdGhlIGJsb2NrIHRpbWUgY29uZmlndXJlZCBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgdGhlIGNvbnNlbnN1cyBtZWNoYW5pc20gc2V0dGluZ3M/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBvciBvdmVycmlkZXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyBwZXJmb3JtYW5jZSBvciBiZWhhdmlvcj8gSSB3YW50IHRvIGtub3cgZXZlcnl0aGluZy4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIGlzIGEgcHJvZHVjdCBvZiBzb21lIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVWTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzoyOmNvbmZpZyBFVk1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtFVk0gc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xNi1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzoxNzpjb25maWcgRVZNX0FUVFJfRlNVVUlEXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMTgtXHRib29sIFwmIzM0O0ZTVVVJRCAodmVyc2lvbiAyKVwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zMC1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMTpjb25maWcgRVZNX0VYVFJBX1NNQUNLX1hBVFRSU1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtBZGRpdGlvbmFsIFNNQUNLIHhhdHRyc1wmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy00Ny1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo0ODpjb25maWcgRVZNX0FERF9YQVRUUlNcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy00OS1cdGJvb2wgXCYjMzQ7QWRkIGFkZGl0aW9uYWwgRVZNIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXQgcnVudGltZVwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy01OC1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo1OTpjb25maWcgRVZNX0xPQURfWDUwOVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTYwLVx0Ym9vbCBcJiMzNDtMb2FkIGFuIFg1MDkgY2VydGlmaWNhdGUgb250byB0aGUgJiMzOTsuZXZtJiMzOTsgdHJ1c3RlZCBrZXlyaW5nXCYjMzQ7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTcwLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjcxOmNvbmZpZyBFVk1fWDUwOV9QQVRIXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNzItXHRzdHJpbmcgXCYjMzQ7RVZNIFg1MDkgY2VydGlmaWNhdGUgcGF0aFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgUXVpY2sgU2NhbiBmb3IgdGhlIE9idmlvdXMqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgaW50byBteSBtaW5kIGlzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBXaGVuIGRlYWxpbmcgd2l0aCBzZWN1cml0eSwgeW91IGFsd2F5cyBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0cywgdGhlIGxvdy1oYW5naW5nIGZydWl0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgU0VDVVJJVFlfU01BQ0tgLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBpdCBieSBteSBtZW50YWwgY2hlY2tsaXN0LiBJcyBpdCBhIHZhcmlhYmxlLCBhIGZ1bmN0aW9uLCBhIG1vZHVsZSwgYSBsaWJyYXJ5PyBJcyBpdCBzb21ldGhpbmcgaW50ZXJuYWwgb3IgZXh0ZXJuYWw/IElzIHRoaXMgc29tZXRoaW5nIEkmIzM5O3ZlIHdvcmtlZCB3aXRoIGJlZm9yZT8gSXMgdGhlcmUgYSBrbm93biB2dWxuZXJhYmlsaXR5LCBhIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIGEgY29tbW9uIG1pc2ludGVycHJldGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hbWU/IFRoaXMgaXMgYmFzaWMgdHJpYWdlLCBidXQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHByZXZlbnQgZ2V0dGluZyBzaWRlLXRyYWNrZWQgYnkgc29tZXRoaW5nIHRyaXZpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWV9TTUFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zbWFjay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0JSSU5HVVBcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTctXHRib29sIFwmIzM0O1JlcG9ydGluZyBvbiBhY2Nlc3MgZ3JhbnRlZCBieSBTbWFjayBydWxlc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzMtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjM0OmNvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVJcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXHRib29sIFwmIzM0O1BhY2tldCBtYXJraW5nIHVzaW5nIHNlY21hcmtzIGZvciBuZXRmaWx0ZXJcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ0LVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDYtXHRib29sIFwmIzM0O1RyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDg1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBrZnVuYyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2VybmVsIGZ1bmN0aW9uLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gYWxsb3cgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBwaGFzZS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaGlnaGxpZ2h0IHRoYXQgdGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgZm9yIGludmVzdGlnYXRpb24gd2lsbCBiZTogYGJwZl9pbml0X2lub2RlX3hhdHRyYCAob2YgY291cnNlISksIGFsb25nc2lkZSB0aGUgb3RoZXIgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkOiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YC4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBCUEZfTFNNYCwgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEVWTWAuCgpJJiMzOTttIG5vdyB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgZXhpc3Rpbmcgc2VjdXJpdHkgbW9kdWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgaG93IGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAgYmVoYXZlcywgc28gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIExvb2tzIGxpa2UgaW4gYHNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY2AgaXQmIzM5O3MgZGVmaW5lZCBhcyBgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KC4uLilgIC0gc28sIG5vdCBzdGF0aWMuCgpOb3csIHdhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBtb3JlIGNhcmVmdWwuIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgZmFjdCB0aGF0IGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgICppcyogc3RhdGljIChpbiBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgSSYjMzk7bGwgZG91YmxlLWNoZWNrKSwgbWVhbnMgaXQgY291bGQgYmUgaW5saW5lZCwgb3IgbWlnaHQgbm90IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYywgc28gbGV0IG1lIHF1aWNrbHkgZ28gYmFjayBhbmQgY29uZmlybSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI5NDI9c3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjk2Mi1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyOTYzOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI5NjQtXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwMDgtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzAwOTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzAxMC1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTUzPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc1OTEtXHRMU01fSE9PS19JTklUKGlub2RlX2ZyZWVfc2VjdXJpdHksIHNlbGludXhfaW5vZGVfZnJlZV9zZWN1cml0eSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU5MjpcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NTkzOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTk0LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9jcmVhdGUsIHNlbGludXhfaW5vZGVfY3JlYXRlKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTFNNIEhvb2sgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHNlY3VyaXR5IG1vZHVsZSBnZXRzIGluaXRpYWxpemVkLCBhbmQgSSYjMzk7dmUgZ290IGEga2V5IHBvaW50IGluIG1pbmQ6IGJlY2F1c2UgdGhpcyBmdW5jdGlvbiYjMzk7cyBiZWluZyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBMU01fSE9PS19JTklUYCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoZSBjb21waWxlciYjMzk7cyBnb2luZyB0byBpbmxpbmUgaXQuIFRoYXQmIzM5O3MganVzdCB0aGUgbmF0dXJlIG9mIGhvdyBmdW5jdGlvbiBwb2ludGVycyB3b3JrLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBkZWVwIGRpdmUuCgpHaXZlbiB0aGF0LCBJIHRoaW5rIHRoZSBjcml0aWNhbCBhcmVhcyB0byBzY3J1dGluaXplIGFyZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBhbmQgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YC4gVGhvc2UgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzIGZvciB3aGVyZSB0aGUgYWN0dWFsIGluaXRpYWxpemF0aW9uIGxvZ2ljIHJlc2lkZXMsIGFuZCB3aGVyZSBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhlIGNvcmUgbWVjaGFuaXNtcy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkmIzM5O20ganVzdCBnb2luZyB0byBkb3VibGUtY2hlY2sgYHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlgLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG90aGVyIHNlY3VyaXR5IG1vZHVsZSBvdmVycmlkZXMgdGhpcyBtb2R1bGUmIzM5O3MgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9OTg0PXhhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMDEtLyoqXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMDAyOiAqIHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkgLSBjb3B5IG91dCB0aGUgc21hY2sgZnJvbSBhbiBpbm9kZVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAwMy0gKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAwOS0gKi9cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMTA6c3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAxMS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9NTEyMT1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzbWFja19ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTM4LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9hbGxvY19zZWN1cml0eSwgc21hY2tfaW5vZGVfYWxsb2Nfc2VjdXJpdHkpLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6NTEzOTpcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTQwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzbWFja19pbm9kZV9saW5rKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODEKCQkJCQkJCW91dHB1dDogMjEzCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIGNsZWFyIGRpcmVjdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBhbmQgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YC4gSSBrbm93IGV4YWN0bHkgd2hhdCB0aGVzZSB0aGluZ3MgYXJlLgoKUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBJIG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25maWdzIGluIGFueSB0ZXN0aW5nIHNjZW5hcmlvOiBgQlBGX0xTTWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIGBFVk1gLiBBbmQsIHdhaXQsIEkgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcyBkZXBlbmRlbmNpZXMuIE5vdGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBCUEYga2Z1bmM6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIFRoaXMgaXMga2V5LiBJdCYjMzk7cyBnaXZpbmcgQlBGIExTTSBwcm9ncmFtcyB0aGUgY2FwYWJpbGl0eSB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbGl0eSBhZGRpdGlvbiwgYW5kIG9wZW5zIG5ldyBhdHRhY2sgc3VyZmFjZXMuIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYHN0cnVjdCBsc21feGF0dHJzYCBpbnN0ZWFkIG9mIGEgcmF3IGFycmF5IC0gaW1wcm92aW5nIHRoZSBhcmNoaXRlY3R1cmUuIEFuZCwgaXQgdXBkYXRlcyBzZXZlcmFsIExTTXMgdG8gdXNlIGl0OiBgZXZtYCwgYHNlbGludXhgLCBhbmQgYHNtYWNrYC4gVGhlIG5ldyBmdW5jdGlvbiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgY2FsbGVkIGJ5IHRoZSBuZXcga2Z1bmMsIHdhcnJhbnRzIHNjcnV0aW55LgoKSW4gc2hvcnQsIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBpbnRyb2R1Y2VzIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCwgdGhlcmVmb3JlLCBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCB0byBkb2N1bWVudCBteSBhbmFseXNpcyBhbmQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7RVZNJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7RVZNJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MDAuNjE0MzE3MTc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4NzE0NDE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkVWTVwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5pdF9pbm9kZV94YXR0clwiLFxuICAgIFwic2VjdXJpdHlfbHNteGF0dHJfYWRkXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgdGhhdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIGR1cmluZyBpbm9kZSBjcmVhdGlvbi4gSXQgYWxzbyByZWZhY3RvcnMgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHRvIHVzZSBhIG5ldyBgc3RydWN0IGxzbV94YXR0cnNgIGFuZCB1cGRhdGVzIEVWTSwgU0VMaW51eCwgYW5kIFNNQUNLIHRvIHVzZSBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlY3VyaXR5IGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjAwLjYxNDMyNjkzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNzgwNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTk4MDEzMTcxOWMwNTEzZmYzYjczYjM5ODI1MWE3MTMwMDIwNDRiOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA5OjIzOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0XFxuLS0tIGEvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuKysrIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuQEAgLTExLDcgKzExLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXR0ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9sc20uaFxcdTAwM2VcXG4gXFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gXFxuQEAgLTM3OSw2ICszODEsNDQgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9kYXRhX2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gZF9yZWFsX2lub2RlKGZpbGVfZGVudHJ5KGZpbGUpKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxcbisgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dFxcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcXFwiYnBmLmZpbGVfbGFiZWxcXFwiKVxcbisgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlXFxuKyAqXFxuKyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdFxcbisgKiAgICAgICAgIHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbiwgbmVnYXRpdmUgZXJyb3Igb24gb3RoZXIgZmFpbHVyZXMuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xcbitcXHRjb25zdCB2b2lkICp2YWx1ZTtcXG4rXFx0dTMyIHZhbHVlX2xlbjtcXG4rXFxuK1xcdGlmICghbmFtZV9fc3RyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCxcXG4rXFx0XFx0ICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdGlmICgheGF0dHJzLVxcdTAwM2V4YXR0cnMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XFxuK1xcdHZhbHVlID0gX19icGZfZHlucHRyX2RhdGEodmFsdWVfcHRyLCB2YWx1ZV9sZW4pO1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBzZWN1cml0eV9sc214YXR0cl9hZGQoeGF0dHJzLCBMU01fSURfQlBGLFxcbitcXHRcXHRcXHRcXHQgICAgIG5hbWVfX3N0ciArIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxLFxcbitcXHRcXHRcXHRcXHQgICAgIHZhbHVlLCB2YWx1ZV9sZW4pO1xcbit9XFxuK1xcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbiBcXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG5AQCAtMzkwLDYgKzQzMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZXRfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfZGF0YV9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cilcXG4gQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXFxuIFxcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaCBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXFxuaW5kZXggZGRhMjcyZDc4ZjAxMy4uNGJmMzUwZWYwMmY0OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXFxuQEAgLTEyLDYgKzEyLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcXHUwMDNlXFxuIFxcbisvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cXG4rI2RlZmluZSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIDRcXG4rXFxuICNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbiBcXG4gZXh0ZXJuIGJvb2wgYnBmX2xzbV9pbml0aWFsaXplZCBfX3JvX2FmdGVyX2luaXQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuaW5kZXggOTEzZjQ1NzNiMjAzOC4uNTI4ZjM2MGYzMzA4ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ldm0uaFxcbkBAIC0xMiw2ICsxMiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlZ3JpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhdHRyLmhcXHUwMDNlXFxuIFxcbitzdHJ1Y3QgbHNtX3hhdHRycztcXG4rXFxuICNpZmRlZiBDT05GSUdfRVZNXFxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcXG4gZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbkBAIC0yMSw4ICsyMyw4IEBAIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXFxuIFxcdFxcdCBjb25zdCBjaGFyICp4YXR0cl92YWx1ZSwgc2l6ZV90IHhhdHRyX3ZhbHVlX2xlbik7XFxuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0XFx0XFx0ICAgIGludCAqeGF0dHJfY291bnQpO1xcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTtcXG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xcbiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7XFxuIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsXFxuQEAgLTYzLDggKzY1LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGludCAqeGF0dHJfY291bnQpXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uNWIyZGU3ODY1Y2U4MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTExNiw4ICsxMTYsOCBAQCBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2FsbG9jX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KVxcbiBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0IGludCAqeGF0dHJfY291bnQpXFxuK1xcdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbmluZGV4IGI0ZjhjYWQ1M2RkYjAuLjdhZmUwNmE4ZDRjNmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcXG5AQCAtMjAwLDIwICsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiAvKipcXG4gICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4XFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEBjdHg6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuICAqXFxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXFxuLSAqIGFuZCBpbmNyZW1lbnQgQHhhdHRyX2NvdW50LlxcbisgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXFx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cXG4rICogeGF0dHIsIGFuZCBpbmNyZW1lbnQgQGN0eC1cXHUwMDNleGF0dHJfY291bnQuXFxuICAqXFxuLSAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAeGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXFx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseSgheGF0dHJzKSlcXG4rXFx0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cXHUwMDNleGF0dHJzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdHJldHVybiBcXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xcbitcXHRyZXR1cm4gXFx1MDAyNmN0eC1cXHUwMDNleGF0dHJzW2N0eC1cXHUwMDNleGF0dHJfY291bnQrK107XFxuIH1cXG4gXFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmOC4uZDM1ZmRlN2FhMTFmMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5AQCAtNjgsNiArNjgsMTEgQEAgc3RydWN0IHdhdGNoO1xcbiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uO1xcbiBzdHJ1Y3QgbHNtX2N0eDtcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzIHtcXG4rXFx0c3RydWN0IHhhdHRyICp4YXR0cnM7XFxuK1xcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcXG4rfTtcXG4rXFxuIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqL1xcbiAjZGVmaW5lIENBUF9PUFRfTk9ORSAweDBcXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cXG5AQCAtNDAxLDYgKzQwNiw5IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4gXFx0XFx0XFx0XFx0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSk7XFxuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lX2V4dHJhLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4rXFx0XFx0XFx0ICBzaXplX3QgdmFsdWVfbGVuKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcXG5AQCAtODk1LDYgKzkwMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZV9leHRyYSxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9icGYvaG9va3MuYyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jXFxuaW5kZXggN2I5OGY1ZDFlMmJlOC4uOGY4YzNkZTMwMzVmMCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9icGYvaG9va3MuY1xcbisrKyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jXFxuQEAgLTMzLDYgKzMzLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2xzbV9pbml0KHZvaWQpXFxuIFxcbiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXFxuK1xcdC5sYnNfeGF0dHJfY291bnQgPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTLFxcbiB9O1xcbiBcXG4gREVGSU5FX0xTTShicGYpID0ge1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcXG5pbmRleCBiNTllM2YxMjFiOGE4Li5iNzE1OGZjNjM1NDNlIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXFxuICAqL1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqbHNtX3hhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXZtX3hhdHRyICp4YXR0cl9kYXRhO1xcbiBcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4gXFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cXHUwMDNleGF0dHJzIDogTlVMTDtcXG4gXFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFxcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XFxuIFxcdC8qXFxuIFxcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXFxuIFxcdCAqIHhhdHRyIHNsb3QuXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uYWU3MjEwMmNkMjliOCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIkxTTTogXFxcIiBmbXRcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9sc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RjYWNoZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuQEAgLTEzMzMsOCArMTMzNCw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbi1cXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xcbi1cXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcXG4rXFx0c3RydWN0IGxzbV94YXR0cnMgeGF0dHJzID0ge307XFxuK1xcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMzQ0LDE1ICsxMzQ1LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXG4gXFx0aWYgKGluaXR4YXR0cnMpIHtcXG4gXFx0XFx0LyogQWxsb2NhdGUgKzEgYXMgdGVybWluYXRvci4gKi9cXG4tXFx0XFx0bmV3X3hhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgKyAxLFxcbi1cXHRcXHRcXHRcXHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCFuZXdfeGF0dHJzKVxcbitcXHRcXHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcXG4rXFx0XFx0aWYgKCF4YXR0cnMueGF0dHJzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcXG4tXFx0XFx0cmV0ID0gc2NhbGwtXFx1MDAzZWhsLVxcdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eGF0dHJfY291bnQpO1xcbitcXHRcXHRyZXQgPSBzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cnMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdC8qXFxuQEAgLTEzNjQsMTggKzEzNjUsMTEzIEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBJZiBpbml0eGF0dHJzKCkgaXMgTlVMTCwgeGF0dHJfY291bnQgaXMgemVybywgc2tpcCB0aGUgY2FsbC4gKi9cXG4tXFx0aWYgKCF4YXR0cl9jb3VudClcXG4rXFx0aWYgKCF4YXR0cnMueGF0dHJfY291bnQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgbmV3X3hhdHRycywgZnNfZGF0YSk7XFxuK1xcdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpO1xcbiBvdXQ6XFxuLVxcdGZvciAoOyB4YXR0cl9jb3VudCBcXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXFxuLVxcdFxcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XFxuLVxcdGtmcmVlKG5ld194YXR0cnMpO1xcbitcXHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFxcdTAwM2UgMDsgeGF0dHJzLnhhdHRyX2NvdW50LS0pXFxuK1xcdFxcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xcbitcXHRrZnJlZSh4YXR0cnMueGF0dHJzKTtcXG4gXFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpO1xcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBsc21feGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKnByZWZpeClcXG4re1xcbitcXHRzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpO1xcbitcXHR1bnNpZ25lZCBpbnQgaSwgbiA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgeGF0dHJzLVxcdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtXFx1MDAzZXhhdHRyc1tpXS5uYW1lO1xcbitcXG4rXFx0XFx0aWYgKG5hbWUgXFx1MDAyNlxcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcXG4rXFx0XFx0XFx0bisrO1xcbitcXHR9XFxuK1xcdHJldHVybiBuO1xcbit9XFxuK1xcbisvKipcXG4rICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcXG4rICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcXG4rICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXFxuKyAqIEBuYW1lX2V4dHJhOiB4YXR0ciBuYW1lIGNvbXBvbmVudHMgYmV5b25kIHRoZSBjYWxsaW5nIExTTSdzIHN0YW5kYXJkXFxuKyAqICAgICAgICAgICAgICB4YXR0ciBzdWZmaXgsIE5VTEwgaWYgdGhlIHN0YW5kYXJkIHN1ZmZpeCBpcyB0aGUgZnVsbCBuYW1lXFxuKyAqIEB2YWx1ZTogeGF0dHIgdmFsdWVcXG4rICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZVxcbisgKlxcbisgKiBDbGFpbSBhbiB4YXR0ciBzbG90IGluIEB4YXR0cnMgb24gYmVoYWxmIG9mIHRoZSBMU00gaWRlbnRpZmllZCBieVxcbisgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEB2YWx1ZS4gVGhlIHhhdHRyIG5hbWUgaXMgYnVpbHQgZnJvbVxcbisgKiB0aGUgc3RhbmRhcmQgeGF0dHIgc3VmZml4IG9mIHRoZSBjYWxsaW5nIExTTSwgZm9sbG93ZWQgYnkgQG5hbWVfZXh0cmEuXFxuKyAqIENhbGxlcnMgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0LlxcbisgKlxcbisgKiBSZXR1cm46IFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdCB4YXR0cnNcXG4rICogICAgICAgICBhdCBpbm9kZSBjcmVhdGlvbiwgLUVOT1NQQyBpZiB0aGUgY2FsbGluZyBMU00ncyBzbG90IGJ1ZGdldCBpc1xcbisgKiAgICAgICAgIGV4aGF1c3RlZCwgbmVnYXRpdmUgdmFsdWVzIG9uIG90aGVyIGVycm9ycy5cXG4rICovXFxuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lX2V4dHJhLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4rXFx0XFx0XFx0ICBzaXplX3QgdmFsdWVfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCB4YXR0ciAqeGF0dHI7XFxuK1xcdHZvaWQgKnhhdHRyX3ZhbHVlO1xcbitcXHRjb25zdCBjaGFyICpzdWZmaXg7XFxuK1xcdHNpemVfdCBzdWZmaXhfbGVuLCBleHRyYV9sZW4sIG5hbWVfbGVuO1xcbitcXG4rXFx0aWYgKCF4YXR0cnMgfHwgIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIFRoZSBmaWxlc3lzdGVtIGRpZCBub3QgcHJvdmlkZSBhbiBpbml0eGF0dHJzIGNhbGxiYWNrLiAqL1xcbitcXHRpZiAoIXhhdHRycy1cXHUwMDNleGF0dHJzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN3aXRjaCAobHNtX2lkKSB7XFxuK1xcdGNhc2UgTFNNX0lEX0JQRjpcXG4rXFx0XFx0aWYgKCFuYW1lX2V4dHJhIHx8ICFuYW1lX2V4dHJhWzBdKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0c3VmZml4ID0gWEFUVFJfQlBGX0xTTV9TVUZGSVg7XFxuK1xcdFxcdGlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgXFx1MDAzZT1cXG4rXFx0XFx0ICAgIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTtcXG4rXFx0ZXh0cmFfbGVuID0gbmFtZV9leHRyYSA/IHN0cmxlbihuYW1lX2V4dHJhKSA6IDA7XFxuK1xcdG5hbWVfbGVuID0gc3VmZml4X2xlbiArIGV4dHJhX2xlbjtcXG4rXFx0aWYgKG5hbWVfbGVuIFxcdTAwM2UgWEFUVFJfTkFNRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuIFxcdTAwM2UgWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cXG4rXFx0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiArIG5hbWVfbGVuICsgMSwgR0ZQX05PV0FJVCk7XFxuK1xcdGlmICgheGF0dHJfdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuLCBzdWZmaXgsIHN1ZmZpeF9sZW4pO1xcbitcXHRpZiAoZXh0cmFfbGVuKVxcbitcXHRcXHRtZW1jcHkoeGF0dHJfdmFsdWUgKyB2YWx1ZV9sZW4gKyBzdWZmaXhfbGVuLCBuYW1lX2V4dHJhLFxcbitcXHRcXHQgICAgICAgZXh0cmFfbGVuKTtcXG4rXFx0KChjaGFyICopeGF0dHJfdmFsdWUpW3ZhbHVlX2xlbiArIG5hbWVfbGVuXSA9ICdcXFxcMCc7XFxuK1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbitcXHRpZiAoIXhhdHRyKSB7XFxuK1xcdFxcdGtmcmVlKHhhdHRyX3ZhbHVlKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdH1cXG4rXFxuK1xcdHhhdHRyLVxcdTAwM2V2YWx1ZSA9IHhhdHRyX3ZhbHVlO1xcbitcXHR4YXR0ci1cXHUwMDNlbmFtZSA9IChjb25zdCBjaGFyICopeGF0dHJfdmFsdWUgKyB2YWx1ZV9sZW47XFxuK1xcdHhhdHRyLVxcdTAwM2V2YWx1ZV9sZW4gPSB2YWx1ZV9sZW47XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbigpIC0gSW5pdGlhbGl6ZSBhbiBhbm9ueW1vdXMgaW5vZGVcXG4gICogQGlub2RlOiB0aGUgaW5vZGVcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggOGQ2OTQ1ZWRhZTdhYS4uMjE1NDRjNzc1YzE3NiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4gXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XFxuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIShzYnNlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQkxBQkVMX01OVCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXHRpZiAoeGF0dHIpIHtcXG4gXFx0XFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjb250ZXh0LCBcXHUwMDI2Y2xlbik7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCBmZjExNTA2OGM1YzA2Li40NTAxMDc4NDMwY2EwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5AQCAtOTgxLDEwICs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxcbit4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4gXFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbGxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcXG4rXFx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcXG4gXFxuIFxcdGlmICgheGF0dHIpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMDAzLDE0ICsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcXG4gICogQGlub2RlOiB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZVxcbiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3RcXG4gICogQHFzdHI6IHVudXNlZFxcbi0gKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgdGhlIGF0dHJpYnV0ZXNcXG4tICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKVxcbisgKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgYXR0cmlidXRlcyBhbmQgdXBkYXRlIGNvdW50XFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBpdCBhbGwgd29ya3Mgb3V0LCAtRU5PTUVNIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5XFxuICAqL1xcbiBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gc21hY2tfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XFxuQEAgLTEwNTcsMjEgKzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRcXHR0cmFuc2ZsYWcgPSBTTUtfSU5PREVfVFJBTlNNVVRFO1xcbiBcXG4tXFx0XFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxcbi1cXHRcXHRcXHRcXHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXFxuLVxcdFxcdFxcdFxcdFRSQU5TX1RSVUUsXFxuLVxcdFxcdFxcdFxcdFRSQU5TX1RSVUVfU0laRVxcbi1cXHRcXHRcXHQpKVxcbitcXHRcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcXG4rXFx0XFx0XFx0XFx0XFx0IFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcXG4rXFx0XFx0XFx0XFx0XFx0IFRSQU5TX1RSVUUsXFxuK1xcdFxcdFxcdFxcdFxcdCBUUkFOU19UUlVFX1NJWkUpKVxcbiBcXHRcXHRcXHRcXHRyYyA9IC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJjID09IDApXFxuLVxcdFxcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcXG4tXFx0XFx0XFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcXG4tXFx0XFx0XFx0ICAgIGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duLFxcbi1cXHRcXHQgICAgIHN0cmxlbihpc3NwLVxcdTAwM2VzbWtfaW5vZGUtXFx1MDAzZXNta19rbm93bilcXG4tXFx0XFx0KSlcXG4rXFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsXFxuK1xcdFxcdFxcdFxcdCBYQVRUUl9TTUFDS19TVUZGSVgsXFxuK1xcdFxcdFxcdFxcdCBpc3NwLVxcdTAwM2VzbWtfaW5vZGUtXFx1MDAzZXNta19rbm93bixcXG4rXFx0XFx0XFx0XFx0IHN0cmxlbihpc3NwLVxcdTAwM2VzbWtfaW5vZGUtXFx1MDAzZXNta19rbm93bikpKVxcbiBcXHRcXHRcXHRyYyA9IC1FTk9NRU07XFxuIGluc3RhbnRfaW5vZGU6XFxuIFxcdGlzc3AtXFx1MDAzZXNta19mbGFncyB8PSAoU01LX0lOT0RFX0lOU1RBTlQgfCB0cmFuc2ZsYWcpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxcbmluZGV4IGFlNzFlOWI2OTA1MTguLjI2MzlmOWY5NDE5NTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcXG5AQCAtOTIsNCArOTIsOSBAQCBleHRlcm4gaW50IGJwZl9zZXRfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbiBcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbiBleHRlcm4gaW50IGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyKSBfX2tzeW0gX193ZWFrO1xcbiBcXG4rc3RydWN0IGxzbV94YXR0cnM7XFxuK2V4dGVybiBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXFxcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcXFwiO1xcbiBcXG5AQCAtMjY4LDYgKzI2OSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxcbiBcXHRyZW1vdmUodGVzdGZpbGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTEsIGVycjtcXG4rXFx0Y2hhciB2YWx1ZV9vdXRbNjRdO1xcbitcXG4rXFx0LyogVGhpcyB0ZXN0IG11c3QgYmUgcnVuIGZyb20gYSBmcyB0aGF0IGNhbGxzXFxuK1xcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKS5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX25ldyA9IFxcXCIvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcXFwiO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZV9maWxlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvYmFibHkgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXMgd2Ugd2lsbCBiZSBsYWJlbGluZyBhIGZpbGVcXG4rXFx0ICogaW4gL2Rldi9zaG0sIGJ1dCBqdXN0IGluIGNhc2Ugd2UgY2hlY2sgaWYgdGhlIGhvb2sgd2FzIGFjdHVhbGx5XFxuK1xcdCAqIGNhbGxlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vob29rX3Jhbikge1xcbitcXHRcXHRwcmludGYoXFxcIiVzOlNLSVA6aW5vZGVfaW5pdF9zZWN1cml0eSBob29rIHdhcyBub3QgaW52b2tlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRycyBhdCBpbm9kZSBjcmVhdGlvbi4gKi9cXG4rXFx0aWYgKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0ID09IC1FT1BOT1RTVVBQKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTFNNIGluaXQgeGF0dHJzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgX19mdW5jX18pO1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFxcXCJpbml0X3Jlc3VsdFxcXCIpO1xcbitcXG4rXFx0LyogaW5pdHhhdHRycyBwcmVwZW5kcyBcXFwic2VjdXJpdHkuXFxcIiB0byB0aGUgbmFtZS4gKi9cXG4rXFx0ZXJyID0gZ2V0eGF0dHIodGVzdGZpbGVfbmV3LCBcXFwic2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcXFwiLCB2YWx1ZV9vdXQsXFxuK1xcdFxcdCAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVOT0RBVEEpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgX19mdW5jX18pO1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmICghQVNTRVJUX0dFKGVyciwgMCwgXFxcImdldHhhdHRyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNleGF0dHJfdmFsdWUpLCBcXFwieGF0dHJfc2l6ZVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsIFxcXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcXFwiLFxcbitcXHRcXHRcXHQgIHNpemVvZihcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIikpLCAwLFxcbitcXHRcXHQgIFxcXCJ4YXR0cl92YWx1ZVxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShmZCk7XFxuK1xcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcXG4rXFx0cmVtb3ZlKHRlc3RmaWxlX25ldyk7XFxuK31cXG4rXFxuKy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovXFxuKyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxcbitcXG4rLypcXG4rICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxcbisgKiB0aGUga2Z1bmMgb25seSBsZXRzIEJQRiBjbGFpbSBJTklUX0lOT0RFX1hBVFRSX01BWCB4YXR0ciBzbG90cyBwZXIgaW5vZGUuXFxuKyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xcbitcXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gXFxcIi9kZXYvc2htL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcXFwiO1xcbitcXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG5vdHJ1biA9IDAsIG90aGVyID0gMDtcXG4rXFx0aW50IGksIGZkID0gLTE7XFxuK1xcbitcXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXFxcIm9wZW5cXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRzbnByaW50Zihza2VsW2ldLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZXhhdHRyX25hbWUsXFxuK1xcdFxcdFxcdCBzaXplb2Yoc2tlbFtpXS1cXHUwMDNlcm9kYXRhLVxcdTAwM2V4YXR0cl9uYW1lKSwgXFxcImJwZi5sYWJlbF8lZFxcXCIsXFxuK1xcdFxcdFxcdCBpKTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXFxcImxvYWRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRza2VsW2ldLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFxuK1xcdFxcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVxcdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVfZmlsZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0ZXN0XFxuK1xcdCAqIHhhdHRyIGJ1ZGdldCBhY2NvdW50aW5nIHdpdGggLUVOT1NQQy5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xcbitcXHRcXHRpbnQgcmVzID0gc2tlbFtpXS1cXHUwMDNlZGF0YS1cXHUwMDNlaW5pdF9yZXN1bHQ7XFxuK1xcbitcXHRcXHRpZiAoIXNrZWxbaV0tXFx1MDAzZWJzcy1cXHUwMDNlaG9va19yYW4gfHwgcmVzID09IC1FT1BOT1RTVVBQKVxcbitcXHRcXHRcXHRub3RydW4rKztcXG4rXFx0XFx0ZWxzZSBpZiAocmVzID09IDApXFxuK1xcdFxcdFxcdG9rKys7XFxuK1xcdFxcdGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKVxcbitcXHRcXHRcXHRub3NwYysrO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG90aGVyKys7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChub3RydW4gPT0gSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpob29rIG5vdCBpbnZva2VkIG9yIGZzIGxhY2tzIExTTSBpbml0IHhhdHRyc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0VRKG9rLCBJTklUX0lOT0RFX1hBVFRSX01BWCwgXFxcInNsb3RzX3dpdGhpbl9idWRnZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKG5vc3BjLCAxLCBcXFwic2xvdF9vdmVyX2J1ZGdldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEob3RoZXIsIDAsIFxcXCJ1bmV4cGVjdGVkX3Jlc3VsdFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7XFxuK1xcdFxcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsW2ldKTtcXG4rXFx0fVxcbitcXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcXG4ge1xcbiBcXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cXG5AQCAtMjg4LDQgKzQzOCwxMCBAQCB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpXFxuIFxcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiZnN2ZXJpdHlcXFwiKSlcXG4gXFx0XFx0dGVzdF9mc3Zlcml0eSgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImluaXRfaW5vZGVfeGF0dHJcXFwiKSlcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0XFxcIikpXFxuK1xcdFxcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZTNkOGQzOWRlOWNhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuY1xcbkBAIC0wLDAgKzEsMzMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IENpc2NvIFN5c3RlbXMsIEluYy4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9rZnVuY3MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rX191MzIgbW9uaXRvcmVkX3BpZDtcXG4raW50IGhvb2tfcmFuO1xcbitpbnQgaW5pdF9yZXN1bHQgPSAtMTtcXG4rXFxuK2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSBcXFwiYnBmLnRlc3RfbGFiZWxcXFwiO1xcbitjaGFyIHhhdHRyX3ZhbHVlW10gPSBcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIjtcXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX2luaXRfc2VjdXJpdHlcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XFxuK1xcdF9fdTMyIHBpZDtcXG4rXFxuK1xcdHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aG9va19yYW4gPSAxO1xcbitcXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG4rXFx0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFxcdTAwMjZ2YWx1ZV9wdHIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MDEuMTQ4MjEzNDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MTMzNzUzNzkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9sc214YXR0cl9hZGRcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlcIixcbiAgICBcImV2bV9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBJdCBhbHNvIHJlZmFjdG9ycyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2AgYW5kIHVwZGF0ZXMgRVZNLCBTRUxpbnV4LCBhbmQgU01BQ0sgdG8gdXNlIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgc2VjdXJpdHkgYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk4MDEzMTcxOWMwNTEzZmYzYjczYjM5ODI1MWE3MTMwMDIwNDRiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDk6MjM6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IGYxODYzYTg5MWRiNjQuLjdiNTUwNzM5MzRlMGIgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTExLDcgKzExLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG5AQCAtMzc5LDYgKzM4MSw0NCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2RhdGFfaW5vZGUoc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gZF9yZWFsX2lub2RlKGZpbGVfZGVudHJ5KGZpbGUpKTtcbiB9XG4gXG4rLyoqXG4rICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG4rICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcImJwZi5maWxlX2xhYmVsXCIpXG4rICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZVxuKyAqXG4rICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIHRoZSBmaWxlc3lzdGVtIGRvZXMgbm90IGFjY2VwdFxuKyAqICAgICAgICAgeGF0dHJzIGF0IGlub2RlIGNyZWF0aW9uLCBuZWdhdGl2ZSBlcnJvciBvbiBvdGhlciBmYWlsdXJlcy5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbitcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICp2YWx1ZV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXZhbHVlX3A7XG4rXHRjb25zdCB2b2lkICp2YWx1ZTtcbitcdHUzMiB2YWx1ZV9sZW47XG4rXG4rXHRpZiAoIW5hbWVfX3N0cilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLFxuK1x0XHQgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0aWYgKCF4YXR0cnMtXHUwMDNleGF0dHJzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHR2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpO1xuK1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiBzZWN1cml0eV9sc214YXR0cl9hZGQoeGF0dHJzLCBMU01fSURfQlBGLFxuK1x0XHRcdFx0ICAgICBuYW1lX19zdHIgKyBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSxcbitcdFx0XHRcdCAgICAgdmFsdWUsIHZhbHVlX2xlbik7XG4rfVxuK1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zOTAsNiArNDMwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9kYXRhX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2luaXRfaW5vZGVfeGF0dHIpXG4gQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG4gXG4gc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaCBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5pbmRleCBkZGEyNzJkNzhmMDEzLi40YmYzNTBlZjAyZjQ4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiBcbisvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cbisjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxuK1xuICNpZmRlZiBDT05GSUdfQlBGX0xTTVxuIFxuIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5pbmRleCA5MTNmNDU3M2IyMDM4Li41MjhmMzYwZjMzMDhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9ldm0uaFxuQEAgLTEyLDYgKzEyLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlZ3JpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhdHRyLmhcdTAwM2VcbiBcbitzdHJ1Y3QgbHNtX3hhdHRycztcbitcbiAjaWZkZWYgQ09ORklHX0VWTVxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtMjEsOCArMjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXHRcdCBjb25zdCBjaGFyICp4YXR0cl92YWx1ZSwgc2l6ZV90IHhhdHRyX3ZhbHVlX2xlbik7XG4gaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0ICAgIGludCAqeGF0dHJfY291bnQpO1xuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxuQEAgLTYzLDggKzY1LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcbiBcbiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0XHQgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjViMmRlNzg2NWNlODEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMTYsOCArMTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4rXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuK1x0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuaW5kZXggYjRmOGNhZDUzZGRiMC4uN2FmZTA2YThkNGM2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbkBAIC0yMDAsMjAgKzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiAvKipcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcbi0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnNcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXG4rICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiAgKlxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXG4rICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAY3R4LVx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cbisgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVx1MDAzZXhhdHRyX2NvdW50LlxuICAqXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAY3R4LVx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICAgICAgIGludCAqeGF0dHJfY291bnQpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxuIHtcbi1cdGlmICh1bmxpa2VseSgheGF0dHJzKSlcbitcdGlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtXHUwMDNleGF0dHJzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xuK1x0cmV0dXJuIFx1MDAyNmN0eC1cdTAwM2V4YXR0cnNbY3R4LVx1MDAzZXhhdHRyX2NvdW50KytdO1xuIH1cbiBcbiAjZW5kaWYgLyogISBfX0xJTlVYX0xTTV9IT09LU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5kMzVmZGU3YWExMWYwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC02OCw2ICs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcbiBzdHJ1Y3QgbHNtX2N0eDtcbiBcbitzdHJ1Y3QgbHNtX3hhdHRycyB7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbitcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcbit9O1xuK1xuIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqL1xuICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MFxuIC8qIElmIGNhcGFibGUgc2hvdWxkIGF1ZGl0IHRoZSBzZWN1cml0eSByZXF1ZXN0ICovXG5AQCAtNDAxLDYgKzQwNiw5IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiBcdFx0XHRcdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpO1xuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcbitcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWVfZXh0cmEsIGNvbnN0IHZvaWQgKnZhbHVlLFxuK1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbik7XG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuQEAgLTg5NSw2ICs5MDMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lX2V4dHJhLFxuK1x0XHRcdFx0XHRjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDdiOThmNWQxZTJiZTguLjhmOGMzZGUzMDM1ZjAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9icGYvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbkBAIC0zMyw2ICszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4rXHQubGJzX3hhdHRyX2NvdW50ID0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyxcbiB9O1xuIFxuIERFRklORV9MU00oYnBmKSA9IHtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbmluZGV4IGI1OWUzZjEyMWI4YTguLmI3MTU4ZmM2MzU0M2UgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgKzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogZXZtX2lub2RlX2luaXRfc2VjdXJpdHkgLSBpbml0aWFsaXplcyBzZWN1cml0eS5ldm0gSE1BQyB2YWx1ZVxuICAqL1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbiBcdGJvb2wgZXZtX3Byb3RlY3RlZF94YXR0cnMgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbitcdHhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLVx1MDAzZXhhdHRycyA6IE5VTEw7XG4gXHRpZiAoIShldm1faW5pdGlhbGl6ZWQgXHUwMDI2IEVWTV9JTklUX0hNQUMpIHx8ICF4YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwODcsNyArMTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuK1x0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KGxzbV94YXR0cnMpO1xuIFx0LypcbiBcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXG4gXHQgKiB4YXR0ciBzbG90LlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCA3MWFlYThmZGYwMTQyLi5hZTcyMTAyY2QyOWI4IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIFwiTFNNOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RjYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzMzLDggKzEzMzQsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpXG4ge1xuIFx0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4tXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xuLVx0aW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7XG4rXHRzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTtcbitcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEzNDQsMTUgKzEzNDUsMTUgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gXHRpZiAoaW5pdHhhdHRycykge1xuIFx0XHQvKiBBbGxvY2F0ZSArMSBhcyB0ZXJtaW5hdG9yLiAqL1xuLVx0XHRuZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXG4tXHRcdFx0XHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcbi1cdFx0aWYgKCFuZXdfeGF0dHJzKVxuK1x0XHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXG4rXHRcdFx0XHRcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcbitcdFx0aWYgKCF4YXR0cnMueGF0dHJzKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcbi1cdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsIG5ld194YXR0cnMsXG4tXHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cl9jb3VudCk7XG4rXHRcdHJldCA9IHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cnMpO1xuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdC8qXG5AQCAtMTM2NCwxOCArMTM2NSwxMTMgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHR9XG4gXG4gXHQvKiBJZiBpbml0eGF0dHJzKCkgaXMgTlVMTCwgeGF0dHJfY291bnQgaXMgemVybywgc2tpcCB0aGUgY2FsbC4gKi9cbi1cdGlmICgheGF0dHJfY291bnQpXG4rXHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcbitcdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpO1xuIG91dDpcbi1cdGZvciAoOyB4YXR0cl9jb3VudCBcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcbi1cdFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcbi1cdGtmcmVlKG5ld194YXR0cnMpO1xuK1x0Zm9yICg7IHhhdHRycy54YXR0cl9jb3VudCBcdTAwM2UgMDsgeGF0dHJzLnhhdHRyX2NvdW50LS0pXG4rXHRcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuK1x0a2ZyZWUoeGF0dHJzLnhhdHRycyk7XG4gXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpO1xuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciAqcHJlZml4KVxuK3tcbitcdHNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7XG4rXHR1bnNpZ25lZCBpbnQgaSwgbiA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4YXR0cnMtXHUwMDNleGF0dHJfY291bnQ7IGkrKykge1xuK1x0XHRjb25zdCBjaGFyICpuYW1lID0geGF0dHJzLVx1MDAzZXhhdHRyc1tpXS5uYW1lO1xuK1xuK1x0XHRpZiAobmFtZSBcdTAwMjZcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcbitcdFx0XHRuKys7XG4rXHR9XG4rXHRyZXR1cm4gbjtcbit9XG4rXG4rLyoqXG4rICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcbisgKiBAeGF0dHJzOiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rc1xuKyAqIEBsc21faWQ6IExTTV9JRF8qIHZhbHVlIGlkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIExTTVxuKyAqIEBuYW1lX2V4dHJhOiB4YXR0ciBuYW1lIGNvbXBvbmVudHMgYmV5b25kIHRoZSBjYWxsaW5nIExTTSdzIHN0YW5kYXJkXG4rICogICAgICAgICAgICAgIHhhdHRyIHN1ZmZpeCwgTlVMTCBpZiB0aGUgc3RhbmRhcmQgc3VmZml4IGlzIHRoZSBmdWxsIG5hbWVcbisgKiBAdmFsdWU6IHhhdHRyIHZhbHVlXG4rICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZVxuKyAqXG4rICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbisgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEB2YWx1ZS4gVGhlIHhhdHRyIG5hbWUgaXMgYnVpbHQgZnJvbVxuKyAqIHRoZSBzdGFuZGFyZCB4YXR0ciBzdWZmaXggb2YgdGhlIGNhbGxpbmcgTFNNLCBmb2xsb3dlZCBieSBAbmFtZV9leHRyYS5cbisgKiBDYWxsZXJzIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC5cbisgKlxuKyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgaWYgdGhlIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWNjZXB0IHhhdHRyc1xuKyAqICAgICAgICAgYXQgaW5vZGUgY3JlYXRpb24sIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJ3Mgc2xvdCBidWRnZXQgaXNcbisgKiAgICAgICAgIGV4aGF1c3RlZCwgbmVnYXRpdmUgdmFsdWVzIG9uIG90aGVyIGVycm9ycy5cbisgKi9cbitpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4rXHRcdFx0ICBjb25zdCBjaGFyICpuYW1lX2V4dHJhLCBjb25zdCB2b2lkICp2YWx1ZSxcbitcdFx0XHQgIHNpemVfdCB2YWx1ZV9sZW4pXG4re1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cjtcbitcdHZvaWQgKnhhdHRyX3ZhbHVlO1xuK1x0Y29uc3QgY2hhciAqc3VmZml4O1xuK1x0c2l6ZV90IHN1ZmZpeF9sZW4sIGV4dHJhX2xlbiwgbmFtZV9sZW47XG4rXG4rXHRpZiAoIXhhdHRycyB8fCAhdmFsdWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogVGhlIGZpbGVzeXN0ZW0gZGlkIG5vdCBwcm92aWRlIGFuIGluaXR4YXR0cnMgY2FsbGJhY2suICovXG4rXHRpZiAoIXhhdHRycy1cdTAwM2V4YXR0cnMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3dpdGNoIChsc21faWQpIHtcbitcdGNhc2UgTFNNX0lEX0JQRjpcbitcdFx0aWYgKCFuYW1lX2V4dHJhIHx8ICFuYW1lX2V4dHJhWzBdKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRzdWZmaXggPSBYQVRUUl9CUEZfTFNNX1NVRkZJWDtcbitcdFx0aWYgKGxzbV94YXR0cnNfdXNlZCh4YXR0cnMsIFhBVFRSX0JQRl9MU01fU1VGRklYKSBcdTAwM2U9XG4rXHRcdCAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxuK1x0XHRcdHJldHVybiAtRU5PU1BDO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpO1xuK1x0ZXh0cmFfbGVuID0gbmFtZV9leHRyYSA/IHN0cmxlbihuYW1lX2V4dHJhKSA6IDA7XG4rXHRuYW1lX2xlbiA9IHN1ZmZpeF9sZW4gKyBleHRyYV9sZW47XG4rXHRpZiAobmFtZV9sZW4gXHUwMDNlIFhBVFRSX05BTUVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gXHUwMDNlIFhBVFRSX1NJWkVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgKyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovXG4rXHR4YXR0cl92YWx1ZSA9IGttYWxsb2ModmFsdWVfbGVuICsgbmFtZV9sZW4gKyAxLCBHRlBfTk9XQUlUKTtcbitcdGlmICgheGF0dHJfdmFsdWUpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcbitcdG1lbWNweSh4YXR0cl92YWx1ZSArIHZhbHVlX2xlbiwgc3VmZml4LCBzdWZmaXhfbGVuKTtcbitcdGlmIChleHRyYV9sZW4pXG4rXHRcdG1lbWNweSh4YXR0cl92YWx1ZSArIHZhbHVlX2xlbiArIHN1ZmZpeF9sZW4sIG5hbWVfZXh0cmEsXG4rXHRcdCAgICAgICBleHRyYV9sZW4pO1xuK1x0KChjaGFyICopeGF0dHJfdmFsdWUpW3ZhbHVlX2xlbiArIG5hbWVfbGVuXSA9ICdcXDAnO1xuK1xuK1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbitcdGlmICgheGF0dHIpIHtcbitcdFx0a2ZyZWUoeGF0dHJfdmFsdWUpO1xuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcdH1cbitcbitcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4rXHR4YXR0ci1cdTAwM2VuYW1lID0gKGNvbnN0IGNoYXIgKil4YXR0cl92YWx1ZSArIHZhbHVlX2xlbjtcbitcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlXG4gICogQGlub2RlOiB0aGUgaW5vZGVcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDhkNjk0NWVkYWU3YWEuLjIxNTQ0Yzc3NWMxNzYgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTI5NjIsNyArMjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXG4gXG4gc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgY3JlZF9zZWN1cml0eV9zdHJ1Y3QgKmNyc2VjID0gc2VsaW51eF9jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XG5AQCAtMjk5Miw3ICsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIShzYnNlYy1cdTAwM2VmbGFncyBcdTAwMjYgU0JMQUJFTF9NTlQpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXHRpZiAoeGF0dHIpIHtcbiBcdFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2Y29udGV4dCwgXHUwMDI2Y2xlbik7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggZmYxMTUwNjhjNWMwNi4uNDUwMTA3ODQzMGNhMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTk4MSwxMCArOTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuIFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbGxlbilcbiB7XG4tXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXG4gXHRpZiAoIXhhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDAzLDE0ICsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbisgKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgYXR0cmlidXRlcyBhbmQgdXBkYXRlIGNvdW50XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSdzIG5vIG1lbW9yeVxuICAqL1xuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHR0cmFuc2ZsYWcgPSBTTUtfSU5PREVfVFJBTlNNVVRFO1xuIFxuLVx0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHRcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbi1cdFx0XHRcdFRSQU5TX1RSVUUsXG4tXHRcdFx0XHRUUkFOU19UUlVFX1NJWkVcbi1cdFx0XHQpKVxuK1x0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuK1x0XHRcdFx0XHQgVFJBTlNfVFJVRSxcbitcdFx0XHRcdFx0IFRSQU5TX1RSVUVfU0laRSkpXG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChyYyA9PSAwKVxuLVx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcbi1cdFx0XHQgICAgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuLVx0XHQgICAgIHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pXG4tXHRcdCkpXG4rXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcbitcdFx0XHRcdCBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4rXHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxOC4uMjYzOWY5Zjk0MTk1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xuIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7XG4gXG4rc3RydWN0IGxzbV94YXR0cnM7XG4rZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMy4uYjIwODUyMmRiZDMzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRlc3RfZnN2ZXJpdHkuc2tlbC5oXCJcbisjaW5jbHVkZSBcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcIlxuIFxuIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSBcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcIjtcbiBcbkBAIC0yNjgsNiArMjY5LDE1NSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZzdmVyaXR5KHZvaWQpXG4gXHRyZW1vdmUodGVzdGZpbGUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcbitcdGludCBmZCA9IC0xLCBlcnI7XG4rXHRjaGFyIHZhbHVlX291dFs2NF07XG4rXG4rXHQvKiBUaGlzIHRlc3QgbXVzdCBiZSBydW4gZnJvbSBhIGZzIHRoYXQgY2FsbHNcbitcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKS5cbitcdCAqL1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfbmV3ID0gXCIvZGV2L3NobS90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcIjtcbitcbitcdHNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1x0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXG4rXHRmZCA9IG9wZW4odGVzdGZpbGVfbmV3LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBQcm9iYWJseSBzaG91bGQgbm90IGJlIG5lZWRlZCBhcyB3ZSB3aWxsIGJlIGxhYmVsaW5nIGEgZmlsZVxuK1x0ICogaW4gL2Rldi9zaG0sIGJ1dCBqdXN0IGluIGNhc2Ugd2UgY2hlY2sgaWYgdGhlIGhvb2sgd2FzIGFjdHVhbGx5XG4rXHQgKiBjYWxsZWQuXG4rXHQgKi9cbitcdGlmICghc2tlbC1cdTAwM2Vic3MtXHUwMDNlaG9va19yYW4pIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDppbm9kZV9pbml0X3NlY3VyaXR5IGhvb2sgd2FzIG5vdCBpbnZva2VkXFxuXCIsXG4rXHRcdCAgICAgICBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBUaGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBhY2NlcHQgeGF0dHJzIGF0IGlub2RlIGNyZWF0aW9uLiAqL1xuK1x0aWYgKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdCA9PSAtRU9QTk9UU1VQUCkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOmZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBMU00gaW5pdCB4YXR0cnNcXG5cIixcbitcdFx0ICAgICAgIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFwiaW5pdF9yZXN1bHRcIik7XG4rXG4rXHQvKiBpbml0eGF0dHJzIHByZXBlbmRzIFwic2VjdXJpdHkuXCIgdG8gdGhlIG5hbWUuICovXG4rXHRlcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsIFwic2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcIiwgdmFsdWVfb3V0LFxuK1x0XHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PREFUQSkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxuXCIsXG4rXHRcdCAgICAgICBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFwiZ2V0eGF0dHJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXhhdHRyX3ZhbHVlKSwgXCJ4YXR0cl9zaXplXCIpO1xuK1x0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiLFxuK1x0XHRcdCAgc2l6ZW9mKFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCIpKSwgMCxcbitcdFx0ICBcInhhdHRyX3ZhbHVlXCIpO1xuK1xuK291dDpcbitcdGNsb3NlKGZkKTtcbitcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcbitcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xuK31cbitcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xuKyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxuK1xuKy8qXG4rICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxuKyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS5cbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbFtJTklUX0lOT0RFX1hBVFRSX01BWCArIDFdID0ge307XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFwiL2Rldi9zaG0vdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdFwiO1xuK1x0aW50IG9rID0gMCwgbm9zcGMgPSAwLCBub3RydW4gPSAwLCBvdGhlciA9IDA7XG4rXHRpbnQgaSwgZmQgPSAtMTtcbitcbitcdC8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xuK1x0XHRza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuKCk7XG4rXHRcdGlmICghQVNTRVJUX09LX1BUUihza2VsW2ldLCBcIm9wZW5cIikpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHNucHJpbnRmKHNrZWxbaV0tXHUwMDNlcm9kYXRhLVx1MDAzZXhhdHRyX25hbWUsXG4rXHRcdFx0IHNpemVvZihza2VsW2ldLVx1MDAzZXJvZGF0YS1cdTAwM2V4YXR0cl9uYW1lKSwgXCJicGYubGFiZWxfJWRcIixcbitcdFx0XHQgaSk7XG4rXG4rXHRcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXCJsb2FkXCIpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRza2VsW2ldLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXG4rXHRcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVx1MDAzZXByb2dzLnRlc3RfaW5pdF9pbm9kZV94YXR0cik7XG4rXHRcdGlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCBcImF0dGFjaFwiKSlcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIFRyaWdnZXIgaW5vZGVfaW5pdF9zZWN1cml0eSBvbmNlIHdpdGggYWxsIHByb2dyYW1zIGF0dGFjaGVkLiAqL1xuK1x0ZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiY3JlYXRlX2ZpbGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LypcbitcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0ZXN0XG4rXHQgKiB4YXR0ciBidWRnZXQgYWNjb3VudGluZyB3aXRoIC1FTk9TUEMuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGludCByZXMgPSBza2VsW2ldLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQ7XG4rXG4rXHRcdGlmICghc2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlaG9va19yYW4gfHwgcmVzID09IC1FT1BOT1RTVVBQKVxuK1x0XHRcdG5vdHJ1bisrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gMClcbitcdFx0XHRvaysrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcbitcdFx0XHRub3NwYysrO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3RoZXIrKztcbitcdH1cbitcbitcdGlmIChub3RydW4gPT0gSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxKSB7XG4rXHRcdHByaW50ZihcIiVzOlNLSVA6aG9vayBub3QgaW52b2tlZCBvciBmcyBsYWNrcyBMU00gaW5pdCB4YXR0cnNcXG5cIixcbitcdFx0ICAgICAgIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwic2xvdHNfd2l0aGluX2J1ZGdldFwiKTtcbitcdEFTU0VSVF9FUShub3NwYywgMSwgXCJzbG90X292ZXJfYnVkZ2V0XCIpO1xuK1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcInVuZXhwZWN0ZWRfcmVzdWx0XCIpO1xuK1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuK1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4rXHR9XG4rXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCArNDM4LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnN2ZXJpdHlcIikpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdF9pbm9kZV94YXR0clwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImluaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2UzZDhkMzlkZTljYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5AQCAtMCwwICsxLDMzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2tmdW5jcy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rX191MzIgbW9uaXRvcmVkX3BpZDtcbitpbnQgaG9va19yYW47XG4raW50IGluaXRfcmVzdWx0ID0gLTE7XG4rXG4rY29uc3QgY2hhciB4YXR0cl9uYW1lWzE2XSA9IFwiYnBmLnRlc3RfbGFiZWxcIjtcbitjaGFyIHhhdHRyX3ZhbHVlW10gPSBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiO1xuK1xuK1NFQyhcImxzbS9pbm9kZV9pbml0X3NlY3VyaXR5XCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5pdF9pbm9kZV94YXR0ciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHZhbHVlX3B0cjtcbitcdF9fdTMyIHBpZDtcbitcbitcdHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRob29rX3JhbiA9IDE7XG4rXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcdTAwMjZ2YWx1ZV9wdHIpO1xuK1x0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDowMS4xNDgyMTU1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNzU0MDAwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgTmV3IEJQRiBYYXR0ciBLZnVuYyBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYWxsb3cgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBxdWl0ZSBwb3dlcmZ1bC4gVGhlIHBhdGNoIGlzIGZhaXJseSBicm9hZCwgdXBkYXRpbmcgc2V2ZXJhbCBzZWN1cml0eSBzdWJzeXN0ZW1zIHRvIGFjY29tbW9kYXRlIHRoaXMgY2hhbmdlLiBUaGV5J3ZlIG9wdGVkIGZvciBhIGBzdHJ1Y3QgbHNtX3hhdHRyc2AgdG8gbWFuYWdlIHRoZXNlIGF0dHJpYnV0ZXMgaW5zdGVhZCBvZiB0aGUgcmF3IGFycmF5IHByZXZpb3VzbHkgdXNlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIG1haW50YWluYWJpbGl0eS4gSXQgc2VlbXMgdGhleSd2ZSB1cGRhdGVkIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3IHN0cnVjdHVyZSBhbmQgYSBuZXcgZnVuY3Rpb24sIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhpcyBuZXcga2Z1bmMuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgY29yZSBvZiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGlzIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBqdXN0IGRlbGVnYXRlcyB0byBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYC4gSSdsbCB3YW50IHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbm93IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBzZWN1cml0eS9zZWN1cml0eS5jYCB0byBjb250YWluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoZSBvdGhlciBzdWJzeXN0ZW1zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgYWxzbyB1cGRhdGVzIGBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNgLCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgdG8gdXNlIHRoZSBgc3RydWN0IGxzbV94YXR0cnNgLlxuXG5UaGlzIGNlcnRhaW5seSBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaCwgYW5kIHJpcGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgdGhvc2Uga2V5IGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSB0aGUgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLiBXZSBzaG91bGQgemVybyBpbiBvbjpcbiogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgXG4qICAgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGBcbiogICBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWBcblxuQmVmb3JlIHdlIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGZzL2JwZl9mc19rZnVuY3MuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTMzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MDcuNDIzNjE4MzE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTE4MzIzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZzX2tmdW5jcy5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEyOT1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVxcdFxcdCs9IHpvbmVmcy9cXG5mcy9NYWtlZmlsZToxMzA6b2JqLSQoQ09ORklHX0JQRl9MU00pXFx0XFx0Kz0gYnBmX2ZzX2tmdW5jcy5vXFxuZnMvTWFrZWZpbGUtMTMxLW9iai0kKENPTkZJR19SRVNDVFJMX0ZTKVxcdCs9IHJlc2N0cmwvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjA5LjkzNTQ1NTY0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzEzOTgzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIExTTSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIEJQRiBMU00gaXNzdWUsIGFuZCBpdCBzZWVtcyBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIE1ha2VzIHNlbnNlLiBCZWZvcmUgSSBkaXZlIGRlZXBlciwgbGV0J3MganVzdCBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBjb3JyZWN0IGNvbmZpZyBvcHRpb24gdG8gYmUgZm9jdXNpbmcgb24uIEknbGwgcXVpY2tseSBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBtYWtlIHN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgcmVkIGhlcnJpbmcuIFRpbWUgdG8gY3JhY2sgb3BlbiBgc2VjdXJpdHkvYnBmL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhlIGBDT05GSUdfQlBGX0xTTWAgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJdCdzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzIHdoZW4gZGVhbGluZyB3aXRoIHNlY3VyaXR5IGZlYXR1cmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbSBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IG5leHQgc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MTMuNjA2ODU2MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNjE1MjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0xTTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctOTEtXFxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXFxua2VybmVsL2JwZi9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MTUuOTMzMDE4Njg0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NDc5MzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHNwZWNpZmljIEJQRiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsLiBMZXQncyBzZWUuLi5JJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uIG1pZ2h0IHJlc2lkZSB3aXRoaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEl0J3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBCUEYgc3Vic3lzdGVtIGFyZSBsYWlkIG91dC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZWx5IGFyb3VuZCBsaW5lIDkyLCBwZXJ0YWluaW5nIHRvIHRoZSBhcmVhIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBrbm93IGFib3V0LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwgdG8gZmluZCBvdXQgYWxsIG9mIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjE4LjkxNzgxNTE3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHQgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzIG9uIHVubWl0aWdhdGVkXFxuICA4NjpcXHRcXHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuXFxuICA4OTpcXHRcXG4gIDkwOlxcdHNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDoxOC45MTc5MDU0MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIyMDM5NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIExTTSBQYXRjaCBEZXBlbmRlbmNpZXMgYW5kIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgQlBGX0xTTWAgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzOyBpdCBsb29rcyBsaWtlIGBCUEZfTFNNYCByZWxpZXMgb24gYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBhbmQgYEJQRl9KSVRgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGlzdGluZyBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGggQlBGLiBJJ20gZ29pbmcgdG8gY2hlY2sgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQuIFJpZ2h0LCBpdCBpcyBjb21waWxlZCBpZiBgQ09ORklHX1NFQ1VSSVRZYCBpcyBlbmFibGVkLCB3aGljaCBpcyBleHBlY3RlZC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoZSBwYXRjaCB0b3VjaGVzIGBFVk1gLCBgU0VMSU5VWGAsIGFuZCBgU01BQ0tgIGNvbmZpZ3VyYXRpb25zLCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBzdGVtIGZyb20gdGhlIG5ldyBCUEYga2Z1bmMuIElmIEkgZW5hYmxlIGBCUEZfTFNNYCwgSSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvbiB0ZXN0aW5nIHRoYXQga2Z1bmMncyBpbnRlZ3JhdGlvbi4gVGhlIG1vZGlmaWNhdGlvbiB0byB0aG9zZSBzZWN1cml0eSBtb2R1bGVzIGFwcGVhcnMgdG8gYmUgYWJvdXQgaG9va2luZyBpbnRvIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gZ2V0IGNvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb24gdGhlIGNoYW5nZXMgdGhlcmUuIFNvLCB0byBlbnN1cmUgSSBjYW4gY29tcHJlaGVuc2l2ZWx5IHRlc3QgdGhvc2UgY2hhbmdlcywgZW5hYmxpbmcgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEVWTWAgaXMgYSBnb29kIGlkZWEuIFRoYXQgd2lsbCBlbnN1cmUgdGhlIG1vZGlmaWVkIGhvb2tzIGFyZSB0ZXN0ZWQuXG5cbk5leHQsIEkgbmVlZCB0byBzZWUgaG93IHRoZSB4YXR0ciBmdW5jdGlvbnMgY29tZSBpbnRvIHBsYXkuIEknbGwgbG9vayBhdCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIE9rYXksIGl0J3MgZGVmaW5lZCBhbmQgZG9lc24ndCBhcHBlYXIgdG8gYmUgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHNvIGl0J3MgZGlyZWN0bHkgaW5jbHVkZWQgd2hlbiBgQ09ORklHX1NFQ1VSSVRZYCBpcyBzZXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgQlBGIHNpZGUuIEknbGwgZXhhbWluZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiBBaCwgdGhlcmUgaXQgaXMsIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfTFNNYCwgYXMgZXhwZWN0ZWQuIFNvLCBpdCBjYWxscyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYC5cblxuVG8gc3VtbWFyaXplIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkOlxuXG4qICAgYEJQRl9MU01gXG4qICAgYFNFQ1VSSVRZYFxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX0pJVGBcblxuQW5kIEknbGwgbWFrZSBhIG5vdGUgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWdzIHRoYXQgSSdtIG1pc3NpbmcuXG5cblRoZSBjcml0aWNhbCBwaWVjZXMgb2YgdGhpcyBhcmU6XG5cbiogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgXG4qICAgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGBcbiogICBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWBcblxuRmluYWxseSwgYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhvc2UgYGV2bWAsIGBzZWxpbnV4YCwgYW5kIGBzbWFja2AgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaWduYXR1cmUgb2YgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rIGFuZCB1c2VzIGBsc21fZ2V0X3hhdHRyX3Nsb3RgLiBPaCwgYW5kIGBsc21fZ2V0X3hhdHRyX3Nsb3RgIGlzIGFuIGlubGluZSBmdW5jdGlvbiBpbiBgaW5jbHVkZS9saW51eC9sc21faG9va3MuaGAuIEknbGwgd2FudCB0byBlbmFibGUgdGhvc2UgY29uZmlncyB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZSB1cGRhdGVzIGFyZSBjb3JyZWN0LCBzbzpcblxuKiAgIGBTRUNVUklUWV9TRUxJTlVYYFxuKiAgIGBTRUNVUklUWV9TTUFDS2BcbiogICBgRVZNYFxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBjb21wcmVoZW5zaXZlIHRlc3QgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjYwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MjcuNzM5OTQ5NjE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU2MTMxNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9TRUxJTlVYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiU0VMaW51eCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTExLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU0VMaW51eCBib290IHBhcmFtZXRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNy1cXHRib29sIFxcXCJTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMzktXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQwOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cXHRib29sIFxcXCJTRUxpbnV4IEFWQyBTdGF0aXN0aWNzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQ4LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTUwLVxcdGludCBcXFwiU0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYxOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02Mi1cXHRpbnQgXFxcIlNFTGludXggU0lEIHRvIGNvbnRleHQgc3RyaW5nIHRyYW5zbGF0aW9uIGNhY2hlIHNpemVcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjcyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0FWQ19IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXFx0aW50IFxcXCJTRUxpbnV4IGF2YyBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04Mi1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODQtXFx0Ym9vbCBcXFwiU0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjI5Ljk5NjA4ODA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQwMDc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRVZNIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYEVWTWAuIFRoaXMgaXMgdGhlIGp1bXBpbmctb2ZmIHBvaW50OyBiZWZvcmUgSSBjb25zaWRlciBhbnkgZGVlcGVyIGRpYWdub3N0aWNzIG9yIHBvdGVudGlhbCBpc3N1ZXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgYXMgSSB3b3VsZCBleHBlY3QuIFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycz8gQXJlIHRoZSBnYXMgbGltaXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgYW50aWNpcGF0ZWQgdHJhbnNhY3Rpb24gbG9hZD8gSXMgdGhlIGJsb2NrIHRpbWUgY29uZmlndXJlZCBjb3JyZWN0bHk/IFdoYXQgYWJvdXQgdGhlIGNvbnNlbnN1cyBtZWNoYW5pc20gc2V0dGluZ3M/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBvciBvdmVycmlkZXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyBwZXJmb3JtYW5jZSBvciBiZWhhdmlvcj8gSSB3YW50IHRvIGtub3cgZXZlcnl0aGluZy4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcgaXMgYSBwcm9kdWN0IG9mIHNvbWUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA5OjI0OjMzLjg3MDA5OTI5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDM3NjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzoyOmNvbmZpZyBFVk1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMy1cXHRib29sIFxcXCJFVk0gc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xNi1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6MTc6Y29uZmlnIEVWTV9BVFRSX0ZTVVVJRFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJGU1VVSUQgKHZlcnNpb24gMilcXFwiXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMzAtXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjMxOmNvbmZpZyBFVk1fRVhUUkFfU01BQ0tfWEFUVFJTXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkFkZGl0aW9uYWwgU01BQ0sgeGF0dHJzXFxcIlxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ3LVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo0ODpjb25maWcgRVZNX0FERF9YQVRUUlNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNDktXFx0Ym9vbCBcXFwiQWRkIGFkZGl0aW9uYWwgRVZNIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXQgcnVudGltZVxcXCJcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy01OC1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6NTk6Y29uZmlnIEVWTV9MT0FEX1g1MDlcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiTG9hZCBhbiBYNTA5IGNlcnRpZmljYXRlIG9udG8gdGhlICcuZXZtJyB0cnVzdGVkIGtleXJpbmdcXFwiXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctNzAtXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjcxOmNvbmZpZyBFVk1fWDUwOV9QQVRIXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTcyLVxcdHN0cmluZyBcXFwiRVZNIFg1MDkgY2VydGlmaWNhdGUgcGF0aFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MzUuOTQ0NDgxMjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNDc3NDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQSBRdWljayBTY2FuIGZvciB0aGUgT2J2aW91cyoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIGludG8gbXkgbWluZCBpcyBhIHF1aWNrIHNhbml0eSBjaGVjay4gV2hlbiBkZWFsaW5nIHdpdGggc2VjdXJpdHksIHlvdSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgY3VscHJpdHMsIHRoZSBsb3ctaGFuZ2luZyBmcnVpdC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgU0VDVVJJVFlfU01BQ0tgLiBJJ20gZ29pbmcgdG8gcnVuIGl0IGJ5IG15IG1lbnRhbCBjaGVja2xpc3QuIElzIGl0IGEgdmFyaWFibGUsIGEgZnVuY3Rpb24sIGEgbW9kdWxlLCBhIGxpYnJhcnk/IElzIGl0IHNvbWV0aGluZyBpbnRlcm5hbCBvciBleHRlcm5hbD8gSXMgdGhpcyBzb21ldGhpbmcgSSd2ZSB3b3JrZWQgd2l0aCBiZWZvcmU/IElzIHRoZXJlIGEga25vd24gdnVsbmVyYWJpbGl0eSwgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBhIGNvbW1vbiBtaXNpbnRlcnByZXRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lPyBUaGlzIGlzIGJhc2ljIHRyaWFnZSwgYnV0IGl0J3MgZXNzZW50aWFsIHRvIHByZXZlbnQgZ2V0dGluZyBzaWRlLXRyYWNrZWQgYnkgc29tZXRoaW5nIHRyaXZpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDM2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6MzguOTY5MjU5NjM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM4MTQ1OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9TTUFDS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zbWFjay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMy1cXHRib29sIFxcXCJTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBLZXJuZWwgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTUtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoxNjpjb25maWcgU0VDVVJJVFlfU01BQ0tfQlJJTkdVUFxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTctXFx0Ym9vbCBcXFwiUmVwb3J0aW5nIG9uIGFjY2VzcyBncmFudGVkIGJ5IFNtYWNrIHJ1bGVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zMy1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjM0OmNvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVJcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIlBhY2tldCBtYXJraW5nIHVzaW5nIHNlY21hcmtzIGZvciBuZXRmaWx0ZXJcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ0LVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6NDU6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0FQUEVORF9TSUdOQUxTXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00Ni1cXHRib29sIFxcXCJUcmVhdCBkZWxpdmVyaW5nIHNpZ25hbHMgYXMgYW4gYXBwZW5kIG9wZXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDk6MjQ6NDEuNDA3NDEwNTY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTU4MTI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGtlcm5lbCBmdW5jdGlvbiwgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFsbG93IEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgcGhhc2UuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGhpZ2hsaWdodCB0aGF0IHRoaXMgbmVlZHMgdGhvcm91Z2ggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgZm9yIGludmVzdGlnYXRpb24gd2lsbCBiZTogYGJwZl9pbml0X2lub2RlX3hhdHRyYCAob2YgY291cnNlISksIGFsb25nc2lkZSB0aGUgb3RoZXIgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkOiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLCBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YC4gSSdsbCBhbHNvIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEJQRl9MU01gLCBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgRVZNYC5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgZXhpc3Rpbmcgc2VjdXJpdHkgbW9kdWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gY3VyaW91cyBhYm91dCBob3cgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YCBiZWhhdmVzLCBzbyBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIExvb2tzIGxpa2UgaW4gYHNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY2AgaXQncyBkZWZpbmVkIGFzIGBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoLi4uKWAgLSBzbywgbm90IHN0YXRpYy5cblxuTm93LCB3YWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLiBUaGlua2luZyBhYm91dCBpdCwgdGhlIGZhY3QgdGhhdCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCAqaXMqIHN0YXRpYyAoaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIEknbGwgZG91YmxlLWNoZWNrKSwgbWVhbnMgaXQgY291bGQgYmUgaW5saW5lZCwgb3IgbWlnaHQgbm90IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYywgc28gbGV0IG1lIHF1aWNrbHkgZ28gYmFjayBhbmQgY29uZmlybSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ4NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo0Ni44MjMyMjY3NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTg4Mjc0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yOTQyPXN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjk2Mi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mjk2MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjk2NC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzAwOC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzAwOTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwMTAtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1NTM9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTkxLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfZnJlZV9zZWN1cml0eSwgc2VsaW51eF9pbm9kZV9mcmVlX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU5MjpcXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHksIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc1OTM6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU5NC1cXHRMU01fSE9PS19JTklUKGlub2RlX2NyZWF0ZSwgc2VsaW51eF9pbm9kZV9jcmVhdGUpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo0OC45NDIwNTk4MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjE1MDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIExTTSBIb29rIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgc2VjdXJpdHkgbW9kdWxlIGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBJJ3ZlIGdvdCBhIGtleSBwb2ludCBpbiBtaW5kOiBiZWNhdXNlIHRoaXMgZnVuY3Rpb24ncyBiZWluZyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBMU01fSE9PS19JTklUYCwgdGhlcmUncyBubyB3YXkgdGhlIGNvbXBpbGVyJ3MgZ29pbmcgdG8gaW5saW5lIGl0LiBUaGF0J3MganVzdCB0aGUgbmF0dXJlIG9mIGhvdyBmdW5jdGlvbiBwb2ludGVycyB3b3JrLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBkZWVwIGRpdmUuXG5cbkdpdmVuIHRoYXQsIEkgdGhpbmsgdGhlIGNyaXRpY2FsIGFyZWFzIHRvIHNjcnV0aW5pemUgYXJlIGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGFuZCBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLiBUaG9zZSBhcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIHdoZXJlIHRoZSBhY3R1YWwgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVzaWRlcywgYW5kIHdoZXJlIEknbSBnb2luZyB0byBmaW5kIHRoZSBjb3JlIG1lY2hhbmlzbXMuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEknbSBqdXN0IGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG90aGVyIHNlY3VyaXR5IG1vZHVsZSBvdmVycmlkZXMgdGhpcyBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo1Mi42NDgyMTM5NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzM4OTMwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zbWFjay9zbWFja19sc20uYz05ODQ9eGF0dHJfZHVwdmFsKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDAxLS8qKlxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMDI6ICogc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSAtIGNvcHkgb3V0IHRoZSBzbWFjayBmcm9tIGFuIGlub2RlXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAwMy0gKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDA5LSAqL1xcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMTA6c3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMTEtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTUxMjE9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc21hY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTM4LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHNtYWNrX2lub2RlX2FsbG9jX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTM5OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSksXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE0MC1cXHRMU01fSE9PS19JTklUKGlub2RlX2xpbmssIHNtYWNrX2lub2RlX2xpbmspLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNDo1NC44ODIxMTMyNjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ4MTU1NzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgY2xlYXIgZGlyZWN0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9sczogYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAsIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAuIEkga25vdyBleGFjdGx5IHdoYXQgdGhlc2UgdGhpbmdzIGFyZS5cblxuUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBJIG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25maWdzIGluIGFueSB0ZXN0aW5nIHNjZW5hcmlvOiBgQlBGX0xTTWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIGBFVk1gLiBBbmQsIHdhaXQsIEkgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcyBkZXBlbmRlbmNpZXMuIE5vdGVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBCUEYga2Z1bmM6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIFRoaXMgaXMga2V5LiBJdCdzIGdpdmluZyBCUEYgTFNNIHByb2dyYW1zIHRoZSBjYXBhYmlsaXR5IHRvIHNldCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGR1cmluZyBgaW5vZGVfaW5pdF9zZWN1cml0eWAuIFRoYXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWxpdHkgYWRkaXRpb24sIGFuZCBvcGVucyBuZXcgYXR0YWNrIHN1cmZhY2VzLiBJdCBhbHNvIHJlZmFjdG9ycyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdG8gdXNlIGBzdHJ1Y3QgbHNtX3hhdHRyc2AgaW5zdGVhZCBvZiBhIHJhdyBhcnJheSAtIGltcHJvdmluZyB0aGUgYXJjaGl0ZWN0dXJlLiBBbmQsIGl0IHVwZGF0ZXMgc2V2ZXJhbCBMU01zIHRvIHVzZSBpdDogYGV2bWAsIGBzZWxpbnV4YCwgYW5kIGBzbWFja2AuIFRoZSBuZXcgZnVuY3Rpb24gYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAsIGNhbGxlZCBieSB0aGUgbmV3IGtmdW5jLCB3YXJyYW50cyBzY3J1dGlueS5cblxuSW4gc2hvcnQsIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBpbnRyb2R1Y2VzIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCwgdGhlcmVmb3JlLCBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCB0byBkb2N1bWVudCBteSBhbmFseXNpcyBhbmQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzgxLCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwOToyNTowMi4zNjM2NzQ5NzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwNzI5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCIsXG4gICAgXCJFVk1cIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwiZXZtX2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCIsXG4gICAgXCJFVk1cIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwiZXZtX2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFsc28gcmVmYWN0b3JzIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBhbmQgdXBkYXRlcyBFVk0sIFNFTGludXgsIGFuZCBTTUFDSyB0byB1c2UgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZWN1cml0eSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[1] Phase: Succeeded StartedAt: 2026-08-01 09:25:14 +0000 UTC FinishedAt: 2026-08-01 09:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 09:25:14 +0000 UTC FinishedAt: 2026-08-01 09:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2] Phase: Succeeded StartedAt: 2026-08-01 09:25:14 +0000 UTC FinishedAt: 2026-08-01 13:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 09:25:14 +0000 UTC FinishedAt: 2026-08-01 13:18:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 09:25:14 +0000 UTC FinishedAt: 2026-08-01 09:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 09:25:14 +0000 UTC FinishedAt: 2026-08-01 09:25:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj5vtm/series-workflowj5vtm-convert-artifact-1089495346/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 09:25:39 +0000 UTC FinishedAt: 2026-08-01 09:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 09:25:39 +0000 UTC FinishedAt: 2026-08-01 09:47:32 +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:*9aba1e56-1c0b-4c3f-b7a7-0668b2a65964,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-workflowj5vtm/series-workflowj5vtm-convert-artifact-1089495346/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": "d597c869-2b6b-430a-81b7-78317ce9e324", "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-workflowj5vtm/series-workflowj5vtm-build-action-3563893424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 09:25:39 +0000 UTC FinishedAt: 2026-08-01 09:47:22 +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:*9aba1e56-1c0b-4c3f-b7a7-0668b2a65964,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-workflowj5vtm/series-workflowj5vtm-convert-artifact-1089495346/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": "d597c869-2b6b-430a-81b7-78317ce9e324", "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-workflowj5vtm/series-workflowj5vtm-build-action-3563893424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 09:47:32 +0000 UTC FinishedAt: 2026-08-01 09:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 09:47:32 +0000 UTC FinishedAt: 2026-08-01 09:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 09:47:32 +0000 UTC FinishedAt: 2026-08-01 09:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 09:47:32 +0000 UTC FinishedAt: 2026-08-01 09:47:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj5vtm/series-workflowj5vtm-convert-artifact-1456253261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 09:47:42 +0000 UTC FinishedAt: 2026-08-01 09:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 09:47:42 +0000 UTC FinishedAt: 2026-08-01 09:49:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d597c869-2b6b-430a-81b7-78317ce9e324,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-workflowj5vtm/series-workflowj5vtm-build-action-3563893424/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-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 09:49:42 +0000 UTC FinishedAt: 2026-08-01 09:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 09:49:42 +0000 UTC FinishedAt: 2026-08-01 09:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 09:49:42 +0000 UTC FinishedAt: 2026-08-01 10:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 09:49:42 +0000 UTC FinishedAt: 2026-08-01 10:13:06 +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:*9aba1e56-1c0b-4c3f-b7a7-0668b2a65964,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-workflowj5vtm/series-workflowj5vtm-convert-artifact-1456253261/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": "2482f3e1-6bdb-4422-a548-ddab907df9fd", "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-workflowj5vtm/series-workflowj5vtm-build-action-1608767273/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 09:49:42 +0000 UTC FinishedAt: 2026-08-01 10:12:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9aba1e56-1c0b-4c3f-b7a7-0668b2a65964,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-workflowj5vtm/series-workflowj5vtm-convert-artifact-1456253261/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": "2482f3e1-6bdb-4422-a548-ddab907df9fd", "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-workflowj5vtm/series-workflowj5vtm-build-action-1608767273/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 10:13:06 +0000 UTC FinishedAt: 2026-08-01 10:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 10:13:06 +0000 UTC FinishedAt: 2026-08-01 10:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 10:13:06 +0000 UTC FinishedAt: 2026-08-01 10:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 10:13:07 +0000 UTC FinishedAt: 2026-08-01 10:14:59 +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:*2482f3e1-6bdb-4422-a548-ddab907df9fd,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-workflowj5vtm/series-workflowj5vtm-build-action-1608767273/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-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 13:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 13:18:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d597c869-2b6b-430a-81b7-78317ce9e324,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2482f3e1-6bdb-4422-a548-ddab907df9fd,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-workflowj5vtm/series-workflowj5vtm-build-action-3563893424/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-workflowj5vtm/series-workflowj5vtm-build-action-1608767273/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 10:15:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 10:15:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj5vtm/series-workflowj5vtm-convert-artifact-1893010738/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 10:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 10:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 10:15:12 +0000 UTC FinishedAt: 2026-08-01 10:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 10:15:47 +0000 UTC FinishedAt: 2026-08-01 13:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5vtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security","evm_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2659f94ed3be147942acbea96405efc562afb34c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","EVM","BPF_SYSCALL","BPF_JIT"],"series_id":"12135746-946e-499a-b153-2d18852b1f8c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 10:15:47 +0000 UTC FinishedAt: 2026-08-01 13:18:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d597c869-2b6b-430a-81b7-78317ce9e324,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2482f3e1-6bdb-4422-a548-ddab907df9fd,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-workflowj5vtm/series-workflowj5vtm-build-action-3563893424/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-workflowj5vtm/series-workflowj5vtm-build-action-1608767273/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-workflowj5vtm/series-workflowj5vtm-convert-artifact-1893010738/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,}