Name: series-workflowpv8lm Phase: Succeeded StartedAt: 2026-07-01 01:23:18 +0000 UTC FinishedAt: 2026-07-01 06:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[0] Phase: Succeeded StartedAt: 2026-07-01 01:23:18 +0000 UTC FinishedAt: 2026-07-01 01:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 01:23:18 +0000 UTC FinishedAt: 2026-07-01 01:35:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "e771677c937da5808f7b6c1f0e4a97ec1a84f8a8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "EVM", "SECURITY_SELINUX", "SECURITY_SMACK" ], "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": "e771677c937da5808f7b6c1f0e4a97ec1a84f8a8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "EVM", "SECURITY_SELINUX", "SECURITY_SMACK" ], "series_id": "86d7e906-c185-4aaa-9650-1f9d4f07e57f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_init_inode_xattr", "security_inode_init_security", "evm_inode_init_security", "selinux_inode_init_security", "smack_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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7RVZNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2V2bV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgdGhhdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIG9uIGEgbmV3IGlub2RlIGR1cmluZyBgaW5vZGVfaW5pdF9zZWN1cml0eWAuIEl0IG1vZGlmaWVzIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgTFNNIGhvb2sgc2lnbmF0dXJlIHRvIHVzZSBhIG5ldyBgc3RydWN0IGxzbV94YXR0cnNgIHN0cnVjdHVyZSwgYWZmZWN0aW5nIGNvcmUgTFNNLCBFVk0sIFNFTGludXgsIGFuZCBTbWFjay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDY0ODRiM2Y5YjA5Nzk4NGI5MmRkYTFhMDk4MGM1ZDJmYzNjZDk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMTozMToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IDc2OGFjYTJkYzBmMDM0Li5jNDAyM2M4MmYyMWU0MCAxMDA2NDRcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc25vdGlmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuQEAgLTM3NCw2ICYjNDM7Mzc1LDgzIEBAIF9fYnBmX2tmdW5jIHN0cnVjdCBpbm9kZSAqYnBmX3JlYWxfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIG4gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdHgtXHUwMDNleGF0dHJfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBjaGFyICpuYW1lID0gY3R4LVx1MDAzZXhhdHRyc1tpXS5uYW1lO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwgcHJlZml4X2xlbikpXG4mIzQzO1x0XHRcdG4mIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxuJiM0MzsgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dFxuJiM0MzsgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcJiMzNDticGYuZmlsZV9sYWJlbFwmIzM0OylcbiYjNDM7ICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZVxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IGNhbGxhYmxlIGZyb20gbHNtL2lub2RlX2luaXRfc2VjdXJpdHkgcHJvZ3JhbXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnZhbHVlX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopdmFsdWVfcDtcbiYjNDM7XHRzaXplX3QgbmFtZV9sZW47XG4mIzQzO1x0dm9pZCAqeGF0dHJfdmFsdWU7XG4mIzQzO1x0c3RydWN0IHhhdHRyICp4YXR0cjtcbiYjNDM7XHRjb25zdCB2b2lkICp2YWx1ZTtcbiYjNDM7XHR1MzIgdmFsdWVfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhhdHRycyB8fCAheGF0dHJzLVx1MDAzZXhhdHRycyB8fCAhbmFtZV9fc3RyKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFx1MDAzZT0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcbiYjNDM7XHRuYW1lX2xlbiA9IHN0cmxlbihuYW1lX19zdHIpO1xuJiM0MztcdGlmIChuYW1lX2xlbiA9PSAwIHx8IG5hbWVfbGVuIFx1MDAzZSBYQVRUUl9OQU1FX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsXG4mIzQzO1x0XHQgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKVxuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0dmFsdWVfbGVuID0gX19icGZfZHlucHRyX3NpemUodmFsdWVfcHRyKTtcbiYjNDM7XHRpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTtcbiYjNDM7XHRpZiAoIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgJiM0MzsgbmFtZSBpbnRvIG9uZSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdHhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW4gJiM0MzsgMSwgR0ZQX05PRlMpO1xuJiM0MztcdGlmICgheGF0dHJfdmFsdWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcbiYjNDM7XHRtZW1jcHkoeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuLCBuYW1lX19zdHIsIG5hbWVfbGVuKTtcbiYjNDM7XHQoKGNoYXIgKil4YXR0cl92YWx1ZSlbdmFsdWVfbGVuICYjNDM7IG5hbWVfbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4mIzQzO1x0aWYgKCF4YXR0cikge1xuJiM0MztcdFx0a2ZyZWUoeGF0dHJfdmFsdWUpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR4YXR0ci1cdTAwM2V2YWx1ZSA9IHhhdHRyX3ZhbHVlO1xuJiM0MztcdHhhdHRyLVx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbjtcbiYjNDM7XHR4YXR0ci1cdTAwM2V2YWx1ZV9sZW4gPSB2YWx1ZV9sZW47XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zODUsNiAmIzQzOzQ2Myw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2luaXRfaW5vZGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbiBcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbmluZGV4IDE0Mzc3NWEyN2EyYTBiLi5iNjU1YzcwODgxOGU1OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuQEAgLTE5LDYgJiM0MzsxOSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tfZGVmcy5oXHUwMDNlXG4gI3VuZGVmIExTTV9IT09LXG4gXG4mIzQzOy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqL1xuJiM0MzsjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxuJiM0MztcbiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7XG4gXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgX19yY3UgKnN0b3JhZ2U7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2bS5oIGIvaW5jbHVkZS9saW51eC9ldm0uaFxuaW5kZXggOTEzZjQ1NzNiMjAzOGUuLjUyOGYzNjBmMzMwOGRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldm0uaFxuQEAgLTEyLDYgJiM0MzsxMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0VWTVxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtMjEsOCAmIzQzOzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFx0XHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxuQEAgLTYzLDggJiM0Mzs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3NzAuLjViMmRlNzg2NWNlODFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTE2LDggJiM0MzsxMTYsOCBAQCBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2FsbG9jX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSlcbiBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHQgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gLyoqXG4gICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4XG4tICogQHhhdHRyczogYXJyYXkgc3RvcmluZyBMU00tcHJvdmlkZWQgeGF0dHJzXG4tICogQHhhdHRyX2NvdW50OiBudW1iZXIgb2YgYWxyZWFkeSBzdG9yZWQgeGF0dHJzICh1cGRhdGVkKVxuJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rc1xuICAqXG4tICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAeGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhbiB4YXR0cixcbi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC5cbiYjNDM7ICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAY3R4LVx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cbiYjNDM7ICogeGF0dHIsIGFuZCBpbmNyZW1lbnQgQGN0eC1cdTAwM2V4YXR0cl9jb3VudC5cbiAgKlxuLSAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAeGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXHUwMDNleGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxuIHtcbi1cdGlmICh1bmxpa2VseSgheGF0dHJzKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIWN0eCB8fCAhY3R4LVx1MDAzZXhhdHRycykpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0cmV0dXJuIFx1MDAyNnhhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdO1xuJiM0MztcdHJldHVybiBcdTAwMjZjdHgtXHUwMDNleGF0dHJzW2N0eC1cdTAwM2V4YXR0cl9jb3VudCYjNDM7JiM0MztdO1xuIH1cbiBcbiAjZW5kaWYgLyogISBfX0xJTlVYX0xTTV9IT09LU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4OC4uMGJlNTkwYzQwNjg5NTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcbiBzdHJ1Y3QgbHNtX2N0eDtcbiBcbiYjNDM7c3RydWN0IGxzbV94YXR0cnMge1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuJiM0MztcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9sc20uYyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5pbmRleCA1NjQwNzFhOTJkN2QyMC4uMWMzZjg0YTkyNDIwMzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfbHNtLmNcbkBAIC0zMTUsNiAmIzQzOzMxNSw3IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2NyZWF0ZSlcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9mcmVlX3NlY3VyaXR5KVxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2dldGF0dHIpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfZ2V0eGF0dHIpXG4mIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2luaXRfc2VjdXJpdHkpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbWtub2QpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbmVlZF9raWxscHJpdilcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9wb3N0X3NldHhhdHRyKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDQwZWZkZTIzM2YzYWIzLi5kN2M0NGM1YzBlMzA0NiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMwLDYgJiM0MzszMCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4mIzQzO1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4OS4uYjcxNThmYzYzNTQzZTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgJiM0MzsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxuICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWVcbiAgKi9cbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4mIzQzO1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4gXHRib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0eGF0dHJzID0gbHNtX3hhdHRycyA/IGxzbV94YXR0cnMtXHUwMDNleGF0dHJzIDogTlVMTDtcbiBcdGlmICghKGV2bV9pbml0aWFsaXplZCBcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA4Nyw3ICYjNDM7MTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTtcbiBcdC8qXG4gXHQgKiBBcnJheSB0ZXJtaW5hdG9yICh4YXR0ciBuYW1lID0gTlVMTCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWZpbGxlZFxuIFx0ICogeGF0dHIgc2xvdC5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEzMzMsOCAmIzQzOzEzMzMsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpXG4ge1xuIFx0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4tXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xuLVx0aW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7XG4mIzQzO1x0c3RydWN0IGxzbV94YXR0cnMgeGF0dHJzID0ge307XG4mIzQzO1x0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTM0NCwxNSAmIzQzOzEzNDQsMTUgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gXHRpZiAoaW5pdHhhdHRycykge1xuIFx0XHQvKiBBbGxvY2F0ZSAmIzQzOzEgYXMgdGVybWluYXRvci4gKi9cbi1cdFx0bmV3X3hhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgJiM0MzsgMSxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xuLVx0XHRpZiAoIW5ld194YXR0cnMpXG4mIzQzO1x0XHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xuJiM0MztcdFx0aWYgKCF4YXR0cnMueGF0dHJzKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcbi1cdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsIG5ld194YXR0cnMsXG4tXHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cl9jb3VudCk7XG4mIzQzO1x0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRycyk7XG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0LypcbkBAIC0xMzY0LDE0ICYjNDM7MTM2NCwxNCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdH1cbiBcbiBcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xuLVx0aWYgKCF4YXR0cl9jb3VudClcbiYjNDM7XHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcbiYjNDM7XHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTtcbiBvdXQ6XG4tXHRmb3IgKDsgeGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXG4tXHRcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4tXHRrZnJlZShuZXdfeGF0dHJzKTtcbiYjNDM7XHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcbiYjNDM7XHRcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuJiM0MztcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xuIFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMjk2Miw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXG4gXG4gc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjO1xuQEAgLTI5OTIsNyAmIzQzOzI5OTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhKHNic2VjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQkxBQkVMX01OVCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXHRpZiAoeGF0dHIpIHtcbiBcdFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2Y29udGV4dCwgXHUwMDI2Y2xlbik7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggZmYxMTUwNjhjNWMwNmYuLjQ1MDEwNzg0MzBjYTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtOTgxLDEwICYjNDM7OTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiBcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWxsZW4pXG4ge1xuLVx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4mIzQzO1x0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcbiBcdGlmICgheGF0dHIpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEwMDMsMTQgJiM0MzsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbiYjNDM7ICogQHhhdHRyczogd2hlcmUgdG8gcHV0IGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZSBjb3VudFxuICAqXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUmIzM5O3Mgbm8gbWVtb3J5XG4gICovXG4gc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0dHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTtcbiBcbi1cdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0XHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXG4tXHRcdFx0XHRUUkFOU19UUlVFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRV9TSVpFXG4tXHRcdFx0KSlcbiYjNDM7XHRcdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsXG4mIzQzO1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuJiM0MztcdFx0XHRcdFx0IFRSQU5TX1RSVUUsXG4mIzQzO1x0XHRcdFx0XHQgVFJBTlNfVFJVRV9TSVpFKSlcbiBcdFx0XHRcdHJjID0gLUVOT01FTTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHJjID09IDApXG4tXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxuLVx0XHRcdCAgICBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4tXHRcdCAgICAgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bilcbi1cdFx0KSlcbiYjNDM7XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuJiM0MztcdFx0XHRcdCBYQVRUUl9TTUFDS19TVUZGSVgsXG4mIzQzO1x0XHRcdFx0IGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bixcbiYjNDM7XHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuQEAgLTkyLDQgJiM0Mzs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xuIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7XG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzO1xuJiM0MztleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4mIzQzO1x0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKSBfX2tzeW0gX193ZWFrO1xuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5pbmRleCA0M2EyNmVjNjlhOGUzNi4uOGIyZTBkNDMzYWVhMmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfZ2V0X3hhdHRyLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X2ZzdmVyaXR5LnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHIuc2tlbC5oXCYjMzQ7XG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgdGVzdGZpbGVbXSA9IFwmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcJiMzNDs7XG4gXG5AQCAtMjY4LDYgJiM0MzsyNjksMTE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZClcbiBcdHJlbW92ZSh0ZXN0ZmlsZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGludCBmZCA9IC0xLCBlcnI7XG4mIzQzO1x0Y2hhciB2YWx1ZV9vdXRbNjRdO1xuJiM0MztcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX25ldyA9IFwmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NfbmV3XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiYjNDM7XHRlcnIgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi9cbiYjNDM7XHRmZCA9IG9wZW4odGVzdGZpbGVfbmV3LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7Y3JlYXRlX2ZpbGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFwmIzM0O2luaXRfcmVzdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogaW5pdHhhdHRycyBwcmVwZW5kcyBcJiMzNDtzZWN1cml0eS5cJiMzNDsgdG8gdGhlIG5hbWUuICovXG4mIzQzO1x0ZXJyID0gZ2V0eGF0dHIodGVzdGZpbGVfbmV3LCBcJiMzNDtzZWN1cml0eS5icGYudGVzdF9sYWJlbFwmIzM0OywgdmFsdWVfb3V0LFxuJiM0MztcdFx0ICAgICAgIHNpemVvZih2YWx1ZV9vdXQpKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBfX2Z1bmNfXyk7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZXJyLCAwLCBcJiMzNDtnZXR4YXR0clwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXhhdHRyX3ZhbHVlKSwgXCYjMzQ7eGF0dHJfc2l6ZVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcJiMzNDssXG4mIzQzO1x0XHRcdCAgc2l6ZW9mKFwmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwmIzM0OykpLCAwLFxuJiM0MztcdFx0ICBcJiMzNDt4YXR0cl92YWx1ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRyZW1vdmUodGVzdGZpbGVfbmV3KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogS2VlcCBpbiBzeW5jIHdpdGggQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyBpbiBpbmNsdWRlL2xpbnV4L2JwZl9sc20uaC4gKi9cbiYjNDM7I2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0XG4mIzQzOyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS5cbiYjNDM7ICogQ2FsbHMgYmV5b25kIHRoYXQgYnVkZ2V0IGFyZSByZWplY3RlZCBhdCBydW50aW1lIHdpdGggLUVOT1NQQy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307XG4mIzQzO1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFwmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdFwmIzM0OztcbiYjNDM7XHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcbiYjNDM7XHRpbnQgaSwgZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXCYjMzQ7b3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHNrZWxbaV0tXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmtbaV0sIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXG4mIzQzO1x0ZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdFxuJiM0MztcdCAqIHRoZSBidWRnZXQgZ2V0cyAtRU5PU1BDLiBUaGUgb3JkZXIgaW4gd2hpY2ggcHJvZ3JhbXMgcnVuIGlzIG5vdFxuJiM0MztcdCAqIGd1YXJhbnRlZWQsIHNvIGNvdW50IHJlc3VsdHMgaW5zdGVhZCBvZiBpbmRleGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmVzID0gc2tlbFtpXS1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXMgPT0gMClcbiYjNDM7XHRcdFx0b2smIzQzOyYjNDM7O1xuJiM0MztcdFx0ZWxzZSBpZiAocmVzID09IC1FTk9TUEMpXG4mIzQzO1x0XHRcdG5vc3BjJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0b3RoZXImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG9rLCBJTklUX0lOT0RFX1hBVFRSX01BWCwgXCYjMzQ7c2xvdHNfd2l0aGluX2J1ZGdldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKG5vc3BjLCAxLCBcJiMzNDtzbG90X292ZXJfYnVkZ2V0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEob3RoZXIsIDAsIFwmIzM0O3VuZXhwZWN0ZWRfcmVzdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuJiM0MztcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pO1xuJiM0MztcdH1cbiYjNDM7XHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxuIHtcbiBcdC8qIE1hdGNoZXMgeGF0dHJfbmFtZXMgaW4gcHJvZ3MvdGVzdF9nZXRfeGF0dHIuYyAqL1xuQEAgLTI4OCw0ICYjNDM7Mzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ZzdmVyaXR5XCYjMzQ7KSlcbiBcdFx0dGVzdF9mc3Zlcml0eSgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpbml0X2lub2RlX3hhdHRyXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfaW5pdF9pbm9kZV94YXR0cigpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNiMzc4ZGI5NTdhYTg5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgJiM0MzsxLDMxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2tmdW5jcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7X191MzIgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGluaXRfcmVzdWx0ID0gLTE7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciB4YXR0cl9uYW1lW10gPSBcJiMzNDticGYudGVzdF9sYWJlbFwmIzM0OztcbiYjNDM7Y2hhciB4YXR0cl92YWx1ZVtdID0gXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XG4mIzQzO1x0X191MzIgcGlkO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1x0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtFVk0mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7ZXZtX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O3NtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzQ2NDg0YjNmOWIwOTc5ODRiOTJkZGExYTA5ODBjNWQyZmMzY2Q5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMDE6MzE6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmMKaW5kZXggNzY4YWNhMmRjMGYwMzQuLmM0MDIzYzgyZjIxZTQwIDEwMDY0NAotLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Zzbm90aWZ5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va3MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiAKQEAgLTM3NCw2ICYjNDM7Mzc1LDgzIEBAIF9fYnBmX2tmdW5jIHN0cnVjdCBpbm9kZSAqYnBmX3JlYWxfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBkX3JlYWxfaW5vZGUoZGVudHJ5KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxOwomIzQzOwl1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjdHgtJmd0O3hhdHRyX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqbmFtZSA9IGN0eC0mZ3Q7eGF0dHJzW2ldLm5hbWU7CiYjNDM7CiYjNDM7CQlpZiAobmFtZSAmYW1wOyZhbXA7ICFzdHJuY21wKG5hbWUsIFhBVFRSX0JQRl9MU01fU1VGRklYLCBwcmVmaXhfbGVuKSkKJiM0MzsJCQluJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5CiYjNDM7ICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHQKJiM0MzsgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCAmIzM0O2JwZi5maWxlX2xhYmVsJiMzNDspCiYjNDM7ICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZQomIzQzOyAqCiYjNDM7ICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wOwomIzQzOwlzaXplX3QgbmFtZV9sZW47CiYjNDM7CXZvaWQgKnhhdHRyX3ZhbHVlOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKnhhdHRyOwomIzQzOwljb25zdCB2b2lkICp2YWx1ZTsKJiM0MzsJdTMyIHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCF4YXR0cnMgfHwgIXhhdHRycy0mZ3Q7eGF0dHJzIHx8ICFuYW1lX19zdHIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpICZndDs9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsKJiM0MzsJbmFtZV9sZW4gPSBzdHJsZW4obmFtZV9fc3RyKTsKJiM0MzsJaWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gJmd0OyBYQVRUUl9OQU1FX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLAomIzQzOwkJICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7CiYjNDM7CWlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gJmd0OyBYQVRUUl9TSVpFX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwl2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTsKJiM0MzsJaWYgKCF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBDb21iaW5lIHhhdHRyIHZhbHVlICYjNDM7IG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi8KJiM0MzsJeGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiAmIzQzOyBuYW1lX2xlbiAmIzQzOyAxLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgheGF0dHJfdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbiwgbmFtZV9fc3RyLCBuYW1lX2xlbik7CiYjNDM7CSgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwl4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwomIzQzOwlpZiAoIXhhdHRyKSB7CiYjNDM7CQlrZnJlZSh4YXR0cl92YWx1ZSk7CiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJfQomIzQzOwomIzQzOwl4YXR0ci0mZ3Q7dmFsdWUgPSB4YXR0cl92YWx1ZTsKJiM0MzsJeGF0dHItJmd0O25hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbjsKJiM0MzsJeGF0dHItJmd0O3ZhbHVlX2xlbiA9IHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmNfZW5kX2RlZnMoKTsKIAogQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcykKQEAgLTM4NSw2ICYjNDM7NDYzLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZXRfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcykKIAogc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmgKaW5kZXggMTQzNzc1YTI3YTJhMGIuLmI2NTVjNzA4ODE4ZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaApAQCAtMTksNiAmIzQzOzE5LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va19kZWZzLmgmZ3Q7CiAjdW5kZWYgTFNNX0hPT0sKIAomIzQzOy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqLwomIzQzOyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0CiYjNDM7CiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7CiAJc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oCmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V2bS5oCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVncml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRyczsKJiM0MzsKICNpZmRlZiBDT05GSUdfRVZNCiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7CiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0yMSw4ICYjNDM7MjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSwKIAkJIGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTsKIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCk7CiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTsKIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsCkBAIC02Myw4ICYjNDM7NjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLAogCiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkJICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkJCQkJICBpbnQgKnhhdHRyX2NvdW50KQomIzQzOwkJCQkJICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMTYsOCAmIzQzOzExNiw4IEBAIExTTV9IT09LKGludCwgMCwgaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSkKIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JIGludCAqeGF0dHJfY291bnQpCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CSBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7CiAKIC8qKgogICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4Ci0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnMKLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZCkKJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rcwogICoKLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsCi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC4KJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtJmd0O3hhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4KJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LSZndDt4YXR0cl9jb3VudC4KICAqCi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtJmd0O3hhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgICAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eCkKIHsKLQlpZiAodW5saWtlbHkoIXhhdHRycykpCiYjNDM7CWlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtJmd0O3hhdHRycykpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiAmYW1wO3hhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdOwomIzQzOwlyZXR1cm4gJmFtcDtjdHgtJmd0O3hhdHRyc1tjdHgtJmd0O3hhdHRyX2NvdW50JiM0MzsmIzQzO107CiB9CiAKICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4OC4uMGJlNTkwYzQwNjg5NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7CiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uOwogc3RydWN0IGxzbV9jdHg7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRycyB7CiYjNDM7CXN0cnVjdCB4YXR0ciAqeGF0dHJzOwomIzQzOwl1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7CiYjNDM7fTsKJiM0MzsKIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqLwogI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwCiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uYwppbmRleCA1NjQwNzFhOTJkN2QyMC4uMWMzZjg0YTkyNDIwMzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jCkBAIC0zMTUsNiAmIzQzOzMxNSw3IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2NyZWF0ZSkKIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2ZyZWVfc2VjdXJpdHkpCiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXRhdHRyKQogQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfZ2V0eGF0dHIpCiYjNDM7QlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfaW5pdF9zZWN1cml0eSkKIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX21rbm9kKQogQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbmVlZF9raWxscHJpdikKIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX3Bvc3Rfc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9icGYvaG9va3MuYyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jCmluZGV4IDQwZWZkZTIzM2YzYWIzLi5kN2M0NGM1YzBlMzA0NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYnBmL2hvb2tzLmMKQEAgLTMwLDYgJiM0MzszMCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKQogCiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iKSwKJiM0MzsJLmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsCiB9OwogCiBERUZJTkVfTFNNKGJwZikgPSB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCkBAIC0xMDYyLDE0ICYjNDM7MTA2MiwxNiBAQCBzdGF0aWMgaW50IGV2bV9pbm9kZV9jb3B5X3VwX3hhdHRyKHN0cnVjdCBkZW50cnkgKnNyYywgY29uc3QgY2hhciAqbmFtZSkKICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWUKICAqLwogaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkJCSAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKJiM0MzsJCQkgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpCiB7CiAJc3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTsKIAlzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKnhhdHRyczsKIAlib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7CiAJaW50IHJjOwogCiYjNDM7CXhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLSZndDt4YXR0cnMgOiBOVUxMOwogCWlmICghKGV2bV9pbml0aWFsaXplZCAmYW1wOyBFVk1fSU5JVF9ITUFDKSB8fCAheGF0dHJzKQogCQlyZXR1cm4gMDsKIApAQCAtMTA4Nyw3ICYjNDM7MTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoIWV2bV9wcm90ZWN0ZWRfeGF0dHJzKQogCQlyZXR1cm4gMDsKIAotCWV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTsKJiM0MzsJZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KGxzbV94YXR0cnMpOwogCS8qCiAJICogQXJyYXkgdGVybWluYXRvciAoeGF0dHIgbmFtZSA9IE5VTEwpIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1maWxsZWQKIAkgKiB4YXR0ciBzbG90LgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTEzMzMsOCAmIzQzOzEzMzMsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKQogewogCXN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsOwotCXN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7CiYjNDM7CXN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9OwomIzQzOwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKQEAgLTEzNDQsMTUgJiM0MzsxMzQ0LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAJaWYgKGluaXR4YXR0cnMpIHsKIAkJLyogQWxsb2NhdGUgJiM0MzsxIGFzIHRlcm1pbmF0b3IuICovCi0JCW5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCi0JCQkJICAgICBzaXplb2YoKm5ld194YXR0cnMpLCBHRlBfTk9GUyk7Ci0JCWlmICghbmV3X3hhdHRycykKJiM0MzsJCXhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCiYjNDM7CQkJCQlzaXplb2YoKnhhdHRycy54YXR0cnMpLCBHRlBfTk9GUyk7CiYjNDM7CQlpZiAoIXhhdHRycy54YXR0cnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkgewotCQlyZXQgPSBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLAotCQkJCQkJICAmYW1wO3hhdHRyX2NvdW50KTsKJiM0MzsJCXJldCA9IHNjYWxsLSZndDtobC0mZ3Q7aG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsCiYjNDM7CQkJCQkJCSAgJmFtcDt4YXR0cnMpOwogCQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FT1BOT1RTVVBQKQogCQkJZ290byBvdXQ7CiAJCS8qCkBAIC0xMzY0LDE0ICYjNDM7MTM2NCwxNCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAl9CiAKIAkvKiBJZiBpbml0eGF0dHJzKCkgaXMgTlVMTCwgeGF0dHJfY291bnQgaXMgemVybywgc2tpcCB0aGUgY2FsbC4gKi8KLQlpZiAoIXhhdHRyX2NvdW50KQomIzQzOwlpZiAoIXhhdHRycy54YXR0cl9jb3VudCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTsKJiM0MzsJcmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7CiBvdXQ6Ci0JZm9yICg7IHhhdHRyX2NvdW50ICZndDsgMDsgeGF0dHJfY291bnQtLSkKLQkJa2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTsKLQlrZnJlZShuZXdfeGF0dHJzKTsKJiM0MzsJZm9yICg7IHhhdHRycy54YXR0cl9jb3VudCAmZ3Q7IDA7IHhhdHRycy54YXR0cl9jb3VudC0tKQomIzQzOwkJa2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7CiYjNDM7CWtmcmVlKHhhdHRycy54YXR0cnMpOwogCXJldHVybiAocmV0ID09IC1FT1BOT1RTVVBQKSA/IDAgOiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjk2Miw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpOwogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CkBAIC0yOTkyLDcgJiM0MzsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJICAgICEoc2JzZWMtJmd0O2ZsYWdzICZhbXA7IFNCTEFCRUxfTU5UKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CXhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7CiAJaWYgKHhhdHRyKSB7CiAJCXJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLAogCQkJCQkJICAgJmFtcDtjb250ZXh0LCAmYW1wO2NsZW4pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05ODEsMTAgJiM0Mzs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsCiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCwKJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKIAkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKQogewotCXN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwogCiAJaWYgKCF4YXR0cikKIAkJcmV0dXJuIDA7CkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsCiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlCiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3QKICAqIEBxc3RyOiB1bnVzZWQKLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlcwotICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKQomIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnQKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSYjMzk7cyBubyBtZW1vcnkKICAqLwogc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTsKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpOwpAQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQkJdHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTsKIAotCQkJaWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LAotCQkJCVhBVFRSX1NNQUNLX1RSQU5TTVVURSwKLQkJCQlUUkFOU19UUlVFLAotCQkJCVRSQU5TX1RSVUVfU0laRQotCQkJKSkKJiM0MzsJCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywKJiM0MzsJCQkJCSBYQVRUUl9TTUFDS19UUkFOU01VVEUsCiYjNDM7CQkJCQkgVFJBTlNfVFJVRSwKJiM0MzsJCQkJCSBUUkFOU19UUlVFX1NJWkUpKQogCQkJCXJjID0gLUVOT01FTTsKIAkJfQogCX0KIAogCWlmIChyYyA9PSAwKQotCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsCi0JCQkgICAgWEFUVFJfU01BQ0tfU1VGRklYLAotCQkJICAgIGlzc3AtJmd0O3Nta19pbm9kZS0mZ3Q7c21rX2tub3duLAotCQkgICAgIHN0cmxlbihpc3NwLSZndDtzbWtfaW5vZGUtJmd0O3Nta19rbm93bikKLQkJKSkKJiM0MzsJCWlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLAomIzQzOwkJCQkgWEFUVFJfU01BQ0tfU1VGRklYLAomIzQzOwkJCQkgaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24sCiYjNDM7CQkJCSBzdHJsZW4oaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24pKSkKIAkJCXJjID0gLUVOT01FTTsKIGluc3RhbnRfaW5vZGU6CiAJaXNzcC0mZ3Q7c21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaAppbmRleCBhZTcxZTliNjkwNTE4Ni4uMjYzOWY5Zjk0MTk1NWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaApAQCAtOTIsNCAmIzQzOzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKIAkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrOwogZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhazsKIAomIzQzO3N0cnVjdCBsc21feGF0dHJzOwomIzQzO2V4dGVybiBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKJiM0MzsJCQkJY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhazsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYwppbmRleCA0M2EyNmVjNjlhOGUzNi4uOGIyZTBkNDMzYWVhMmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogI2luY2x1ZGUgJiMzNDt0ZXN0X2dldF94YXR0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9mc3Zlcml0eS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaCYjMzQ7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3MmIzM0OzsKIApAQCAtMjY4LDYgJiM0MzsyNjksMTE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZCkKIAlyZW1vdmUodGVzdGZpbGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDsKJiM0MzsJaW50IGZkID0gLTEsIGVycjsKJiM0MzsJY2hhciB2YWx1ZV9vdXRbNjRdOwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NfbmV3JiMzNDs7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX25ldywgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZV9maWxlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdCwgMCwgJiMzNDtpbml0X3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogaW5pdHhhdHRycyBwcmVwZW5kcyAmIzM0O3NlY3VyaXR5LiYjMzQ7IHRvIHRoZSBuYW1lLiAqLwomIzQzOwllcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsICYjMzQ7c2VjdXJpdHkuYnBmLnRlc3RfbGFiZWwmIzM0OywgdmFsdWVfb3V0LAomIzQzOwkJICAgICAgIHNpemVvZih2YWx1ZV9vdXQpKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFTk9EQVRBKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXG4mIzM0OywKJiM0MzsJCSAgICAgICBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9HRShlcnIsIDAsICYjMzQ7Z2V0eGF0dHImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7eGF0dHJfdmFsdWUpLCAmIzM0O3hhdHRyX3NpemUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShzdHJuY21wKHZhbHVlX291dCwgJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OywKJiM0MzsJCQkgIHNpemVvZigmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMCYjMzQ7KSksIDAsCiYjNDM7CQkgICYjMzQ7eGF0dHJfdmFsdWUmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShmZCk7CiYjNDM7CXRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTsKJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX25ldyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovCiYjNDM7I2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0CiYjNDM7ICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLgomIzQzOyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307CiYjNDM7CWNvbnN0IGNoYXIgKnRlc3RmaWxlX3Nsb3QgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdCYjMzQ7OwomIzQzOwlpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDsKJiM0MzsJaW50IGksIGZkID0gLTE7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0Oz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJc2tlbFtpXS0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CQlsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS0mZ3Q7cHJvZ3MudGVzdF9pbml0X2lub2RlX3hhdHRyKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGVfZmlsZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdAomIzQzOwkgKiB0aGUgYnVkZ2V0IGdldHMgLUVOT1NQQy4gVGhlIG9yZGVyIGluIHdoaWNoIHByb2dyYW1zIHJ1biBpcyBub3QKJiM0MzsJICogZ3VhcmFudGVlZCwgc28gY291bnQgcmVzdWx0cyBpbnN0ZWFkIG9mIGluZGV4aW5nLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByZXMgPSBza2VsW2ldLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdDsKJiM0MzsKJiM0MzsJCWlmIChyZXMgPT0gMCkKJiM0MzsJCQlvayYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlIGlmIChyZXMgPT0gLUVOT1NQQykKJiM0MzsJCQlub3NwYyYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlCiYjNDM7CQkJb3RoZXImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsICYjMzQ7c2xvdHNfd2l0aGluX2J1ZGdldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKG5vc3BjLCAxLCAmIzM0O3Nsb3Rfb3Zlcl9idWRnZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShvdGhlciwgMCwgJiMzNDt1bmV4cGVjdGVkX3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDs9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7CiYjNDM7CQl0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7CiYjNDM7CX0KJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX3Nsb3QpOwomIzQzO30KJiM0MzsKIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIHsKIAkvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi8KQEAgLTI4OCw0ICYjNDM7Mzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIAogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZnN2ZXJpdHkmIzM0OykpCiAJCXRlc3RfZnN2ZXJpdHkoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpbml0X2lub2RlX3hhdHRyJiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0JiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2IzNzhkYjk1N2FhODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMKQEAgLTAsMCAmIzQzOzEsMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9rZnVuY3MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO19fdTMyIG1vbml0b3JlZF9waWQ7CiYjNDM7aW50IGluaXRfcmVzdWx0ID0gLTE7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgeGF0dHJfbmFtZVtdID0gJiMzNDticGYudGVzdF9sYWJlbCYjMzQ7OwomIzQzO2NoYXIgeGF0dHJfdmFsdWVbXSA9ICYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwJiMzNDs7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtLnMvaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyOwomIzQzOwlfX3UzMiBwaWQ7CiYjNDM7CiYjNDM7CXBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwlpZiAocGlkICE9IG1vbml0b3JlZF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwlpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEJQRiBLZnVuYyBmb3IgSW5vZGUgWGF0dHIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBUaGlzIGlzIHByZXR0eSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGxldCBCUEYgTFNNIHByb2dyYW1zIHNldCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIG9uIGEgKm5ldyogaW5vZGUgcmlnaHQgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgcHJvY2Vzcy4gTG9va2luZyBhdCB0aGUgZmlsZXMgaXQgdG91Y2hlcywgaXQmIzM5O3MgaW1wYWN0aW5nIGEgd2lkZSByYW5nZSBvZiBzZWN1cml0eSBhcmVhczogYGZzL2JwZl9mc19rZnVuY3MuY2AsIHRoZSB2YXJpb3VzIGBpbmNsdWRlL2xpbnV4LypgIGhlYWRlcnMgcmVsYXRlZCB0byBCUEYsIEVWTSwgYW5kIExTTSBob29rcywgYXMgd2VsbCBhcyBjb3JlIHNlY3VyaXR5IGNvbXBvbmVudHMgaW4gYGtlcm5lbC9icGYvYnBmX2xzbS5jYCwgYHNlY3VyaXR5L2JwZi9ob29rcy5jYCwgYHNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY2AsIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBudW1iZXIgb2YgdG91Y2hwb2ludHMhCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG5ldyBrZnVuYyBpcyBwcm9wZXJseSByZWdpc3RlcmVkIGFuZCBhY2Nlc3NpYmxlLiBJIHNlZSBpdCYjMzk7cyBhZGRlZCB0byBgYnBmX2ZzX2tmdW5jX3NldF9pZHNgIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBhbHNvIG1vZGlmeWluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZTsgaW5zdGVhZCBvZiB0aGUgb2xkZXIgYHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50YCwgaXQmIzM5O3Mgbm93IHVzaW5nIGBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzYC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGZvciB0aG9zZSBjcml0aWNhbCBzdWJzeXN0ZW1zIOKAkyBMU00sIEVWTSwgU0VMaW51eCwgU21hY2ssIGFuZCBCUEYuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ugc29tZSBoZWFkYWNoZXMgaWYgbm90IHByb3Blcmx5IGhhbmRsZWQsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHdlIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgdXNlZCBhY3Jvc3MgdGhlIGNvZGViYXNlLgoKVGhlIG5leHQgc3RlcCBpcyB0byBjb25zaWRlciBmdXp6aW5nLiBHaXZlbiB0aGUga2VybmVsLWxldmVsIGludGVncmF0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXcgeGF0dHIgc2V0dGluZyBjYXBhYmlsaXRpZXMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXMgYWJzb2x1dGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGF0IEJQRiBMU00gZnVuY3Rpb25hbGl0eSB3aWxsIHJlcXVpcmUgYENPTkZJR19CUEZfTFNNYC4gTGV0IG1lIGNoZWNrIGlmIHRoZSBrZnVuYyBpdHNlbGYgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AgaGFzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhc3NvY2lhdGVkIHdpdGggaXQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcsIG9mIGNvdXJzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZnNfa2Z1bmNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEzMD1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVx0XHQmIzQzOz0gem9uZWZzL1xuZnMvTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19CUEZfTFNNKVx0XHQmIzQzOz0gYnBmX2ZzX2tmdW5jcy5vXG5mcy9NYWtlZmlsZS0xMzItb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXHQmIzQzOz0gcmVzY3RybC9cbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmM9NDY3PUJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ2OC1cbmZzL2JwZl9mc19rZnVuY3MuYzo0Njk6c3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbmZzL2JwZl9mc19rZnVuY3MuYy00NzAte1xuLS1cbmZzL2JwZl9mc19rZnVuY3MuYz01MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTUwOS1cdC5zZXQgPSBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcyxcbmZzL2JwZl9mc19rZnVuY3MuYzo1MTA6XHQuZmlsdGVyID0gYnBmX2ZzX2tmdW5jc19maWx0ZXIsXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTExLX07XG5mcy9icGZfZnNfa2Z1bmNzLmMtNTEyLVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxMzpzdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcbmZzL2JwZl9mc19rZnVuY3MuYy01MTQte1xuLS1cbmZzL2JwZl9mc19rZnVuY3MuYy01MTctXG5mcy9icGZfZnNfa2Z1bmNzLmM6NTE4OmxhdGVfaW5pdGNhbGwoYnBmX2ZzX2tmdW5jc19pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfTFNNYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IGhlcmUuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEdvdHRhIGJlIHRob3JvdWdoLgoKUmlnaHQsIHRoZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGlzIGRlZmluZWQgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCB0aGF0IGZpbGUgaXMgbXkgbmV4dCB0YXJnZXQuIEFuZCB0aGUgaG9vaywgYGlub2RlX2luaXRfc2VjdXJpdHlgLCB0aGF0JiMzOTtzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgYW5kIEkga25vdyB0aGF0JiMzOTtzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZCB3aGljaCBpc24mIzM5O3QgYSBwcm9ibGVtIGZvciBtZS4gT2theSwgc28gdGhhdCBrZnVuYyB1dGlsaXplcyBgbHNtX2dldF94YXR0cl9zbG90YC4KCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGBsc21fZ2V0X3hhdHRyX3Nsb3RgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgaW5vZGVzIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JwZl9mc19rZnVuY3MuYz0zNzg9c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtMzkyLS8qKlxuZnMvYnBmX2ZzX2tmdW5jcy5jOjM5MzogKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHlcbmZzL2JwZl9mc19rZnVuY3MuYy0zOTQtICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAxLSAqL1xuZnMvYnBmX2ZzX2tmdW5jcy5jOjQwMjpfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbmZzL2JwZl9mc19rZnVuY3MuYy00MDMtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmM9NDY1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDY2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ2Ny1CVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oPTk1PXN0cnVjdCBsc21feGF0dHJzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaDo5NjpleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oLTk3LVx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYz0xNz1pbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjctXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcdTAwMjZ2YWx1ZV9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jOjI4Olx0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhhdHRyIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9uIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXMgY2xlYXJseSB0aGUga2V5IHBsYXllciBoZXJlLiBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gaGFwcGVucy4gQnV0IHRoZW4gdGhlcmUmIzM5O3MgYWxzbyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHRoaXMgaGFzIHRvIGRvIHdpdGggaW50ZWdyYXRpbmcgQlBGIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgZXhpc3Rpbmcgc2VjdXJpdHkgZnJhbWV3b3JrIGR1cmluZyBpbm9kZSBpbml0aWFsaXphdGlvbi4gSSByZWFsbHkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGltcGFjdCB0aGUgc2VjdXJpdHkgY29udGV4dC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgdGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hbm9uX2lub2Rlcy5jPTkzPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBhbm9uX2lub2RlX2ZzX3R5cGUgPSB7XG4tLVxuZnMvYW5vbl9pbm9kZXMuYy0xMDYtICogVGhlIGZ1bmN0aW9uIGVuc3VyZXMgcHJvcGVyIHNlY3VyaXR5IGluaXRpYWxpemF0aW9uIHRocm91Z2ggdGhlIExTTSBob29rXG5mcy9hbm9uX2lub2Rlcy5jOjEwNzogKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKS5cbmZzL2Fub25faW5vZGVzLmMtMTA4LSAqXG4tLVxuZnMvYW5vbl9pbm9kZXMuYz0xMTE9c3RydWN0IGlub2RlICphbm9uX2lub2RlX21ha2Vfc2VjdXJlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvYW5vbl9pbm9kZXMuYy0xMjEtXHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YW5vbl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvYW5vbl9pbm9kZXMuYzoxMjI6XHRlcnJvciA9XHRzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oaW5vZGUsIFx1MDAyNlFTVFIobmFtZSksXG5mcy9hbm9uX2lub2Rlcy5jLTEyMy1cdFx0XHRcdFx0XHQgIGNvbnRleHRfaW5vZGUpO1xuLS1cbmZzL2J0cmZzL3hhdHRyLmM9NTIxPWludCBidHJmc194YXR0cl9zZWN1cml0eV9pbml0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLFxuLS1cbmZzL2J0cmZzL3hhdHRyLmMtNTI0LXtcbmZzL2J0cmZzL3hhdHRyLmM6NTI1Olx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL2J0cmZzL3hhdHRyLmMtNTI2LVx0XHRcdFx0XHQgICAgXHUwMDI2YnRyZnNfaW5pdHhhdHRycywgdHJhbnMpO1xuLS1cbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYz00OD1leHQyX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0Mi94YXR0cl9zZWN1cml0eS5jLTUwLXtcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYzo1MTpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMtNTItXHRcdFx0XHRcdCAgICBcdTAwMjZleHQyX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYz01NT1leHQ0X2luaXRfc2VjdXJpdHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTU3LXtcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYzo1ODpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNTktXHRcdFx0XHRcdCAgICBcdTAwMjZleHQ0X2luaXR4YXR0cnMsIGhhbmRsZSk7XG4tLVxuZnMvZjJmcy94YXR0ci5jPTE1NT1pbnQgZjJmc19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMveGF0dHIuYy0xNTcte1xuZnMvZjJmcy94YXR0ci5jOjE1ODpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9mMmZzL3hhdHRyLmMtMTU5LVx0XHRcdFx0ZjJmc19pbml0eGF0dHJzLCBpZm9saW8pO1xuLS1cbmZzL2dmczIvaW5vZGUuYz03MDA9c3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2dmczIvaW5vZGUuYy04OTEtXG5mcy9nZnMyL2lub2RlLmM6ODkyOlx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KFx1MDAyNmlwLVx1MDAzZWlfaW5vZGUsIFx1MDAyNmRpcC1cdTAwM2VpX2lub2RlLCBuYW1lLFxuZnMvZ2ZzMi9pbm9kZS5jLTg5My1cdFx0XHRcdFx0ICAgICBcdTAwMjZnZnMyX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL2hmc3BsdXMveGF0dHJfc2VjdXJpdHkuYz02OD1pbnQgaGZzcGx1c19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMveGF0dHJfc2VjdXJpdHkuYy03MC17XG5mcy9oZnNwbHVzL3hhdHRyX3NlY3VyaXR5LmM6NzE6XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuZnMvaGZzcGx1cy94YXR0cl9zZWN1cml0eS5jLTcyLVx0XHRcdFx0XHRcdTAwMjZoZnNwbHVzX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL2pmZnMyL3NlY3VyaXR5LmM9NDM9aW50IGpmZnMyX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvamZmczIvc2VjdXJpdHkuYy00NS17XG5mcy9qZmZzMi9zZWN1cml0eS5jOjQ2Olx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL2pmZnMyL3NlY3VyaXR5LmMtNDctXHRcdFx0XHRcdCAgICBcdTAwMjZqZmZzMl9pbml0eGF0dHJzLCBOVUxMKTtcbi0tXG5mcy9qZnMveGF0dHIuYz0xMDQ5PWludCBqZnNfaW5pdF9zZWN1cml0eSh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2pmcy94YXR0ci5jLTEwNTEte1xuZnMvamZzL3hhdHRyLmM6MTA1MjpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9qZnMveGF0dHIuYy0xMDUzLVx0XHRcdFx0XHQgICAgXHUwMDI2amZzX2luaXR4YXR0cnMsIFx1MDAyNnRpZCk7XG4tLVxuZnMvb2NmczIveGF0dHIuYz03MzA4PWludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzMxOC1cdGlmIChzaSkge1xuZnMvb2NmczIveGF0dHIuYzo3MzE5Olx0XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9vY2ZzMi94YXR0ci5jLTczMjAtXHRcdFx0XHRcdFx0ICAgXHUwMDI2b2NmczJfaW5pdHhhdHRycywgc2kpO1xuZnMvb2NmczIveGF0dHIuYy03MzIxLVx0XHQvKlxuZnMvb2NmczIveGF0dHIuYzo3MzIyOlx0XHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZG9lcyBub3QgcmV0dXJuIC1FT1BOT1RTVVBQLFxuZnMvb2NmczIveGF0dHIuYy03MzIzLVx0XHQgKiB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB4YXR0ciBvdXJzZWx2ZXMuXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MzMwLVxuZnMvb2NmczIveGF0dHIuYzo3MzMxOlx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL29jZnMyL3hhdHRyLmMtNzMzMi1cdFx0XHRcdFx0ICAgIFx1MDAyNm9jZnMyX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL3JhbWZzL2lub2RlLmM9OTg9cmFtZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL3JhbWZzL2lub2RlLmMtMTA0LVx0aWYgKGlub2RlKSB7XG5mcy9yYW1mcy9pbm9kZS5jOjEwNTpcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsXG5mcy9yYW1mcy9pbm9kZS5jLTEwNi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIE5VTEwsXG4tLVxuZnMvcmFtZnMvaW5vZGUuYz0xMzY9c3RhdGljIGludCByYW1mc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9yYW1mcy9pbm9kZS5jLTE0NS1cbmZzL3JhbWZzL2lub2RlLmM6MTQ2Olx0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpcixcbmZzL3JhbWZzL2lub2RlLmMtMTQ3LVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgTlVMTCxcbi0tXG5mcy9yYW1mcy9pbm9kZS5jPTE2Nj1zdGF0aWMgaW50IHJhbWZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvcmFtZnMvaW5vZGUuYy0xNzUtXG5mcy9yYW1mcy9pbm9kZS5jOjE3NjpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLFxuZnMvcmFtZnMvaW5vZGUuYy0xNzctXHRcdFx0XHRcdCAgICAgXHUwMDI2ZmlsZV9kZW50cnkoZmlsZSktXHUwMDNlZF9uYW1lLCBOVUxMLFxuLS1cbmZzL3ViaWZzL3hhdHRyLmM9NjM1PWludCB1Ymlmc19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL3ViaWZzL3hhdHRyLmMtNjM5LVxuZnMvdWJpZnMveGF0dHIuYzo2NDA6XHRlcnIgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkZW50cnksIHFzdHIsXG5mcy91Ymlmcy94YXR0ci5jLTY0MS1cdFx0XHRcdFx0ICAgXHUwMDI2aW5pdF94YXR0cnMsIE5VTEwpO1xuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTg2PXhmc19pbm9kZV9pbml0X3NlY3VyaXR5KFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTkwLXtcbmZzL3hmcy94ZnNfaW9wcy5jOjkxOlx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL3hmcy94ZnNfaW9wcy5jLTkyLVx0XHRcdFx0XHQgICAgIFx1MDAyNnhmc19pbml0eGF0dHJzLCBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MjcyPWV4dGVybiBpbnQgbW1hcF9taW5fYWRkcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTI3NS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoyNzY6Lyogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSBjYWxsYmFjayBmdW5jdGlvbiB0byB3cml0ZSB4YXR0cnMgKi9cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0yNzctdHlwZWRlZiBpbnQgKCppbml0eGF0dHJzKSAoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDA1PXZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDY6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwOC1cdFx0XHRcdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQwOTppbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEwLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTg4NT1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtODkzLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjg5NDpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtODk1LVx0XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05MDItXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6OTAzOnN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTkwNC1cdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jPTE3OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYnBmX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5rZXJuZWwvYnBmL2lub2RlLmMtMTg4LVxua2VybmVsL2JwZi9pbm9kZS5jOjE4OTpcdHJldCA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmtlcm5lbC9icGYvaW5vZGUuYy0xOTAtXHRcdFx0XHRcdCAgIGJwZl9mc19pbml0eGF0dHJzLCBOVUxMKTtcbi0tXG5rZXJuZWwvYnBmL2lub2RlLmM9MzYzPXN0YXRpYyBpbnQgYnBmX21rb2JqX29wcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqcmF3LFxuLS1cbmtlcm5lbC9icGYvaW5vZGUuYy0zNzQtXG5rZXJuZWwvYnBmL2lub2RlLmM6Mzc1Olx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLFxua2VybmVsL2JwZi9pbm9kZS5jLTM3Ni1cdFx0XHRcdFx0ICAgYnBmX2ZzX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz00Mjc9c3RhdGljIGludCBicGZfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jLTQ0Ni1cbmtlcm5lbC9icGYvaW5vZGUuYzo0NDc6XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsXG5rZXJuZWwvYnBmL2lub2RlLmMtNDQ4LVx0XHRcdFx0XHQgICBicGZfZnNfaW5pdHhhdHRycywgTlVMTCk7XG4tLVxubW0vbWVtZmQuYz00NTg9c3RydWN0IGZpbGUgKm1lbWZkX2FsbG9jX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbm1tL21lbWZkLmMtNDc2LVx0aW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xubW0vbWVtZmQuYzo0Nzc6XHRlcnIgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oaW5vZGUsXG5tbS9tZW1mZC5jLTQ3OC1cdFx0XHRcdTAwMjZRU1RSKE1FTUZEX0FOT05fTkFNRSksIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9Mzg1MD1zaG1lbV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxubW0vc2htZW0uYy0zODY2LVx0XHRnb3RvIG91dF9pcHV0O1xubW0vc2htZW0uYzozODY3Olx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsXG5tbS9zaG1lbS5jLTM4NjgtXHRcdFx0XHRcdCAgICAgc2htZW1faW5pdHhhdHRycywgTlVMTCk7XG4tLVxubW0vc2htZW0uYz0zODg5PXNobWVtX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbm1tL3NobWVtLmMtMzkwMC1cdH1cbm1tL3NobWVtLmM6MzkwMTpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBOVUxMLFxubW0vc2htZW0uYy0zOTAyLVx0XHRcdFx0XHQgICAgIHNobWVtX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9NDA3OT1zdGF0aWMgaW50IHNobWVtX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbm1tL3NobWVtLmMtNDA5Ni1cbm1tL3NobWVtLmM6NDA5NzpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLFxubW0vc2htZW0uYy00MDk4LVx0XHRcdFx0XHQgICAgIHNobWVtX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9NDE5MD1zdGF0aWMgaW50IHNobWVtX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTQyMjQtLypcbm1tL3NobWVtLmM6NDIyNTogKiBDYWxsYmFjayBmb3Igc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgpIGZvciBhY3F1aXJpbmcgeGF0dHJzLlxubW0vc2htZW0uYy00MjI2LSAqL1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYz0xMDY0PWludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtMTA3OC1cdC8qXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM6MTA3OTpcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKSBtYWtlcyBzdXJlIHRoYXQgdGhlIHhhdHRycyBhcnJheSBpc1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTEwODAtXHQgKiBjb250aWd1b3VzLCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHNlY3VyaXR5LmV2bSwgYW5kIHRoYXQgdGhlcmUgaXNcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTEzMDI9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKTtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzMDQtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzMDU6ICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgpIC0gSW5pdGlhbGl6ZSBhbiBpbm9kZSYjMzk7cyBMU00gY29udGV4dFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzA2LSAqIEBpbm9kZTogdGhlIGlub2RlXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzMwLSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzMxOmludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzMyLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3Ni19XG5zZWN1cml0eS9zZWN1cml0eS5jOjEzNzc6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3OC1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3OS0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTM4MDogKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzODEtICogQGlub2RlOiB0aGUgaW5vZGVcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzOTAtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzOTE6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzkyLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMjcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbnRlcnNlY3Rpb24gb2YgQlBGLCBMU00sIGFuZCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoZSBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyIGhlcmUsIGNhbGxlZCBieSBudW1lcm91cyBmaWxlc3lzdGVtcy4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGVudHJ5LiBUaGVuIHdlIGhhdmUgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYSBrZnVuYywgYmVpbmcgaW52b2tlZCBmcm9tIGEgQlBGIHByb2dyYW0uIEludGVyZXN0aW5nLiBUaGF0IHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jYCwgYHRlc3RfaW5pdF9pbm9kZV94YXR0cmAsIGlzIHNob3dpbmcgdXMgdGhlIGRpcmVjdCBsaW5rIOKAkyB0aGUgQlBGIHByb2dyYW0gYXR0YWNoZXMgdG8gYGxzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlgIGFuZCB0aGVuIGNhbGxzIGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19CUEZfTFNNYCBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLiBTaW5jZSBgQ09ORklHX0JQRl9MU01gIGltcGxpZXMgYENPTkZJR19TRUNVUklUWWAsIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBOb3RoaW5nIGFib3V0IG5ldHdvcmsgc2VjdXJpdHkgaGVyZSwgc28gYENPTkZJR19TRUNVUklUWV9ORVRXT1JLYCBpcyBpcnJlbGV2YW50LCBJIHRoaW5rLiBBbmQgc2luY2UgYENPTkZJR19CUEZfTFNNYCBpbXBsaWVzIGBDT05GSUdfQlBGX1NZU0NBTExgLCB0aGF0JiMzOTtzIGNvdmVyZWQgYXMgd2VsbC4gU28sIHRoZXNlIGFyZSB0aGUgZGVwZW5kZW5jaWVzLgoKSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXRzZWxmIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgIG9uZSBtb3JlIHRpbWUuIE5lZWQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGF0IGtmdW5jIGZ1bGx5IGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIGxpbmNocGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9icGZfZnNfa2Z1bmNzLmM9Mzc4PXN0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM5Mi0vKipcbmZzL2JwZl9mc19rZnVuY3MuYzozOTM6ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG5mcy9icGZfZnNfa2Z1bmNzLmMtMzk0LSAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQwMS0gKi9cbmZzL2JwZl9mc19rZnVuY3MuYzo0MDI6X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAzLVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ2NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ2NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2luaXRfaW5vZGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbmZzL2JwZl9mc19rZnVuY3MuYy00NjctQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaD05NT1zdHJ1Y3QgbHNtX3hhdHRycztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg6OTY6ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC05Ny1cdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmM9MTc9aW50IEJQRl9QUk9HKHRlc3RfaW5pdF9pbm9kZV94YXR0ciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI3LVx0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXHUwMDI2dmFsdWVfcHRyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYzoyODpcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcdTAwMjZ2YWx1ZV9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBMU00gYW5kIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmV3IEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBzeW1ib2wgSSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB0aGF0IGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBpcyBhbHNvIGdldHRpbmcgdHdlYWtlZCB0byB1c2UgYHN0cnVjdCBsc21feGF0dHJzYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGF0JiMzOTtzIGEgY2VudHJhbCBMU00gZnVuY3Rpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBhcyBhIG5ldyBCUEYga2Z1bmMgaXMgdGhlIGtleSBoZXJlLgoKRmlyc3QgdGhpbmdzIGZpcnN0OiBJJiMzOTttIGFkZGluZyBib3RoIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYEJQRl9MU01gIGluIG15IGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBgRVZNYCBpbnRvIHRoZSBlcXVhdGlvbi4gWWVwLCBJIHNlZSB0aGF0IGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAgaGFzIGJlZW4gbW9kaWZpZWQsIHNvIEkmIzM5O2xsIGFkZCBgRVZNYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHRob3NlIEVWTSBjb2RlIHBhdGhzIGFyZSBpbmNsdWRlZCBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgYWxzbyBhIGdvb2QgaWRlYSB0byBjb25zaWRlciB0aGUgaW1wYWN0cyBvbiBTRUxpbnV4IGFuZCBTTUFDSywgc28gbGV0JiMzOTtzIGNoZWNrIHRob3NlIG1vZGlmaWNhdGlvbnMgYXMgd2VsbC4gV2hpbGUgYFNFQ1VSSVRZX1NFTElOVVhgIGFuZCBgU0VDVVJJVFlfU01BQ0tgIGFyZSBwcm9iYWJseSB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LCBpdCYjMzk7cyBwcnVkZW50IHRvIGV4cGxpY2l0bHkgbGlzdCB0aGVtIGluIGBFbmFibGVDb25maWdzYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBhbmQgYHNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yOTQyPXN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI5NjItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mjk2MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yOTY0LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDA4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwMDk6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwMTAtXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzUyOT1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTY3LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9mcmVlX3NlY3VyaXR5LCBzZWxpbnV4X2lub2RlX2ZyZWVfc2VjdXJpdHkpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc1Njg6XHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHksIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU2OTpcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbiksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU3MC1cdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVXBkYXRlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4gSSBuZWVkIHRvIGFkZCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGBFVk1gLCBhbmQgYEJQRl9MU01gIHRvIGBFbmFibGVDb25maWdzYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZvciB0aGUgc2VjdXJpdHkgYW5kIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSB0YXJnZXRpbmcuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZW5zdXJlIHRoYXQgdGhlaXIgY29ycmVzcG9uZGluZyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIHVzZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGFuZCBgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eWAuIE5vdywgYmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBgYnBmX3hhdHRyc191c2VkYCBpcyBzZXQgdXAgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBiZSBhbiBlYXN5IGNoZWNrLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbGwgY29tcG9uZW50cyBhcmUgYWNjb3VudGVkIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3hhdHRyc191c2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JwZl9mc19rZnVuY3MuYz0zNzM9X19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM3Ny1cbmZzL2JwZl9mc19rZnVuY3MuYzozNzg6c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbmZzL2JwZl9mc19rZnVuY3MuYy0zNzkte1xuLS1cbmZzL2JwZl9mc19rZnVuY3MuYz00MDI9X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQxNC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5mcy9icGZfZnNfa2Z1bmNzLmM6NDE1Olx0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFx1MDAzZT0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbmZzL2JwZl9mc19rZnVuY3MuYy00MTYtXHRcdHJldHVybiAtRU5PU1BDO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwMwoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogRXhwYW5kaW5nIHRoZSBCUEYgTFNNIENvdmVyYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aGlzIG5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBjb3VsZCBkaXJlY3RseSB0YXJnZXQgYGJwZl94YXR0cnNfdXNlZGAsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIHN5bWJvbC4gU3l6a2FsbGVyIGNhbiYjMzk7dCB3b3JrIHdpdGggdGhhdCBkaXJlY3RseSwgYnV0IGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBBaGEhIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgKmlzKiB0aGUga2Z1bmMgSSBuZWVkLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgdGhlIGZ1enppbmcgc2V0dXA6CgoqICAgKipgV29ydGhGdXp6aW5nOiB0cnVlYCoqOiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlLgoqICAgKipgRm9jdXNTeW1ib2xzOmAqKgoKICAgICogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgOiBUaGlzIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSB0YXJnZXQuCiAgICAqICAgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgCiAgICAqICAgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YAogICAgKiAgIGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgCiAgICAqICAgYHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlgOiAgQWxsIG9mIHRoZXNlIGFyZSAqY3JpdGljYWxseSogaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdGhlIExTTSBob29rcyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCB0byB1c2UgdGhlIG5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGZ1bmN0aW9uYWxpdHkuIFRoZXNlIGFyZSB0aGUgdG91Y2ggcG9pbnRzIHRoYXQgbmVlZCB0aG9yb3VnaCBjb3ZlcmFnZS4KCiogICAqKmBFbmFibGVDb25maWdzOmAqKgoKICAgICogICBgQlBGX0xTTWA6IE9idmlvdXNseSwgdGhpcyBpcyBmdW5kYW1lbnRhbC4KICAgICogICBgRVZNYAogICAgKiAgIGBTRUNVUklUWV9TRUxJTlVYYAogICAgKiAgIGBTRUNVUklUWV9TTUFDS2A6IE5lZWQgdG8gbWFrZSBzdXJlIGFsbCB0aGVzZSBhcmUgZW5hYmxlZCBzaW5jZSB0aGUga2Z1bmMgY2hhbmdlcyBMU00gaG9va3MgdGhhdCB0aGVzZSBsZXZlcmFnZS4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBub3ZlbCBtZWNoYW5pc20gZm9yIEJQRiBMU00gcHJvZ3JhbXMgdG8gbWFuYWdlIHhhdHRycyBvbiBuZXcgaW5vZGVzLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vayB0byB1c2UgdGhlIGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlIGFjcm9zcyBtdWx0aXBsZSBMU01zIChjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2spIG1lYW5zIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBjcm9zcy1MU00gY2hhbmdlcyBtYWtlIHRoaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBmb3IgZmluZGluZyBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIFRpbWUgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O0VWTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luaXRfaW5vZGVfeGF0dHImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7c21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBJdCBtb2RpZmllcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBzdHJ1Y3R1cmUsIGFmZmVjdGluZyBjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2suIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O0VWTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luaXRfaW5vZGVfeGF0dHImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7c21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBJdCBtb2RpZmllcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBzdHJ1Y3R1cmUsIGFmZmVjdGluZyBjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2suIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6MjUuNjY5NTgwMjk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5OTYwNjc2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6MjUuNjY5NjAzNjU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA5NDA1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDY0ODRiM2Y5YjA5Nzk4NGI5MmRkYTFhMDk4MGM1ZDJmYzNjZDk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMDE6MzE6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmM0MDIzYzgyZjIxZTQwIDEwMDY0NFxcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc25vdGlmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sc21faG9va3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXR0ci5oXFx1MDAzZVxcbiBcXG5AQCAtMzc0LDYgKzM3NSw4MyBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDE7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjdHgtXFx1MDAzZXhhdHRyX2NvdW50OyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqbmFtZSA9IGN0eC1cXHUwMDNleGF0dHJzW2ldLm5hbWU7XFxuK1xcbitcXHRcXHRpZiAobmFtZSBcXHUwMDI2XFx1MDAyNiAhc3RybmNtcChuYW1lLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwgcHJlZml4X2xlbikpXFxuK1xcdFxcdFxcdG4rKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gbjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxcbisgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dFxcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcXFwiYnBmLmZpbGVfbGFiZWxcXFwiKVxcbisgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlXFxuKyAqXFxuKyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xcbitcXHRzaXplX3QgbmFtZV9sZW47XFxuK1xcdHZvaWQgKnhhdHRyX3ZhbHVlO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xcbitcXHRjb25zdCB2b2lkICp2YWx1ZTtcXG4rXFx0dTMyIHZhbHVlX2xlbjtcXG4rXFxuK1xcdGlmICgheGF0dHJzIHx8ICF4YXR0cnMtXFx1MDAzZXhhdHRycyB8fCAhbmFtZV9fc3RyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFxcdTAwM2U9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXG4rXFx0bmFtZV9sZW4gPSBzdHJsZW4obmFtZV9fc3RyKTtcXG4rXFx0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXFx1MDAzZSBYQVRUUl9OQU1FX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsXFxuK1xcdFxcdCAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHR2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpO1xcbitcXHRpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuIFxcdTAwM2UgWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XFxuK1xcdGlmICghdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cXG4rXFx0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiArIG5hbWVfbGVuICsgMSwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIXhhdHRyX3ZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1lbWNweSh4YXR0cl92YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbik7XFxuK1xcdG1lbWNweSh4YXR0cl92YWx1ZSArIHZhbHVlX2xlbiwgbmFtZV9fc3RyLCBuYW1lX2xlbik7XFxuK1xcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gKyBuYW1lX2xlbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcXG4rXFx0aWYgKCF4YXR0cikge1xcbitcXHRcXHRrZnJlZSh4YXR0cl92YWx1ZSk7XFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHR9XFxuK1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWUgPSB4YXR0cl92YWx1ZTtcXG4rXFx0eGF0dHItXFx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuO1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWVfbGVuID0gdmFsdWVfbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuIFxcbiBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9mc19rZnVuY19zZXRfaWRzKVxcbkBAIC0zODUsNiArNDYzLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG5pbmRleCAxNDM3NzVhMjdhMmEwYi4uYjY1NWM3MDg4MThlNTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxcbkBAIC0xOSw2ICsxOSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sc21faG9va19kZWZzLmhcXHUwMDNlXFxuICN1bmRlZiBMU01fSE9PS1xcbiBcXG4rLyogbWF4IGJwZiB4YXR0cnMgcGVyIGlub2RlICovXFxuKyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0XFxuK1xcbiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7XFxuIFxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSBfX3JjdSAqc3RvcmFnZTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldm0uaCBiL2luY2x1ZGUvbGludXgvZXZtLmhcXG5pbmRleCA5MTNmNDU3M2IyMDM4ZS4uNTI4ZjM2MGYzMzA4ZGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXZtLmhcXG5AQCAtMTIsNiArMTIsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXR0ci5oXFx1MDAzZVxcbiBcXG4rc3RydWN0IGxzbV94YXR0cnM7XFxuK1xcbiAjaWZkZWYgQ09ORklHX0VWTVxcbiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7XFxuIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5AQCAtMjEsOCArMjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxcbiBcXHRcXHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XFxuIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTtcXG4gZXh0ZXJuIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2lmX2VuYWJsZWQoY29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUpO1xcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxcbkBAIC02Myw4ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcwLi41YjJkZTc4NjVjZTgxYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTExNiw4ICsxMTYsOCBAQCBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2FsbG9jX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KVxcbiBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0IGludCAqeGF0dHJfY291bnQpXFxuK1xcdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbkBAIC0yMDAsMjAgKzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuIC8qKlxcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcXG4tICogQHhhdHRyczogYXJyYXkgc3RvcmluZyBMU00tcHJvdmlkZWQgeGF0dHJzXFxuLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZClcXG4rICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcXG4gICpcXG4tICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAeGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhbiB4YXR0cixcXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXFxuKyAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQGN0eC1cXHUwMDNleGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhblxcbisgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVxcdTAwM2V4YXR0cl9jb3VudC5cXG4gICpcXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQGN0eC1cXHUwMDNleGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCBsc21feGF0dHJzICpjdHgpXFxuIHtcXG4tXFx0aWYgKHVubGlrZWx5KCF4YXR0cnMpKVxcbitcXHRpZiAodW5saWtlbHkoIWN0eCB8fCAhY3R4LVxcdTAwM2V4YXR0cnMpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0cmV0dXJuIFxcdTAwMjZ4YXR0cnNbKCp4YXR0cl9jb3VudCkrK107XFxuK1xcdHJldHVybiBcXHUwMDI2Y3R4LVxcdTAwM2V4YXR0cnNbY3R4LVxcdTAwM2V4YXR0cl9jb3VudCsrXTtcXG4gfVxcbiBcXG4gI2VuZGlmIC8qICEgX19MSU5VWF9MU01fSE9PS1NfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5pbmRleCAxNTNlOTA0MzA1OGY4OC4uMGJlNTkwYzQwNjg5NTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuQEAgLTY4LDYgKzY4LDExIEBAIHN0cnVjdCB3YXRjaDtcXG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcXG4gc3RydWN0IGxzbV9jdHg7XFxuIFxcbitzdHJ1Y3QgbHNtX3hhdHRycyB7XFxuK1xcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xcbitcXHR1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7XFxuK307XFxuK1xcbiAvKiBEZWZhdWx0IChubykgb3B0aW9ucyBmb3IgdGhlIGNhcGFibGUgZnVuY3Rpb24gKi9cXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXFxuIC8qIElmIGNhcGFibGUgc2hvdWxkIGF1ZGl0IHRoZSBzZWN1cml0eSByZXF1ZXN0ICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmNcXG5pbmRleCA1NjQwNzFhOTJkN2QyMC4uMWMzZjg0YTkyNDIwMzkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbkBAIC0zMTUsNiArMzE1LDcgQEAgQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfY3JlYXRlKVxcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9mcmVlX3NlY3VyaXR5KVxcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXRhdHRyKVxcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXR4YXR0cilcXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfaW5pdF9zZWN1cml0eSlcXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbWtub2QpXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX25lZWRfa2lsbHByaXYpXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX3Bvc3Rfc2V0eGF0dHIpXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG5pbmRleCA0MGVmZGUyMzNmM2FiMy4uZDdjNDRjNWMwZTMwNDYgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9icGYvaG9va3MuY1xcbkBAIC0zMCw2ICszMCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxcbiBcXG4gc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2IpLFxcbitcXHQubGJzX3hhdHRyX2NvdW50ID0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyxcXG4gfTtcXG4gXFxuIERFRklORV9MU00oYnBmKSA9IHtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXFxuaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXFxuICAqL1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqbHNtX3hhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXZtX3hhdHRyICp4YXR0cl9kYXRhO1xcbiBcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4gXFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cXHUwMDNleGF0dHJzIDogTlVMTDtcXG4gXFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFxcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XFxuIFxcdC8qXFxuIFxcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXFxuIFxcdCAqIHhhdHRyIHNsb3QuXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuQEAgLTEzMzMsOCArMTMzMyw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbi1cXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xcbi1cXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcXG4rXFx0c3RydWN0IGxzbV94YXR0cnMgeGF0dHJzID0ge307XFxuK1xcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMzQ0LDE1ICsxMzQ0LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXG4gXFx0aWYgKGluaXR4YXR0cnMpIHtcXG4gXFx0XFx0LyogQWxsb2NhdGUgKzEgYXMgdGVybWluYXRvci4gKi9cXG4tXFx0XFx0bmV3X3hhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgKyAxLFxcbi1cXHRcXHRcXHRcXHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCFuZXdfeGF0dHJzKVxcbitcXHRcXHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcXG4rXFx0XFx0aWYgKCF4YXR0cnMueGF0dHJzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcXG4tXFx0XFx0cmV0ID0gc2NhbGwtXFx1MDAzZWhsLVxcdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eGF0dHJfY291bnQpO1xcbitcXHRcXHRyZXQgPSBzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cnMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdC8qXFxuQEAgLTEzNjQsMTQgKzEzNjQsMTQgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xcbi1cXHRpZiAoIXhhdHRyX2NvdW50KVxcbitcXHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcXG4rXFx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7XFxuIG91dDpcXG4tXFx0Zm9yICg7IHhhdHRyX2NvdW50IFxcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcXG4tXFx0XFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcXG4tXFx0a2ZyZWUobmV3X3hhdHRycyk7XFxuK1xcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcXG4rXFx0XFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XFxuK1xcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xcbiBcXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4gXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XFxuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIShzYnNlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQkxBQkVMX01OVCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXHRpZiAoeGF0dHIpIHtcXG4gXFx0XFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjb250ZXh0LCBcXHUwMDI2Y2xlbik7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbkBAIC05ODEsMTAgKzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi14YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbiBcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXG4gXFx0aWYgKCF4YXR0cilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTEwMDMsMTQgKzEwMDMsMTMgQEAgeGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXFxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxcbiAgKiBAcXN0cjogdW51c2VkXFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnRcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUncyBubyBtZW1vcnlcXG4gICovXFxuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiB7XFxuIFxcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcXG4gXFx0c3RydWN0IGlub2RlX3NtYWNrICogY29uc3QgaXNzcCA9IHNtYWNrX2lub2RlKGlub2RlKTtcXG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdFxcdHRyYW5zZmxhZyA9IFNNS19JTk9ERV9UUkFOU01VVEU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXFxuLVxcdFxcdFxcdFxcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRV9TSVpFXFxuLVxcdFxcdFxcdCkpXFxuK1xcdFxcdFxcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxcbitcXHRcXHRcXHRcXHRcXHQgVFJBTlNfVFJVRSxcXG4rXFx0XFx0XFx0XFx0XFx0IFRSQU5TX1RSVUVfU0laRSkpXFxuIFxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmMgPT0gMClcXG4tXFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxcbi1cXHRcXHRcXHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxcbi1cXHRcXHRcXHQgICAgaXNzcC1cXHUwMDNlc21rX2lub2RlLVxcdTAwM2VzbWtfa25vd24sXFxuLVxcdFxcdCAgICAgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKVxcbi1cXHRcXHQpKVxcbitcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcXG4rXFx0XFx0XFx0XFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcXG4rXFx0XFx0XFx0XFx0IGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duLFxcbitcXHRcXHRcXHRcXHQgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKSkpXFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gaW5zdGFudF9pbm9kZTpcXG4gXFx0aXNzcC1cXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuQEAgLTkyLDQgKzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcXG4gZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhaztcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzO1xcbitleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbmluZGV4IDQzYTI2ZWM2OWE4ZTM2Li44YjJlMGQ0MzNhZWEyZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXFxcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcXFwiO1xcbiBcXG5AQCAtMjY4LDYgKzI2OSwxMTYgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxcbiBcXHRyZW1vdmUodGVzdGZpbGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTEsIGVycjtcXG4rXFx0Y2hhciB2YWx1ZV9vdXRbNjRdO1xcbitcXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcXFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcXFwiO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZV9maWxlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0LCAwLCBcXFwiaW5pdF9yZXN1bHRcXFwiKTtcXG4rXFxuK1xcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXFxcInNlY3VyaXR5LlxcXCIgdG8gdGhlIG5hbWUuICovXFxuK1xcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXFxcInNlY3VyaXR5LmJwZi50ZXN0X2xhYmVsXFxcIiwgdmFsdWVfb3V0LFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFxcXCJnZXR4YXR0clxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXhhdHRyX3ZhbHVlKSwgXFxcInhhdHRyX3NpemVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIixcXG4rXFx0XFx0XFx0ICBzaXplb2YoXFxcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFxcXCIpKSwgMCxcXG4rXFx0XFx0ICBcXFwieGF0dHJfdmFsdWVcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xcbit9XFxuK1xcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xcbisjZGVmaW5lIElOSVRfSU5PREVfWEFUVFJfTUFYIDRcXG4rXFxuKy8qXFxuKyAqIFByb2dyYW1zIG1heSBhdHRhY2ggdG8gaW5vZGVfaW5pdF9zZWN1cml0eSB3aXRob3V0IGFuIGF0dGFjaC10aW1lIGxpbWl0LCBidXRcXG4rICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxcbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFxcXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcXFwiO1xcbitcXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcXG4rXFx0aW50IGksIGZkID0gLTE7XFxuK1xcbitcXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXFxcIm9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRza2VsW2ldLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFxuK1xcdFxcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVxcdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVfZmlsZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0aGUgcHJvZ3JhbSBwYXN0XFxuK1xcdCAqIHRoZSBidWRnZXQgZ2V0cyAtRU5PU1BDLiBUaGUgb3JkZXIgaW4gd2hpY2ggcHJvZ3JhbXMgcnVuIGlzIG5vdFxcbitcXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0aW50IHJlcyA9IHNrZWxbaV0tXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0O1xcbitcXG4rXFx0XFx0aWYgKHJlcyA9PSAwKVxcbitcXHRcXHRcXHRvaysrO1xcbitcXHRcXHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcXG4rXFx0XFx0XFx0bm9zcGMrKztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvdGhlcisrO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCBcXFwic2xvdHNfd2l0aGluX2J1ZGdldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEobm9zcGMsIDEsIFxcXCJzbG90X292ZXJfYnVkZ2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShvdGhlciwgMCwgXFxcInVuZXhwZWN0ZWRfcmVzdWx0XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShsaW5rW2ldKTtcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pO1xcbitcXHR9XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9zbG90KTtcXG4rfVxcbitcXG4gdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxcbiB7XFxuIFxcdC8qIE1hdGNoZXMgeGF0dHJfbmFtZXMgaW4gcHJvZ3MvdGVzdF9nZXRfeGF0dHIuYyAqL1xcbkBAIC0yODgsNCArMzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcXG4gXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmc3Zlcml0eVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2ZzdmVyaXR5KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdF9pbm9kZV94YXR0clxcXCIpKVxcbitcXHRcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHIoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXRcXFwiKSlcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYjM3OGRiOTU3YWE4OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfa2Z1bmNzLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK19fdTMyIG1vbml0b3JlZF9waWQ7XFxuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgeGF0dHJfbmFtZVtdID0gXFxcImJwZi50ZXN0X2xhYmVsXFxcIjtcXG4rY2hhciB4YXR0cl92YWx1ZVtdID0gXFxcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFxcXCI7XFxuK1xcbitTRUMoXFxcImxzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XFxuK1xcdF9fdTMyIHBpZDtcXG4rXFxuK1xcdHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXFx1MDAyNnZhbHVlX3B0cik7XFxuK1xcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjI2LjE5MTM1MjQxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NzQyNzk2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDY0ODRiM2Y5YjA5Nzk4NGI5MmRkYTFhMDk4MGM1ZDJmYzNjZDk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMTozMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmM0MDIzYzgyZjIxZTQwIDEwMDY0NFxuLS0tIGEvZnMvYnBmX2ZzX2tmdW5jcy5jXG4rKysgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNub3RpZnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuQEAgLTM3NCw2ICszNzUsODMgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gZF9yZWFsX2lub2RlKGRlbnRyeSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4re1xuK1x0Y29uc3Qgc2l6ZV90IHByZWZpeF9sZW4gPSBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMTtcbitcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN0eC1cdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XG4rXHRcdGNvbnN0IGNoYXIgKm5hbWUgPSBjdHgtXHUwMDNleGF0dHJzW2ldLm5hbWU7XG4rXG4rXHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwgcHJlZml4X2xlbikpXG4rXHRcdFx0bisrO1xuK1x0fVxuK1x0cmV0dXJuIG47XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxuKyAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XG4rICogQG5hbWVfX3N0cjogeGF0dHIgbmFtZSAoZS5nLiwgXCJicGYuZmlsZV9sYWJlbFwiKVxuKyAqIEB2YWx1ZV9wOiBkeW5wdHIgY29udGFpbmluZyB0aGUgeGF0dHIgdmFsdWVcbisgKlxuKyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnZhbHVlX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopdmFsdWVfcDtcbitcdHNpemVfdCBuYW1lX2xlbjtcbitcdHZvaWQgKnhhdHRyX3ZhbHVlO1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cjtcbitcdGNvbnN0IHZvaWQgKnZhbHVlO1xuK1x0dTMyIHZhbHVlX2xlbjtcbitcbitcdGlmICgheGF0dHJzIHx8ICF4YXR0cnMtXHUwMDNleGF0dHJzIHx8ICFuYW1lX19zdHIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFx1MDAzZT0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXG4rXHRuYW1lX2xlbiA9IHN0cmxlbihuYW1lX19zdHIpO1xuK1x0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXHUwMDNlIFhBVFRSX05BTUVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsXG4rXHRcdCAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHR2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpO1xuK1x0aWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiBcdTAwM2UgWEFUVFJfU0laRV9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgKyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovXG4rXHR4YXR0cl92YWx1ZSA9IGttYWxsb2ModmFsdWVfbGVuICsgbmFtZV9sZW4gKyAxLCBHRlBfTk9GUyk7XG4rXHRpZiAoIXhhdHRyX3ZhbHVlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdG1lbWNweSh4YXR0cl92YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbik7XG4rXHRtZW1jcHkoeGF0dHJfdmFsdWUgKyB2YWx1ZV9sZW4sIG5hbWVfX3N0ciwgbmFtZV9sZW4pO1xuK1x0KChjaGFyICopeGF0dHJfdmFsdWUpW3ZhbHVlX2xlbiArIG5hbWVfbGVuXSA9ICdcXDAnO1xuK1xuK1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbitcdGlmICgheGF0dHIpIHtcbitcdFx0a2ZyZWUoeGF0dHJfdmFsdWUpO1xuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcdH1cbitcbitcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4rXHR4YXR0ci1cdTAwM2VuYW1lID0gKGNvbnN0IGNoYXIgKil4YXR0cl92YWx1ZSArIHZhbHVlX2xlbjtcbitcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG5AQCAtMzg1LDYgKzQ2Myw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuaW5kZXggMTQzNzc1YTI3YTJhMGIuLmI2NTVjNzA4ODE4ZTU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5AQCAtMTksNiArMTksOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rX2RlZnMuaFx1MDAzZVxuICN1bmRlZiBMU01fSE9PS1xuIFxuKy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqL1xuKyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0XG4rXG4gc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2Ige1xuIFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlO1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldm0uaCBiL2luY2x1ZGUvbGludXgvZXZtLmhcbmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZXZtLmhcbkBAIC0xMiw2ICsxMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4gXG4rc3RydWN0IGxzbV94YXR0cnM7XG4rXG4gI2lmZGVmIENPTkZJR19FVk1cbiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7XG4gZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuQEAgLTIxLDggKzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFx0XHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpO1xuIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7XG4gZXh0ZXJuIGludCBldm1fcmVhZF9wcm90ZWN0ZWRfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTggKmJ1ZmZlcixcbkBAIC02Myw4ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMTYsOCArMTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4rXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuK1x0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuaW5kZXggYjRmOGNhZDUzZGRiMDMuLjdhZmUwNmE4ZDRjNmM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuQEAgLTIwMCwyMCArMjAwLDE4IEBAIGV4dGVybiBzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsc190YWJsZSBzdGF0aWNfY2FsbHNfdGFibGUgX19yb19hZnRlcl9pbml0O1xuIFxuIC8qKlxuICAqIGxzbV9nZXRfeGF0dHJfc2xvdCAtIFJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBhbmQgaW5jcmVtZW50IHRoZSBpbmRleFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xuLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZClcbisgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rc1xuICAqXG4tICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAeGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhbiB4YXR0cixcbi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC5cbisgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXHUwMDNleGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhblxuKyAqIHhhdHRyLCBhbmQgaW5jcmVtZW50IEBjdHgtXHUwMDNleGF0dHJfY291bnQuXG4gICpcbi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4rICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXHUwMDNleGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4ge1xuLVx0aWYgKHVubGlrZWx5KCF4YXR0cnMpKVxuK1x0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cdTAwM2V4YXR0cnMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBcdTAwMjZ4YXR0cnNbKCp4YXR0cl9jb3VudCkrK107XG4rXHRyZXR1cm4gXHUwMDI2Y3R4LVx1MDAzZXhhdHRyc1tjdHgtXHUwMDNleGF0dHJfY291bnQrK107XG4gfVxuIFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4Zjg4Li4wYmU1OTBjNDA2ODk1MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNjgsNiArNjgsMTEgQEAgc3RydWN0IHdhdGNoO1xuIHN0cnVjdCB3YXRjaF9ub3RpZmljYXRpb247XG4gc3RydWN0IGxzbV9jdHg7XG4gXG4rc3RydWN0IGxzbV94YXR0cnMge1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4rXHR1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7XG4rfTtcbitcbiAvKiBEZWZhdWx0IChubykgb3B0aW9ucyBmb3IgdGhlIGNhcGFibGUgZnVuY3Rpb24gKi9cbiAjZGVmaW5lIENBUF9PUFRfTk9ORSAweDBcbiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmNcbmluZGV4IDU2NDA3MWE5MmQ3ZDIwLi4xYzNmODRhOTI0MjAzOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuQEAgLTMxNSw2ICszMTUsNyBAQCBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9jcmVhdGUpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfZnJlZV9zZWN1cml0eSlcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXRhdHRyKVxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2dldHhhdHRyKVxuK0JURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2luaXRfc2VjdXJpdHkpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbWtub2QpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbmVlZF9raWxscHJpdilcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9wb3N0X3NldHhhdHRyKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDQwZWZkZTIzM2YzYWIzLi5kN2M0NGM1YzBlMzA0NiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMwLDYgKzMwLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2xzbV9pbml0KHZvaWQpXG4gXG4gc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iKSxcbitcdC5sYnNfeGF0dHJfY291bnQgPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTLFxuIH07XG4gXG4gREVGSU5FX0xTTShicGYpID0ge1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG4rKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxuICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWVcbiAgKi9cbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKVxuIHtcbiBcdHN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7XG4gXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4gXHRib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4rXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cdTAwM2V4YXR0cnMgOiBOVUxMO1xuIFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFx1MDAyNiBFVk1fSU5JVF9ITUFDKSB8fCAheGF0dHJzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWV2bV9wcm90ZWN0ZWRfeGF0dHJzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTtcbiBcdC8qXG4gXHQgKiBBcnJheSB0ZXJtaW5hdG9yICh4YXR0ciBuYW1lID0gTlVMTCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWZpbGxlZFxuIFx0ICogeGF0dHIgc2xvdC5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEzMzMsOCArMTMzMyw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbi1cdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcbitcdHN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9O1xuK1x0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTM0NCwxNSArMTM0NCwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBcdGlmIChpbml0eGF0dHJzKSB7XG4gXHRcdC8qIEFsbG9jYXRlICsxIGFzIHRlcm1pbmF0b3IuICovXG4tXHRcdG5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xuLVx0XHRpZiAoIW5ld194YXR0cnMpXG4rXHRcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbitcdFx0XHRcdFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xuK1x0XHRpZiAoIXhhdHRycy54YXR0cnMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xuLVx0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRyX2NvdW50KTtcbitcdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG4rXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRycyk7XG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0LypcbkBAIC0xMzY0LDE0ICsxMzY0LDE0IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFxuIFx0LyogSWYgaW5pdHhhdHRycygpIGlzIE5VTEwsIHhhdHRyX2NvdW50IGlzIHplcm8sIHNraXAgdGhlIGNhbGwuICovXG4tXHRpZiAoIXhhdHRyX2NvdW50KVxuK1x0aWYgKCF4YXR0cnMueGF0dHJfY291bnQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgbmV3X3hhdHRycywgZnNfZGF0YSk7XG4rXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTtcbiBvdXQ6XG4tXHRmb3IgKDsgeGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXG4tXHRcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4tXHRrZnJlZShuZXdfeGF0dHJzKTtcbitcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRycy54YXR0cl9jb3VudC0tKVxuK1x0XHRrZnJlZSh4YXR0cnMueGF0dHJzW3hhdHRycy54YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcbitcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xuIFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcbiBcbiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpO1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYztcbkBAIC0yOTkyLDcgKzI5OTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhKHNic2VjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQkxBQkVMX01OVCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuK1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcdGlmICh4YXR0cikge1xuIFx0XHRyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0X2ZvcmNlKG5ld3NpZCxcbiBcdFx0XHRcdFx0XHQgICBcdTAwMjZjb250ZXh0LCBcdTAwMjZjbGVuKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbkBAIC05ODEsMTAgKzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcbiB9XG4gXG4gc3RhdGljIGludFxuLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbit4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiBcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWxsZW4pXG4ge1xuLVx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4rXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuIFxuIFx0aWYgKCF4YXR0cilcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTAwMywxNCArMTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXG4gICogQGlub2RlOiB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZVxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxuICAqIEBxc3RyOiB1bnVzZWRcbi0gKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgdGhlIGF0dHJpYnV0ZXNcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXG4rICogQHhhdHRyczogd2hlcmUgdG8gcHV0IGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZSBjb3VudFxuICAqXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUncyBubyBtZW1vcnlcbiAgKi9cbiBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHRcdCAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gc21hY2tfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpO1xuQEAgLTEwNTcsMjEgKzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0dHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTtcbiBcbi1cdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0XHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXG4tXHRcdFx0XHRUUkFOU19UUlVFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRV9TSVpFXG4tXHRcdFx0KSlcbitcdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcbitcdFx0XHRcdFx0IFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbitcdFx0XHRcdFx0IFRSQU5TX1RSVUUsXG4rXHRcdFx0XHRcdCBUUkFOU19UUlVFX1NJWkUpKVxuIFx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR9XG4gXHR9XG4gXG4gXHRpZiAocmMgPT0gMClcbi1cdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxuLVx0XHRcdCAgICBYQVRUUl9TTUFDS19TVUZGSVgsXG4tXHRcdFx0ICAgIGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bixcbi1cdFx0ICAgICBzdHJsZW4oaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duKVxuLVx0XHQpKVxuK1x0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcbitcdFx0XHRcdCBYQVRUUl9TTUFDS19TVUZGSVgsXG4rXHRcdFx0XHQgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuK1x0XHRcdFx0IHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pKSlcbiBcdFx0XHRyYyA9IC1FTk9NRU07XG4gaW5zdGFudF9pbm9kZTpcbiBcdGlzc3AtXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbmluZGV4IGFlNzFlOWI2OTA1MTg2Li4yNjM5ZjlmOTQxOTU1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xuIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7XG4gXG4rc3RydWN0IGxzbV94YXR0cnM7XG4rZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMzYuLjhiMmUwZDQzM2FlYTJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFwidGVzdF9nZXRfeGF0dHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9mc3Zlcml0eS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaFwiXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgdGVzdGZpbGVbXSA9IFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc1wiO1xuIFxuQEAgLTI2OCw2ICsyNjksMTE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZClcbiBcdHJlbW92ZSh0ZXN0ZmlsZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cih2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWwgPSBOVUxMO1xuK1x0aW50IGZkID0gLTEsIGVycjtcbitcdGNoYXIgdmFsdWVfb3V0WzY0XTtcbitcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX25ldyA9IFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcIjtcbitcbitcdHNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1x0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXG4rXHRmZCA9IG9wZW4odGVzdGZpbGVfbmV3LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFwiaW5pdF9yZXN1bHRcIik7XG4rXG4rXHQvKiBpbml0eGF0dHJzIHByZXBlbmRzIFwic2VjdXJpdHkuXCIgdG8gdGhlIG5hbWUuICovXG4rXHRlcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsIFwic2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcIiwgdmFsdWVfb3V0LFxuK1x0XHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PREFUQSkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxuXCIsXG4rXHRcdCAgICAgICBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFwiZ2V0eGF0dHJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXhhdHRyX3ZhbHVlKSwgXCJ4YXR0cl9zaXplXCIpO1xuK1x0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiLFxuK1x0XHRcdCAgc2l6ZW9mKFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCIpKSwgMCxcbitcdFx0ICBcInhhdHRyX3ZhbHVlXCIpO1xuK1xuK291dDpcbitcdGNsb3NlKGZkKTtcbitcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcbitcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xuK31cbitcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xuKyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxuK1xuKy8qXG4rICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxuKyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS5cbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbFtJTklUX0lOT0RFX1hBVFRSX01BWCArIDFdID0ge307XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19zbG90XCI7XG4rXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcbitcdGludCBpLCBmZCA9IC0xO1xuK1xuK1x0LyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdHNrZWxbaV0gPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbitcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWxbaV0sIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0c2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1xuK1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuK1x0XHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXCJhdHRhY2hcIikpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi9cbitcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdFxuK1x0ICogdGhlIGJ1ZGdldCBnZXRzIC1FTk9TUEMuIFRoZSBvcmRlciBpbiB3aGljaCBwcm9ncmFtcyBydW4gaXMgbm90XG4rXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGludCByZXMgPSBza2VsW2ldLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQ7XG4rXG4rXHRcdGlmIChyZXMgPT0gMClcbitcdFx0XHRvaysrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcbitcdFx0XHRub3NwYysrO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3RoZXIrKztcbitcdH1cbitcbitcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwic2xvdHNfd2l0aGluX2J1ZGdldFwiKTtcbitcdEFTU0VSVF9FUShub3NwYywgMSwgXCJzbG90X292ZXJfYnVkZ2V0XCIpO1xuK1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcInVuZXhwZWN0ZWRfcmVzdWx0XCIpO1xuK1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuK1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4rXHR9XG4rXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCArMzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnN2ZXJpdHlcIikpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdF9pbm9kZV94YXR0clwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImluaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNiMzc4ZGI5NTdhYTg5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitfX3UzMiBtb25pdG9yZWRfcGlkO1xuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIHhhdHRyX25hbWVbXSA9IFwiYnBmLnRlc3RfbGFiZWxcIjtcbitjaGFyIHhhdHRyX3ZhbHVlW10gPSBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiO1xuK1xuK1NFQyhcImxzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlcIilcbitpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyO1xuK1x0X191MzIgcGlkO1xuK1xuK1x0cGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFx1MDAyNnZhbHVlX3B0cik7XG4rXHRpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgXHUwMDI2dmFsdWVfcHRyKTtcbitcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjI2LjE5MTM1NjQ5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MzI5NzMzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgQlBGIEtmdW5jIGZvciBJbm9kZSBYYXR0ciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBUaGlzIGlzIHByZXR0eSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZGVzaWduZWQgdG8gbGV0IEJQRiBMU00gcHJvZ3JhbXMgc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgb24gYSAqbmV3KiBpbm9kZSByaWdodCBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBwcm9jZXNzLiBMb29raW5nIGF0IHRoZSBmaWxlcyBpdCB0b3VjaGVzLCBpdCdzIGltcGFjdGluZyBhIHdpZGUgcmFuZ2Ugb2Ygc2VjdXJpdHkgYXJlYXM6IGBmcy9icGZfZnNfa2Z1bmNzLmNgLCB0aGUgdmFyaW91cyBgaW5jbHVkZS9saW51eC8qYCBoZWFkZXJzIHJlbGF0ZWQgdG8gQlBGLCBFVk0sIGFuZCBMU00gaG9va3MsIGFzIHdlbGwgYXMgY29yZSBzZWN1cml0eSBjb21wb25lbnRzIGluIGBrZXJuZWwvYnBmL2JwZl9sc20uY2AsIGBzZWN1cml0eS9icGYvaG9va3MuY2AsIGBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNgLCBgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIFNFTGludXgsIGFuZCBTbWFjay4gVGhhdCdzIGEgc2VyaW91cyBudW1iZXIgb2YgdG91Y2hwb2ludHMhXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgbmV3IGtmdW5jIGlzIHByb3Blcmx5IHJlZ2lzdGVyZWQgYW5kIGFjY2Vzc2libGUuIEkgc2VlIGl0J3MgYWRkZWQgdG8gYGJwZl9mc19rZnVuY19zZXRfaWRzYCBpbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhbHNvIG1vZGlmeWluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZTsgaW5zdGVhZCBvZiB0aGUgb2xkZXIgYHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50YCwgaXQncyBub3cgdXNpbmcgYHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnNgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgdGhvc2UgY3JpdGljYWwgc3Vic3lzdGVtcyDigJMgTFNNLCBFVk0sIFNFTGludXgsIFNtYWNrLCBhbmQgQlBGLiBUaGlzIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIHNvbWUgaGVhZGFjaGVzIGlmIG5vdCBwcm9wZXJseSBoYW5kbGVkLCBzbyBpdCdzIGNyaXRpY2FsIHdlIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgdXNlZCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGZ1enppbmcuIEdpdmVuIHRoZSBrZXJuZWwtbGV2ZWwgaW50ZWdyYXRpb24sIGFuZCB0aGUgZmFjdCB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgbmV3IHhhdHRyIHNldHRpbmcgY2FwYWJpbGl0aWVzLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGlzIGFic29sdXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBCUEYgTFNNIGZ1bmN0aW9uYWxpdHkgd2lsbCByZXF1aXJlIGBDT05GSUdfQlBGX0xTTWAuIExldCBtZSBjaGVjayBpZiB0aGUga2Z1bmMgaXRzZWxmIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIGl0IHRvIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZywgb2YgY291cnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjMyLjkyNDMzMjc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzE4NDE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZzX2tmdW5jc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMzA9b2JqLSQoQ09ORklHX1pPTkVGU19GUylcXHRcXHQrPSB6b25lZnMvXFxuZnMvTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19CUEZfTFNNKVxcdFxcdCs9IGJwZl9mc19rZnVuY3Mub1xcbmZzL01ha2VmaWxlLTEzMi1vYmotJChDT05GSUdfUkVTQ1RSTF9GUylcXHQrPSByZXNjdHJsL1xcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ2Nz1CVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDY4LVxcbmZzL2JwZl9mc19rZnVuY3MuYzo0Njk6c3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDcwLXtcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz01MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTA5LVxcdC5zZXQgPSBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldF9pZHMsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxMDpcXHQuZmlsdGVyID0gYnBmX2ZzX2tmdW5jc19maWx0ZXIsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTUxMS19O1xcbmZzL2JwZl9mc19rZnVuY3MuYy01MTItXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxMzpzdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTE0LXtcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy01MTctXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxODpsYXRlX2luaXRjYWxsKGJwZl9mc19rZnVuY3NfaW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjM1LjM5NjE4NzY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MDgzMzU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9MU01gIGlzIGEgZGVmaW5pdGUgcmVxdWlyZW1lbnQgaGVyZS4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGF0LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuUmlnaHQsIHRoZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGlzIGRlZmluZWQgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIFRoYXQncyBnb29kIHRvIGtub3csIHRoYXQgZmlsZSBpcyBteSBuZXh0IHRhcmdldC4gQW5kIHRoZSBob29rLCBgaW5vZGVfaW5pdF9zZWN1cml0eWAsIHRoYXQncyBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGFuZCBJIGtub3cgdGhhdCdzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZCB3aGljaCBpc24ndCBhIHByb2JsZW0gZm9yIG1lLiBPa2F5LCBzbyB0aGF0IGtmdW5jIHV0aWxpemVzIGBsc21fZ2V0X3hhdHRyX3Nsb3RgLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBgbHNtX2dldF94YXR0cl9zbG90YCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGlub2RlcyBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6MzkuMzc3MDI0OTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTczNzI1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnBmX2ZzX2tmdW5jcy5jPTM3OD1zdGF0aWMgaW50IGJwZl94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM5Mi0vKipcXG5mcy9icGZfZnNfa2Z1bmNzLmM6MzkzOiAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxcbmZzL2JwZl9mc19rZnVuY3MuYy0zOTQtICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy00MDEtICovXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQwMjpfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAzLVxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ2NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxcbmZzL2JwZl9mc19rZnVuY3MuYzo0NjY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ2Ny1CVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg9OTU9c3RydWN0IGxzbV94YXR0cnM7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaDo5NjpleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC05Ny1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lX19zdHIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmM9MTc9aW50IEJQRl9QUk9HKHRlc3RfaW5pdF9pbm9kZV94YXR0ciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjctXFx0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXFx1MDAyNnZhbHVlX3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jOjI4OlxcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjQxLjQ5NDQxMTQwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODk3ODY5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYYXR0ciBJbml0aWFsaXphdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gdGhlIGZ1bmN0aW9uIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXMgY2xlYXJseSB0aGUga2V5IHBsYXllciBoZXJlLiBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gaGFwcGVucy4gQnV0IHRoZW4gdGhlcmUncyBhbHNvIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0aGF0J3MgYmVpbmcgbW9kaWZpZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGlzIGhhcyB0byBkbyB3aXRoIGludGVncmF0aW5nIEJQRiBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIGV4aXN0aW5nIHNlY3VyaXR5IGZyYW1ld29yayBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24uIEkgcmVhbGx5IG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIHNlY3VyaXR5IGNvbnRleHQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCB0aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMTo0NC40ODQyMDExNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNjMyMTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fub25faW5vZGVzLmM9OTM9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGFub25faW5vZGVfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2Fub25faW5vZGVzLmMtMTA2LSAqIFRoZSBmdW5jdGlvbiBlbnN1cmVzIHByb3BlciBzZWN1cml0eSBpbml0aWFsaXphdGlvbiB0aHJvdWdoIHRoZSBMU00gaG9va1xcbmZzL2Fub25faW5vZGVzLmM6MTA3OiAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbigpLlxcbmZzL2Fub25faW5vZGVzLmMtMTA4LSAqXFxuLS1cXG5mcy9hbm9uX2lub2Rlcy5jPTExMT1zdHJ1Y3QgaW5vZGUgKmFub25faW5vZGVfbWFrZV9zZWN1cmVfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2Fub25faW5vZGVzLmMtMTIxLVxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmFub25faW5vZGVfb3BlcmF0aW9ucztcXG5mcy9hbm9uX2lub2Rlcy5jOjEyMjpcXHRlcnJvciA9XFx0c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKGlub2RlLCBcXHUwMDI2UVNUUihuYW1lKSxcXG5mcy9hbm9uX2lub2Rlcy5jLTEyMy1cXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnRleHRfaW5vZGUpO1xcbi0tXFxuZnMvYnRyZnMveGF0dHIuYz01MjE9aW50IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXFxuLS1cXG5mcy9idHJmcy94YXR0ci5jLTUyNC17XFxuZnMvYnRyZnMveGF0dHIuYzo1MjU6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcXG5mcy9idHJmcy94YXR0ci5jLTUyNi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmJ0cmZzX2luaXR4YXR0cnMsIHRyYW5zKTtcXG4tLVxcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYz00OD1leHQyX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMtNTAte1xcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYzo1MTpcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYy01Mi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmV4dDJfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM9NTU9ZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTU3LXtcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6NTg6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNTktXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZleHQ0X2luaXR4YXR0cnMsIGhhbmRsZSk7XFxuLS1cXG5mcy9mMmZzL3hhdHRyLmM9MTU1PWludCBmMmZzX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL3hhdHRyLmMtMTU3LXtcXG5mcy9mMmZzL3hhdHRyLmM6MTU4OlxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuZnMvZjJmcy94YXR0ci5jLTE1OS1cXHRcXHRcXHRcXHRmMmZzX2luaXR4YXR0cnMsIGlmb2xpbyk7XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9NzAwPXN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGVfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy04OTEtXFxuZnMvZ2ZzMi9pbm9kZS5jOjg5MjpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoXFx1MDAyNmlwLVxcdTAwM2VpX2lub2RlLCBcXHUwMDI2ZGlwLVxcdTAwM2VpX2lub2RlLCBuYW1lLFxcbmZzL2dmczIvaW5vZGUuYy04OTMtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Z2ZzMl9pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHJfc2VjdXJpdHkuYz02OD1pbnQgaGZzcGx1c19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvaGZzcGx1cy94YXR0cl9zZWN1cml0eS5jLTcwLXtcXG5mcy9oZnNwbHVzL3hhdHRyX3NlY3VyaXR5LmM6NzE6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcXG5mcy9oZnNwbHVzL3hhdHRyX3NlY3VyaXR5LmMtNzItXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmhmc3BsdXNfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5mcy9qZmZzMi9zZWN1cml0eS5jPTQzPWludCBqZmZzMl9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvamZmczIvc2VjdXJpdHkuYy00NS17XFxuZnMvamZmczIvc2VjdXJpdHkuYzo0NjpcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL2pmZnMyL3NlY3VyaXR5LmMtNDctXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZqZmZzMl9pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbmZzL2pmcy94YXR0ci5jPTEwNDk9aW50IGpmc19pbml0X3NlY3VyaXR5KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9qZnMveGF0dHIuYy0xMDUxLXtcXG5mcy9qZnMveGF0dHIuYzoxMDUyOlxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuZnMvamZzL3hhdHRyLmMtMTA1My1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmpmc19pbml0eGF0dHJzLCBcXHUwMDI2dGlkKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzMwOD1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzMxOC1cXHRpZiAoc2kpIHtcXG5mcy9vY2ZzMi94YXR0ci5jOjczMTk6XFx0XFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL29jZnMyL3hhdHRyLmMtNzMyMC1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2b2NmczJfaW5pdHhhdHRycywgc2kpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzMyMS1cXHRcXHQvKlxcbmZzL29jZnMyL3hhdHRyLmM6NzMyMjpcXHRcXHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZG9lcyBub3QgcmV0dXJuIC1FT1BOT1RTVVBQLFxcbmZzL29jZnMyL3hhdHRyLmMtNzMyMy1cXHRcXHQgKiB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB4YXR0ciBvdXJzZWx2ZXMuXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTczMzAtXFxuZnMvb2NmczIveGF0dHIuYzo3MzMxOlxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuZnMvb2NmczIveGF0dHIuYy03MzMyLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2b2NmczJfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5mcy9yYW1mcy9pbm9kZS5jPTk4PXJhbWZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtMTA0LVxcdGlmIChpbm9kZSkge1xcbmZzL3JhbWZzL2lub2RlLmM6MTA1OlxcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLFxcbmZzL3JhbWZzL2lub2RlLmMtMTA2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLCBOVUxMLFxcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYz0xMzY9c3RhdGljIGludCByYW1mc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtMTQ1LVxcbmZzL3JhbWZzL2lub2RlLmM6MTQ2OlxcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLFxcbmZzL3JhbWZzL2lub2RlLmMtMTQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLCBOVUxMLFxcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYz0xNjY9c3RhdGljIGludCByYW1mc190bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYy0xNzUtXFxuZnMvcmFtZnMvaW5vZGUuYzoxNzY6XFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsXFxuZnMvcmFtZnMvaW5vZGUuYy0xNzctXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZmlsZV9kZW50cnkoZmlsZSktXFx1MDAzZWRfbmFtZSwgTlVMTCxcXG4tLVxcbmZzL3ViaWZzL3hhdHRyLmM9NjM1PWludCB1Ymlmc19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvdWJpZnMveGF0dHIuYy02MzktXFxuZnMvdWJpZnMveGF0dHIuYzo2NDA6XFx0ZXJyID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGVudHJ5LCBxc3RyLFxcbmZzL3ViaWZzL3hhdHRyLmMtNjQxLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpbml0X3hhdHRycywgTlVMTCk7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz04Nj14ZnNfaW5vZGVfaW5pdF9zZWN1cml0eShcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTkwLXtcXG5mcy94ZnMveGZzX2lvcHMuYzo5MTpcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTkyLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnhmc19pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0yNzI9ZXh0ZXJuIGludCBtbWFwX21pbl9hZGRyX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0yNzUtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjI3NjovKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHdyaXRlIHhhdHRycyAqL1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0yNzctdHlwZWRlZiBpbnQgKCppbml0eGF0dHJzKSAoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MDU9dm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDY6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwNy1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwOC1cXHRcXHRcXHRcXHQgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDA5OmludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEwLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTg4NT1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC04OTMtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjg5NDpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTg5NS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05MDItXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjkwMzpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtOTA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYz0xNzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJwZl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmMtMTg4LVxcbmtlcm5lbC9icGYvaW5vZGUuYzoxODk6XFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxua2VybmVsL2JwZi9pbm9kZS5jLTE5MC1cXHRcXHRcXHRcXHRcXHQgICBicGZfZnNfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmM9MzYzPXN0YXRpYyBpbnQgYnBmX21rb2JqX29wcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqcmF3LFxcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jLTM3NC1cXG5rZXJuZWwvYnBmL2lub2RlLmM6Mzc1OlxcdHJldCA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmtlcm5lbC9icGYvaW5vZGUuYy0zNzYtXFx0XFx0XFx0XFx0XFx0ICAgYnBmX2ZzX2luaXR4YXR0cnMsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jPTQyNz1zdGF0aWMgaW50IGJwZl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYy00NDYtXFxua2VybmVsL2JwZi9pbm9kZS5jOjQ0NzpcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5rZXJuZWwvYnBmL2lub2RlLmMtNDQ4LVxcdFxcdFxcdFxcdFxcdCAgIGJwZl9mc19pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbm1tL21lbWZkLmM9NDU4PXN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm1tL21lbWZkLmMtNDc2LVxcdGlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG5tbS9tZW1mZC5jOjQ3NzpcXHRlcnIgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oaW5vZGUsXFxubW0vbWVtZmQuYy00NzgtXFx0XFx0XFx0XFx1MDAyNlFTVFIoTUVNRkRfQU5PTl9OQU1FKSwgTlVMTCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM4NTA9c2htZW1fbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxubW0vc2htZW0uYy0zODY2LVxcdFxcdGdvdG8gb3V0X2lwdXQ7XFxubW0vc2htZW0uYzozODY3OlxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxubW0vc2htZW0uYy0zODY4LVxcdFxcdFxcdFxcdFxcdCAgICAgc2htZW1faW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM4ODk9c2htZW1fdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5tbS9zaG1lbS5jLTM5MDAtXFx0fVxcbm1tL3NobWVtLmM6MzkwMTpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgTlVMTCxcXG5tbS9zaG1lbS5jLTM5MDItXFx0XFx0XFx0XFx0XFx0ICAgICBzaG1lbV9pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9NDA3OT1zdGF0aWMgaW50IHNobWVtX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxubW0vc2htZW0uYy00MDk2LVxcbm1tL3NobWVtLmM6NDA5NzpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbm1tL3NobWVtLmMtNDA5OC1cXHRcXHRcXHRcXHRcXHQgICAgIHNobWVtX2luaXR4YXR0cnMsIE5VTEwpO1xcbi0tXFxubW0vc2htZW0uYz00MTkwPXN0YXRpYyBpbnQgc2htZW1fZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxubW0vc2htZW0uYy00MjI0LS8qXFxubW0vc2htZW0uYzo0MjI1OiAqIENhbGxiYWNrIGZvciBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZm9yIGFjcXVpcmluZyB4YXR0cnMuXFxubW0vc2htZW0uYy00MjI2LSAqL1xcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jPTEwNjQ9aW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTEwNzgtXFx0LypcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM6MTA3OTpcXHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgbWFrZXMgc3VyZSB0aGF0IHRoZSB4YXR0cnMgYXJyYXkgaXNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtMTA4MC1cXHQgKiBjb250aWd1b3VzLCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHNlY3VyaXR5LmV2bSwgYW5kIHRoYXQgdGhlcmUgaXNcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTMwMj1FWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMpO1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzA0LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTMwNTogKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgLSBJbml0aWFsaXplIGFuIGlub2RlJ3MgTFNNIGNvbnRleHRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzMDYtICogQGlub2RlOiB0aGUgaW5vZGVcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTMzMC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzMzE6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzMyLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3Ni19XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzc3OkVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzc4LVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3OS0vKipcXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzODA6ICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM4MS0gKiBAaW5vZGU6IHRoZSBpbm9kZVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzkwLSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTM5MTppbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzkyLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMTo0Ni40MDA1MzQxMDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY4ODQ2OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW50ZXJzZWN0aW9uIG9mIEJQRiwgTFNNLCBhbmQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyIGhlcmUsIGNhbGxlZCBieSBudW1lcm91cyBmaWxlc3lzdGVtcy4gSXQncyB0aGUgcG9pbnQgb2YgZW50cnkuIFRoZW4gd2UgaGF2ZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBhIGtmdW5jLCBiZWluZyBpbnZva2VkIGZyb20gYSBCUEYgcHJvZ3JhbS4gSW50ZXJlc3RpbmcuIFRoYXQgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNgLCBgdGVzdF9pbml0X2lub2RlX3hhdHRyYCwgaXMgc2hvd2luZyB1cyB0aGUgZGlyZWN0IGxpbmsg4oCTIHRoZSBCUEYgcHJvZ3JhbSBhdHRhY2hlcyB0byBgbHNtLnMvaW5vZGVfaW5pdF9zZWN1cml0eWAgYW5kIHRoZW4gY2FsbHMgYGJwZl9pbml0X2lub2RlX3hhdHRyYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19CUEZfTFNNYCBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLiBTaW5jZSBgQ09ORklHX0JQRl9MU01gIGltcGxpZXMgYENPTkZJR19TRUNVUklUWWAsIHdlJ3JlIGdvb2QgdGhlcmUuIE5vdGhpbmcgYWJvdXQgbmV0d29yayBzZWN1cml0eSBoZXJlLCBzbyBgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktgIGlzIGlycmVsZXZhbnQsIEkgdGhpbmsuIEFuZCBzaW5jZSBgQ09ORklHX0JQRl9MU01gIGltcGxpZXMgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyBjb3ZlcmVkIGFzIHdlbGwuIFNvLCB0aGVzZSBhcmUgdGhlIGRlcGVuZGVuY2llcy5cblxuSSdtIGdvaW5nIHRvIHJldmlzaXQgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBpdHNlbGYgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2Agb25lIG1vcmUgdGltZS4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoYXQga2Z1bmMgZnVsbHkgaW4gdGhpcyBjb250ZXh0LiBJdCdzIHRoZSBsaW5jaHBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6NTEuMzY5MzgzNTM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MjQ1ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbml0X2lub2RlX3hhdHRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JwZl9mc19rZnVuY3MuYz0zNzg9c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy0zOTItLyoqXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjM5MzogKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHlcXG5mcy9icGZfZnNfa2Z1bmNzLmMtMzk0LSAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAxLSAqL1xcbmZzL2JwZl9mc19rZnVuY3MuYzo0MDI6X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQwMy1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz00NjU9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWFsX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTClcXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDY2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbmZzL2JwZl9mc19rZnVuY3MuYy00NjctQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oPTk1PXN0cnVjdCBsc21feGF0dHJzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg6OTY6ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgtOTctXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jPTE3PWludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI3LVxcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFxcdTAwMjZ2YWx1ZV9wdHIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYzoyODpcXHRpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgXFx1MDAyNnZhbHVlX3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMTo1My4yOTQ2NDAxMzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNDk3NTg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBMU00gYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldyBCUEYga2Z1bmMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIFRoYXQncyB0aGUgcHJpbWFyeSBzeW1ib2wgSSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB0aGF0IGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBpcyBhbHNvIGdldHRpbmcgdHdlYWtlZCB0byB1c2UgYHN0cnVjdCBsc21feGF0dHJzYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGF0J3MgYSBjZW50cmFsIExTTSBmdW5jdGlvbi4gVGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGFzIGEgbmV3IEJQRiBrZnVuYyBpcyB0aGUga2V5IGhlcmUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdDogSSdtIGFkZGluZyBib3RoIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBBbmQsIG9mIGNvdXJzZSwgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX0xTTWAgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBgRVZNYCBpbnRvIHRoZSBlcXVhdGlvbi4gWWVwLCBJIHNlZSB0aGF0IGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAgaGFzIGJlZW4gbW9kaWZpZWQsIHNvIEknbGwgYWRkIGBFVk1gIHRvIGBFbmFibGVDb25maWdzYCB0byBtYWtlIHN1cmUgdGhvc2UgRVZNIGNvZGUgcGF0aHMgYXJlIGluY2x1ZGVkIGluIG15IGFuYWx5c2lzLiBJdCdzIGFsc28gYSBnb29kIGlkZWEgdG8gY29uc2lkZXIgdGhlIGltcGFjdHMgb24gU0VMaW51eCBhbmQgU01BQ0ssIHNvIGxldCdzIGNoZWNrIHRob3NlIG1vZGlmaWNhdGlvbnMgYXMgd2VsbC4gV2hpbGUgYFNFQ1VSSVRZX1NFTElOVVhgIGFuZCBgU0VDVVJJVFlfU01BQ0tgIGFyZSBwcm9iYWJseSB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LCBpdCdzIHBydWRlbnQgdG8gZXhwbGljaXRseSBsaXN0IHRoZW0gaW4gYEVuYWJsZUNvbmZpZ3NgIGp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjc3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjU4LjcwOTYxOTI3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NDU1MTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI5NDI9c3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yOTYyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyOTYzOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yOTY0LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDA4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDA5OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzAxMC1cXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzUyOT1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc1NjctXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9mcmVlX3NlY3VyaXR5LCBzZWxpbnV4X2lub2RlX2ZyZWVfc2VjdXJpdHkpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NTY4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU2OTpcXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24pLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTcwLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMyOjAxLjYwNDE4MzI0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk2NDcxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVXBkYXRlcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgY29uZmlndXJhdGlvbiB1cGRhdGVkLiBJIG5lZWQgdG8gYWRkIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYEVWTWAsIGFuZCBgQlBGX0xTTWAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIHRoZSBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbGl0eSBJJ20gdGFyZ2V0aW5nLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGFyZSB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAsIGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgLCBhbmQgYHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlgLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYGJwZl94YXR0cnNfdXNlZGAgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhpcyBzaG91bGQgYmUgYW4gZWFzeSBjaGVjaywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbGwgY29tcG9uZW50cyBhcmUgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMjYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzI6MDUuMzAwNjU4MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk2MjQ0MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl94YXR0cnNfdXNlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9icGZfZnNfa2Z1bmNzLmM9MzczPV9fYnBmX2tmdW5jIHN0cnVjdCBpbm9kZSAqYnBmX3JlYWxfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM3Ny1cXG5mcy9icGZfZnNfa2Z1bmNzLmM6Mzc4OnN0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM3OS17XFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmM9NDAyPV9fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQxNC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDE1OlxcdGlmIChicGZfeGF0dHJzX3VzZWQoeGF0dHJzKSBcXHUwMDNlPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxcbmZzL2JwZl9mc19rZnVuY3MuYy00MTYtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMyOjA3LjM5NjkxMDIyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTc2ODY3NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEV4cGFuZGluZyB0aGUgQlBGIExTTSBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aGlzIG5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBjb3VsZCBkaXJlY3RseSB0YXJnZXQgYGJwZl94YXR0cnNfdXNlZGAsIGJ1dCB0aGF0J3MgYSBzdGF0aWMgc3ltYm9sLiBTeXprYWxsZXIgY2FuJ3Qgd29yayB3aXRoIHRoYXQgZGlyZWN0bHksIGJ1dCBpdCdzIGNhbGxlZCBieSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBBaGEhIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgKmlzKiB0aGUga2Z1bmMgSSBuZWVkLlxuXG5MZXQncyBicmVhayB0aGlzIGRvd24gZm9yIHRoZSBmdXp6aW5nIHNldHVwOlxuXG4qICAgKipgV29ydGhGdXp6aW5nOiB0cnVlYCoqOiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlLlxuKiAgICoqYEZvY3VzU3ltYm9sczpgKipcblxuICAgICogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgOiBUaGlzIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSB0YXJnZXQuXG4gICAgKiAgIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YFxuICAgICogICBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgXG4gICAgKiAgIGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgXG4gICAgKiAgIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YDogIEFsbCBvZiB0aGVzZSBhcmUgKmNyaXRpY2FsbHkqIGltcG9ydGFudCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBMU00gaG9va3MgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIHRoZSBuZXcgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBmdW5jdGlvbmFsaXR5LiBUaGVzZSBhcmUgdGhlIHRvdWNoIHBvaW50cyB0aGF0IG5lZWQgdGhvcm91Z2ggY292ZXJhZ2UuXG5cbiogICAqKmBFbmFibGVDb25maWdzOmAqKlxuXG4gICAgKiAgIGBCUEZfTFNNYDogT2J2aW91c2x5LCB0aGlzIGlzIGZ1bmRhbWVudGFsLlxuICAgICogICBgRVZNYFxuICAgICogICBgU0VDVVJJVFlfU0VMSU5VWGBcbiAgICAqICAgYFNFQ1VSSVRZX1NNQUNLYDogTmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZXNlIGFyZSBlbmFibGVkIHNpbmNlIHRoZSBrZnVuYyBjaGFuZ2VzIExTTSBob29rcyB0aGF0IHRoZXNlIGxldmVyYWdlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm92ZWwgbWVjaGFuaXNtIGZvciBCUEYgTFNNIHByb2dyYW1zIHRvIG1hbmFnZSB4YXR0cnMgb24gbmV3IGlub2Rlcy4gSXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vayB0byB1c2UgdGhlIGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlIGFjcm9zcyBtdWx0aXBsZSBMU01zIChjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2spIG1lYW5zIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBjcm9zcy1MU00gY2hhbmdlcyBtYWtlIHRoaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBmb3IgZmluZGluZyBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIFRpbWUgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTAzLCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMjoxNC41NzM3ODAzNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg0NTAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJFVk1cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlcIixcbiAgICBcImV2bV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlcIixcbiAgICBcInNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBJdCBtb2RpZmllcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBzdHJ1Y3R1cmUsIGFmZmVjdGluZyBjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2suIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpv8lm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 01:23:18 +0000 UTC FinishedAt: 2026-07-01 01:32:16 +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": "e771677c937da5808f7b6c1f0e4a97ec1a84f8a8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "EVM", "SECURITY_SELINUX", "SECURITY_SMACK" ], "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": "e771677c937da5808f7b6c1f0e4a97ec1a84f8a8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM", "EVM", "SECURITY_SELINUX", "SECURITY_SMACK" ], "series_id": "86d7e906-c185-4aaa-9650-1f9d4f07e57f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_init_inode_xattr", "security_inode_init_security", "evm_inode_init_security", "selinux_inode_init_security", "smack_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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7RVZNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2V2bV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgdGhhdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIG9uIGEgbmV3IGlub2RlIGR1cmluZyBgaW5vZGVfaW5pdF9zZWN1cml0eWAuIEl0IG1vZGlmaWVzIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgTFNNIGhvb2sgc2lnbmF0dXJlIHRvIHVzZSBhIG5ldyBgc3RydWN0IGxzbV94YXR0cnNgIHN0cnVjdHVyZSwgYWZmZWN0aW5nIGNvcmUgTFNNLCBFVk0sIFNFTGludXgsIGFuZCBTbWFjay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDY0ODRiM2Y5YjA5Nzk4NGI5MmRkYTFhMDk4MGM1ZDJmYzNjZDk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMTozMToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IDc2OGFjYTJkYzBmMDM0Li5jNDAyM2M4MmYyMWU0MCAxMDA2NDRcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc25vdGlmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuQEAgLTM3NCw2ICYjNDM7Mzc1LDgzIEBAIF9fYnBmX2tmdW5jIHN0cnVjdCBpbm9kZSAqYnBmX3JlYWxfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIG4gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdHgtXHUwMDNleGF0dHJfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBjaGFyICpuYW1lID0gY3R4LVx1MDAzZXhhdHRyc1tpXS5uYW1lO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwgcHJlZml4X2xlbikpXG4mIzQzO1x0XHRcdG4mIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxuJiM0MzsgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dFxuJiM0MzsgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcJiMzNDticGYuZmlsZV9sYWJlbFwmIzM0OylcbiYjNDM7ICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZVxuJiM0MzsgKlxuJiM0MzsgKiBPbmx5IGNhbGxhYmxlIGZyb20gbHNtL2lub2RlX2luaXRfc2VjdXJpdHkgcHJvZ3JhbXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnZhbHVlX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopdmFsdWVfcDtcbiYjNDM7XHRzaXplX3QgbmFtZV9sZW47XG4mIzQzO1x0dm9pZCAqeGF0dHJfdmFsdWU7XG4mIzQzO1x0c3RydWN0IHhhdHRyICp4YXR0cjtcbiYjNDM7XHRjb25zdCB2b2lkICp2YWx1ZTtcbiYjNDM7XHR1MzIgdmFsdWVfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhhdHRycyB8fCAheGF0dHJzLVx1MDAzZXhhdHRycyB8fCAhbmFtZV9fc3RyKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFx1MDAzZT0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcbiYjNDM7XHRuYW1lX2xlbiA9IHN0cmxlbihuYW1lX19zdHIpO1xuJiM0MztcdGlmIChuYW1lX2xlbiA9PSAwIHx8IG5hbWVfbGVuIFx1MDAzZSBYQVRUUl9OQU1FX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsXG4mIzQzO1x0XHQgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKVxuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0dmFsdWVfbGVuID0gX19icGZfZHlucHRyX3NpemUodmFsdWVfcHRyKTtcbiYjNDM7XHRpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTtcbiYjNDM7XHRpZiAoIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgJiM0MzsgbmFtZSBpbnRvIG9uZSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdHhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW4gJiM0MzsgMSwgR0ZQX05PRlMpO1xuJiM0MztcdGlmICgheGF0dHJfdmFsdWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcbiYjNDM7XHRtZW1jcHkoeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuLCBuYW1lX19zdHIsIG5hbWVfbGVuKTtcbiYjNDM7XHQoKGNoYXIgKil4YXR0cl92YWx1ZSlbdmFsdWVfbGVuICYjNDM7IG5hbWVfbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4mIzQzO1x0aWYgKCF4YXR0cikge1xuJiM0MztcdFx0a2ZyZWUoeGF0dHJfdmFsdWUpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR4YXR0ci1cdTAwM2V2YWx1ZSA9IHhhdHRyX3ZhbHVlO1xuJiM0MztcdHhhdHRyLVx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbjtcbiYjNDM7XHR4YXR0ci1cdTAwM2V2YWx1ZV9sZW4gPSB2YWx1ZV9sZW47XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zODUsNiAmIzQzOzQ2Myw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2luaXRfaW5vZGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbiBcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbmluZGV4IDE0Mzc3NWEyN2EyYTBiLi5iNjU1YzcwODgxOGU1OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuQEAgLTE5LDYgJiM0MzsxOSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tfZGVmcy5oXHUwMDNlXG4gI3VuZGVmIExTTV9IT09LXG4gXG4mIzQzOy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqL1xuJiM0MzsjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxuJiM0MztcbiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7XG4gXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgX19yY3UgKnN0b3JhZ2U7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2bS5oIGIvaW5jbHVkZS9saW51eC9ldm0uaFxuaW5kZXggOTEzZjQ1NzNiMjAzOGUuLjUyOGYzNjBmMzMwOGRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldm0uaFxuQEAgLTEyLDYgJiM0MzsxMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0VWTVxuIGV4dGVybiBpbnQgZXZtX3NldF9rZXkodm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuKTtcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtMjEsOCAmIzQzOzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFx0XHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XG4gZXh0ZXJuIGJvb2wgZXZtX3JldmFsaWRhdGVfc3RhdHVzKGNvbnN0IGNoYXIgKnhhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxuQEAgLTYzLDggJiM0Mzs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3NzAuLjViMmRlNzg2NWNlODFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTE2LDggJiM0MzsxMTYsOCBAQCBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2FsbG9jX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSlcbiBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHQgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gLyoqXG4gICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4XG4tICogQHhhdHRyczogYXJyYXkgc3RvcmluZyBMU00tcHJvdmlkZWQgeGF0dHJzXG4tICogQHhhdHRyX2NvdW50OiBudW1iZXIgb2YgYWxyZWFkeSBzdG9yZWQgeGF0dHJzICh1cGRhdGVkKVxuJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rc1xuICAqXG4tICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAeGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhbiB4YXR0cixcbi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC5cbiYjNDM7ICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAY3R4LVx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cbiYjNDM7ICogeGF0dHIsIGFuZCBpbmNyZW1lbnQgQGN0eC1cdTAwM2V4YXR0cl9jb3VudC5cbiAgKlxuLSAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAeGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXHUwMDNleGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxuIHtcbi1cdGlmICh1bmxpa2VseSgheGF0dHJzKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIWN0eCB8fCAhY3R4LVx1MDAzZXhhdHRycykpXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0cmV0dXJuIFx1MDAyNnhhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdO1xuJiM0MztcdHJldHVybiBcdTAwMjZjdHgtXHUwMDNleGF0dHJzW2N0eC1cdTAwM2V4YXR0cl9jb3VudCYjNDM7JiM0MztdO1xuIH1cbiBcbiAjZW5kaWYgLyogISBfX0xJTlVYX0xTTV9IT09LU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4OC4uMGJlNTkwYzQwNjg5NTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcbiBzdHJ1Y3QgbHNtX2N0eDtcbiBcbiYjNDM7c3RydWN0IGxzbV94YXR0cnMge1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuJiM0MztcdHVuc2lnbmVkIGludCB4YXR0cl9jb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9sc20uYyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5pbmRleCA1NjQwNzFhOTJkN2QyMC4uMWMzZjg0YTkyNDIwMzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfbHNtLmNcbkBAIC0zMTUsNiAmIzQzOzMxNSw3IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2NyZWF0ZSlcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9mcmVlX3NlY3VyaXR5KVxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2dldGF0dHIpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfZ2V0eGF0dHIpXG4mIzQzO0JURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2luaXRfc2VjdXJpdHkpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbWtub2QpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbmVlZF9raWxscHJpdilcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9wb3N0X3NldHhhdHRyKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDQwZWZkZTIzM2YzYWIzLi5kN2M0NGM1YzBlMzA0NiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMwLDYgJiM0MzszMCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4mIzQzO1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4OS4uYjcxNThmYzYzNTQzZTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgJiM0MzsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxuICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWVcbiAgKi9cbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4mIzQzO1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4gXHRib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0eGF0dHJzID0gbHNtX3hhdHRycyA/IGxzbV94YXR0cnMtXHUwMDNleGF0dHJzIDogTlVMTDtcbiBcdGlmICghKGV2bV9pbml0aWFsaXplZCBcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA4Nyw3ICYjNDM7MTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTtcbiBcdC8qXG4gXHQgKiBBcnJheSB0ZXJtaW5hdG9yICh4YXR0ciBuYW1lID0gTlVMTCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWZpbGxlZFxuIFx0ICogeGF0dHIgc2xvdC5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEzMzMsOCAmIzQzOzEzMzMsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCBjb25zdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpXG4ge1xuIFx0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XG4tXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xuLVx0aW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7XG4mIzQzO1x0c3RydWN0IGxzbV94YXR0cnMgeGF0dHJzID0ge307XG4mIzQzO1x0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTM0NCwxNSAmIzQzOzEzNDQsMTUgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gXHRpZiAoaW5pdHhhdHRycykge1xuIFx0XHQvKiBBbGxvY2F0ZSAmIzQzOzEgYXMgdGVybWluYXRvci4gKi9cbi1cdFx0bmV3X3hhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgJiM0MzsgMSxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xuLVx0XHRpZiAoIW5ld194YXR0cnMpXG4mIzQzO1x0XHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xuJiM0MztcdFx0aWYgKCF4YXR0cnMueGF0dHJzKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcbi1cdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsIG5ld194YXR0cnMsXG4tXHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cl9jb3VudCk7XG4mIzQzO1x0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRycyk7XG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0LypcbkBAIC0xMzY0LDE0ICYjNDM7MTM2NCwxNCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdH1cbiBcbiBcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xuLVx0aWYgKCF4YXR0cl9jb3VudClcbiYjNDM7XHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcbiYjNDM7XHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTtcbiBvdXQ6XG4tXHRmb3IgKDsgeGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXG4tXHRcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4tXHRrZnJlZShuZXdfeGF0dHJzKTtcbiYjNDM7XHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcbiYjNDM7XHRcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuJiM0MztcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xuIFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMjk2Miw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXG4gXG4gc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjO1xuQEAgLTI5OTIsNyAmIzQzOzI5OTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhKHNic2VjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQkxBQkVMX01OVCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXHRpZiAoeGF0dHIpIHtcbiBcdFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2Y29udGV4dCwgXHUwMDI2Y2xlbik7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggZmYxMTUwNjhjNWMwNmYuLjQ1MDEwNzg0MzBjYTA1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtOTgxLDEwICYjNDM7OTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiBcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWxsZW4pXG4ge1xuLVx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4mIzQzO1x0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcbiBcdGlmICgheGF0dHIpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEwMDMsMTQgJiM0MzsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbiYjNDM7ICogQHhhdHRyczogd2hlcmUgdG8gcHV0IGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZSBjb3VudFxuICAqXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUmIzM5O3Mgbm8gbWVtb3J5XG4gICovXG4gc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0dHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTtcbiBcbi1cdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0XHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXG4tXHRcdFx0XHRUUkFOU19UUlVFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRV9TSVpFXG4tXHRcdFx0KSlcbiYjNDM7XHRcdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsXG4mIzQzO1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuJiM0MztcdFx0XHRcdFx0IFRSQU5TX1RSVUUsXG4mIzQzO1x0XHRcdFx0XHQgVFJBTlNfVFJVRV9TSVpFKSlcbiBcdFx0XHRcdHJjID0gLUVOT01FTTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHJjID09IDApXG4tXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxuLVx0XHRcdCAgICBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4tXHRcdCAgICAgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bilcbi1cdFx0KSlcbiYjNDM7XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuJiM0MztcdFx0XHRcdCBYQVRUUl9TTUFDS19TVUZGSVgsXG4mIzQzO1x0XHRcdFx0IGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bixcbiYjNDM7XHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuQEAgLTkyLDQgJiM0Mzs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xuIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7XG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzO1xuJiM0MztleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4mIzQzO1x0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKSBfX2tzeW0gX193ZWFrO1xuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5pbmRleCA0M2EyNmVjNjlhOGUzNi4uOGIyZTBkNDMzYWVhMmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfZ2V0X3hhdHRyLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X2ZzdmVyaXR5LnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHIuc2tlbC5oXCYjMzQ7XG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgdGVzdGZpbGVbXSA9IFwmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcJiMzNDs7XG4gXG5AQCAtMjY4LDYgJiM0MzsyNjksMTE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZClcbiBcdHJlbW92ZSh0ZXN0ZmlsZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGludCBmZCA9IC0xLCBlcnI7XG4mIzQzO1x0Y2hhciB2YWx1ZV9vdXRbNjRdO1xuJiM0MztcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX25ldyA9IFwmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NfbmV3XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiYjNDM7XHRlcnIgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi9cbiYjNDM7XHRmZCA9IG9wZW4odGVzdGZpbGVfbmV3LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7Y3JlYXRlX2ZpbGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFwmIzM0O2luaXRfcmVzdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogaW5pdHhhdHRycyBwcmVwZW5kcyBcJiMzNDtzZWN1cml0eS5cJiMzNDsgdG8gdGhlIG5hbWUuICovXG4mIzQzO1x0ZXJyID0gZ2V0eGF0dHIodGVzdGZpbGVfbmV3LCBcJiMzNDtzZWN1cml0eS5icGYudGVzdF9sYWJlbFwmIzM0OywgdmFsdWVfb3V0LFxuJiM0MztcdFx0ICAgICAgIHNpemVvZih2YWx1ZV9vdXQpKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBfX2Z1bmNfXyk7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZXJyLCAwLCBcJiMzNDtnZXR4YXR0clwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXhhdHRyX3ZhbHVlKSwgXCYjMzQ7eGF0dHJfc2l6ZVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcJiMzNDssXG4mIzQzO1x0XHRcdCAgc2l6ZW9mKFwmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwmIzM0OykpLCAwLFxuJiM0MztcdFx0ICBcJiMzNDt4YXR0cl92YWx1ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRyZW1vdmUodGVzdGZpbGVfbmV3KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogS2VlcCBpbiBzeW5jIHdpdGggQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyBpbiBpbmNsdWRlL2xpbnV4L2JwZl9sc20uaC4gKi9cbiYjNDM7I2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0XG4mIzQzOyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS5cbiYjNDM7ICogQ2FsbHMgYmV5b25kIHRoYXQgYnVkZ2V0IGFyZSByZWplY3RlZCBhdCBydW50aW1lIHdpdGggLUVOT1NQQy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307XG4mIzQzO1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFwmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdFwmIzM0OztcbiYjNDM7XHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcbiYjNDM7XHRpbnQgaSwgZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXCYjMzQ7b3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHNrZWxbaV0tXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmtbaV0sIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXG4mIzQzO1x0ZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdFxuJiM0MztcdCAqIHRoZSBidWRnZXQgZ2V0cyAtRU5PU1BDLiBUaGUgb3JkZXIgaW4gd2hpY2ggcHJvZ3JhbXMgcnVuIGlzIG5vdFxuJiM0MztcdCAqIGd1YXJhbnRlZWQsIHNvIGNvdW50IHJlc3VsdHMgaW5zdGVhZCBvZiBpbmRleGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmVzID0gc2tlbFtpXS1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXMgPT0gMClcbiYjNDM7XHRcdFx0b2smIzQzOyYjNDM7O1xuJiM0MztcdFx0ZWxzZSBpZiAocmVzID09IC1FTk9TUEMpXG4mIzQzO1x0XHRcdG5vc3BjJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0b3RoZXImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG9rLCBJTklUX0lOT0RFX1hBVFRSX01BWCwgXCYjMzQ7c2xvdHNfd2l0aGluX2J1ZGdldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKG5vc3BjLCAxLCBcJiMzNDtzbG90X292ZXJfYnVkZ2V0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEob3RoZXIsIDAsIFwmIzM0O3VuZXhwZWN0ZWRfcmVzdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuJiM0MztcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pO1xuJiM0MztcdH1cbiYjNDM7XHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxuIHtcbiBcdC8qIE1hdGNoZXMgeGF0dHJfbmFtZXMgaW4gcHJvZ3MvdGVzdF9nZXRfeGF0dHIuYyAqL1xuQEAgLTI4OCw0ICYjNDM7Mzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ZzdmVyaXR5XCYjMzQ7KSlcbiBcdFx0dGVzdF9mc3Zlcml0eSgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpbml0X2lub2RlX3hhdHRyXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfaW5pdF9pbm9kZV94YXR0cigpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNiMzc4ZGI5NTdhYTg5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgJiM0MzsxLDMxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2tmdW5jcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7X191MzIgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGluaXRfcmVzdWx0ID0gLTE7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciB4YXR0cl9uYW1lW10gPSBcJiMzNDticGYudGVzdF9sYWJlbFwmIzM0OztcbiYjNDM7Y2hhciB4YXR0cl92YWx1ZVtdID0gXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XG4mIzQzO1x0X191MzIgcGlkO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1x0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtFVk0mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7ZXZtX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O3NtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzQ2NDg0YjNmOWIwOTc5ODRiOTJkZGExYTA5ODBjNWQyZmMzY2Q5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMDE6MzE6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmMKaW5kZXggNzY4YWNhMmRjMGYwMzQuLmM0MDIzYzgyZjIxZTQwIDEwMDY0NAotLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Zzbm90aWZ5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va3MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiAKQEAgLTM3NCw2ICYjNDM7Mzc1LDgzIEBAIF9fYnBmX2tmdW5jIHN0cnVjdCBpbm9kZSAqYnBmX3JlYWxfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBkX3JlYWxfaW5vZGUoZGVudHJ5KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxOwomIzQzOwl1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjdHgtJmd0O3hhdHRyX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqbmFtZSA9IGN0eC0mZ3Q7eGF0dHJzW2ldLm5hbWU7CiYjNDM7CiYjNDM7CQlpZiAobmFtZSAmYW1wOyZhbXA7ICFzdHJuY21wKG5hbWUsIFhBVFRSX0JQRl9MU01fU1VGRklYLCBwcmVmaXhfbGVuKSkKJiM0MzsJCQluJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5CiYjNDM7ICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHQKJiM0MzsgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCAmIzM0O2JwZi5maWxlX2xhYmVsJiMzNDspCiYjNDM7ICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZQomIzQzOyAqCiYjNDM7ICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wOwomIzQzOwlzaXplX3QgbmFtZV9sZW47CiYjNDM7CXZvaWQgKnhhdHRyX3ZhbHVlOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKnhhdHRyOwomIzQzOwljb25zdCB2b2lkICp2YWx1ZTsKJiM0MzsJdTMyIHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCF4YXR0cnMgfHwgIXhhdHRycy0mZ3Q7eGF0dHJzIHx8ICFuYW1lX19zdHIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpICZndDs9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsKJiM0MzsJbmFtZV9sZW4gPSBzdHJsZW4obmFtZV9fc3RyKTsKJiM0MzsJaWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gJmd0OyBYQVRUUl9OQU1FX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLAomIzQzOwkJICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7CiYjNDM7CWlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gJmd0OyBYQVRUUl9TSVpFX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwl2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTsKJiM0MzsJaWYgKCF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBDb21iaW5lIHhhdHRyIHZhbHVlICYjNDM7IG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi8KJiM0MzsJeGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiAmIzQzOyBuYW1lX2xlbiAmIzQzOyAxLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgheGF0dHJfdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTsKJiM0MzsJbWVtY3B5KHhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbiwgbmFtZV9fc3RyLCBuYW1lX2xlbik7CiYjNDM7CSgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwl4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwomIzQzOwlpZiAoIXhhdHRyKSB7CiYjNDM7CQlrZnJlZSh4YXR0cl92YWx1ZSk7CiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJfQomIzQzOwomIzQzOwl4YXR0ci0mZ3Q7dmFsdWUgPSB4YXR0cl92YWx1ZTsKJiM0MzsJeGF0dHItJmd0O25hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbjsKJiM0MzsJeGF0dHItJmd0O3ZhbHVlX2xlbiA9IHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmNfZW5kX2RlZnMoKTsKIAogQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcykKQEAgLTM4NSw2ICYjNDM7NDYzLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZXRfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcykKIAogc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmgKaW5kZXggMTQzNzc1YTI3YTJhMGIuLmI2NTVjNzA4ODE4ZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaApAQCAtMTksNiAmIzQzOzE5LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va19kZWZzLmgmZ3Q7CiAjdW5kZWYgTFNNX0hPT0sKIAomIzQzOy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqLwomIzQzOyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0CiYjNDM7CiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7CiAJc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oCmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V2bS5oCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVncml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRyczsKJiM0MzsKICNpZmRlZiBDT05GSUdfRVZNCiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7CiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0yMSw4ICYjNDM7MjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSwKIAkJIGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTsKIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCk7CiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTsKIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsCkBAIC02Myw4ICYjNDM7NjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLAogCiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkJICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkJCQkJICBpbnQgKnhhdHRyX2NvdW50KQomIzQzOwkJCQkJICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMTYsOCAmIzQzOzExNiw4IEBAIExTTV9IT09LKGludCwgMCwgaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSkKIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JIGludCAqeGF0dHJfY291bnQpCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CSBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7CiAKIC8qKgogICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4Ci0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnMKLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZCkKJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rcwogICoKLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsCi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC4KJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtJmd0O3hhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4KJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LSZndDt4YXR0cl9jb3VudC4KICAqCi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtJmd0O3hhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgICAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eCkKIHsKLQlpZiAodW5saWtlbHkoIXhhdHRycykpCiYjNDM7CWlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtJmd0O3hhdHRycykpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiAmYW1wO3hhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdOwomIzQzOwlyZXR1cm4gJmFtcDtjdHgtJmd0O3hhdHRyc1tjdHgtJmd0O3hhdHRyX2NvdW50JiM0MzsmIzQzO107CiB9CiAKICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4OC4uMGJlNTkwYzQwNjg5NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7CiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uOwogc3RydWN0IGxzbV9jdHg7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRycyB7CiYjNDM7CXN0cnVjdCB4YXR0ciAqeGF0dHJzOwomIzQzOwl1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7CiYjNDM7fTsKJiM0MzsKIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqLwogI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwCiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uYwppbmRleCA1NjQwNzFhOTJkN2QyMC4uMWMzZjg0YTkyNDIwMzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jCkBAIC0zMTUsNiAmIzQzOzMxNSw3IEBAIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2NyZWF0ZSkKIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2ZyZWVfc2VjdXJpdHkpCiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXRhdHRyKQogQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfZ2V0eGF0dHIpCiYjNDM7QlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfaW5pdF9zZWN1cml0eSkKIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX21rbm9kKQogQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbmVlZF9raWxscHJpdikKIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX3Bvc3Rfc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9icGYvaG9va3MuYyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jCmluZGV4IDQwZWZkZTIzM2YzYWIzLi5kN2M0NGM1YzBlMzA0NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYnBmL2hvb2tzLmMKQEAgLTMwLDYgJiM0MzszMCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKQogCiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iKSwKJiM0MzsJLmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsCiB9OwogCiBERUZJTkVfTFNNKGJwZikgPSB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCkBAIC0xMDYyLDE0ICYjNDM7MTA2MiwxNiBAQCBzdGF0aWMgaW50IGV2bV9pbm9kZV9jb3B5X3VwX3hhdHRyKHN0cnVjdCBkZW50cnkgKnNyYywgY29uc3QgY2hhciAqbmFtZSkKICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWUKICAqLwogaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkJCSAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKJiM0MzsJCQkgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpCiB7CiAJc3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTsKIAlzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKnhhdHRyczsKIAlib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7CiAJaW50IHJjOwogCiYjNDM7CXhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLSZndDt4YXR0cnMgOiBOVUxMOwogCWlmICghKGV2bV9pbml0aWFsaXplZCAmYW1wOyBFVk1fSU5JVF9ITUFDKSB8fCAheGF0dHJzKQogCQlyZXR1cm4gMDsKIApAQCAtMTA4Nyw3ICYjNDM7MTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoIWV2bV9wcm90ZWN0ZWRfeGF0dHJzKQogCQlyZXR1cm4gMDsKIAotCWV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTsKJiM0MzsJZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KGxzbV94YXR0cnMpOwogCS8qCiAJICogQXJyYXkgdGVybWluYXRvciAoeGF0dHIgbmFtZSA9IE5VTEwpIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1maWxsZWQKIAkgKiB4YXR0ciBzbG90LgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTEzMzMsOCAmIzQzOzEzMzMsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKQogewogCXN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsOwotCXN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7CiYjNDM7CXN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9OwomIzQzOwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKQEAgLTEzNDQsMTUgJiM0MzsxMzQ0LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAJaWYgKGluaXR4YXR0cnMpIHsKIAkJLyogQWxsb2NhdGUgJiM0MzsxIGFzIHRlcm1pbmF0b3IuICovCi0JCW5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCi0JCQkJICAgICBzaXplb2YoKm5ld194YXR0cnMpLCBHRlBfTk9GUyk7Ci0JCWlmICghbmV3X3hhdHRycykKJiM0MzsJCXhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCiYjNDM7CQkJCQlzaXplb2YoKnhhdHRycy54YXR0cnMpLCBHRlBfTk9GUyk7CiYjNDM7CQlpZiAoIXhhdHRycy54YXR0cnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkgewotCQlyZXQgPSBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLAotCQkJCQkJICAmYW1wO3hhdHRyX2NvdW50KTsKJiM0MzsJCXJldCA9IHNjYWxsLSZndDtobC0mZ3Q7aG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsCiYjNDM7CQkJCQkJCSAgJmFtcDt4YXR0cnMpOwogCQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FT1BOT1RTVVBQKQogCQkJZ290byBvdXQ7CiAJCS8qCkBAIC0xMzY0LDE0ICYjNDM7MTM2NCwxNCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAl9CiAKIAkvKiBJZiBpbml0eGF0dHJzKCkgaXMgTlVMTCwgeGF0dHJfY291bnQgaXMgemVybywgc2tpcCB0aGUgY2FsbC4gKi8KLQlpZiAoIXhhdHRyX2NvdW50KQomIzQzOwlpZiAoIXhhdHRycy54YXR0cl9jb3VudCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTsKJiM0MzsJcmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7CiBvdXQ6Ci0JZm9yICg7IHhhdHRyX2NvdW50ICZndDsgMDsgeGF0dHJfY291bnQtLSkKLQkJa2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTsKLQlrZnJlZShuZXdfeGF0dHJzKTsKJiM0MzsJZm9yICg7IHhhdHRycy54YXR0cl9jb3VudCAmZ3Q7IDA7IHhhdHRycy54YXR0cl9jb3VudC0tKQomIzQzOwkJa2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7CiYjNDM7CWtmcmVlKHhhdHRycy54YXR0cnMpOwogCXJldHVybiAocmV0ID09IC1FT1BOT1RTVVBQKSA/IDAgOiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjk2Miw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpOwogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CkBAIC0yOTkyLDcgJiM0MzsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJICAgICEoc2JzZWMtJmd0O2ZsYWdzICZhbXA7IFNCTEFCRUxfTU5UKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CXhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7CiAJaWYgKHhhdHRyKSB7CiAJCXJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLAogCQkJCQkJICAgJmFtcDtjb250ZXh0LCAmYW1wO2NsZW4pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05ODEsMTAgJiM0Mzs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsCiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCwKJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKIAkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKQogewotCXN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwogCiAJaWYgKCF4YXR0cikKIAkJcmV0dXJuIDA7CkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsCiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlCiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3QKICAqIEBxc3RyOiB1bnVzZWQKLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlcwotICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKQomIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnQKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSYjMzk7cyBubyBtZW1vcnkKICAqLwogc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTsKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpOwpAQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQkJdHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTsKIAotCQkJaWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LAotCQkJCVhBVFRSX1NNQUNLX1RSQU5TTVVURSwKLQkJCQlUUkFOU19UUlVFLAotCQkJCVRSQU5TX1RSVUVfU0laRQotCQkJKSkKJiM0MzsJCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywKJiM0MzsJCQkJCSBYQVRUUl9TTUFDS19UUkFOU01VVEUsCiYjNDM7CQkJCQkgVFJBTlNfVFJVRSwKJiM0MzsJCQkJCSBUUkFOU19UUlVFX1NJWkUpKQogCQkJCXJjID0gLUVOT01FTTsKIAkJfQogCX0KIAogCWlmIChyYyA9PSAwKQotCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsCi0JCQkgICAgWEFUVFJfU01BQ0tfU1VGRklYLAotCQkJICAgIGlzc3AtJmd0O3Nta19pbm9kZS0mZ3Q7c21rX2tub3duLAotCQkgICAgIHN0cmxlbihpc3NwLSZndDtzbWtfaW5vZGUtJmd0O3Nta19rbm93bikKLQkJKSkKJiM0MzsJCWlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLAomIzQzOwkJCQkgWEFUVFJfU01BQ0tfU1VGRklYLAomIzQzOwkJCQkgaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24sCiYjNDM7CQkJCSBzdHJsZW4oaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24pKSkKIAkJCXJjID0gLUVOT01FTTsKIGluc3RhbnRfaW5vZGU6CiAJaXNzcC0mZ3Q7c21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaAppbmRleCBhZTcxZTliNjkwNTE4Ni4uMjYzOWY5Zjk0MTk1NWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaApAQCAtOTIsNCAmIzQzOzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKIAkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrOwogZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhazsKIAomIzQzO3N0cnVjdCBsc21feGF0dHJzOwomIzQzO2V4dGVybiBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKJiM0MzsJCQkJY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhazsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYwppbmRleCA0M2EyNmVjNjlhOGUzNi4uOGIyZTBkNDMzYWVhMmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogI2luY2x1ZGUgJiMzNDt0ZXN0X2dldF94YXR0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9mc3Zlcml0eS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaCYjMzQ7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3MmIzM0OzsKIApAQCAtMjY4LDYgJiM0MzsyNjksMTE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZCkKIAlyZW1vdmUodGVzdGZpbGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDsKJiM0MzsJaW50IGZkID0gLTEsIGVycjsKJiM0MzsJY2hhciB2YWx1ZV9vdXRbNjRdOwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NfbmV3JiMzNDs7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX25ldywgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZV9maWxlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdCwgMCwgJiMzNDtpbml0X3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogaW5pdHhhdHRycyBwcmVwZW5kcyAmIzM0O3NlY3VyaXR5LiYjMzQ7IHRvIHRoZSBuYW1lLiAqLwomIzQzOwllcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsICYjMzQ7c2VjdXJpdHkuYnBmLnRlc3RfbGFiZWwmIzM0OywgdmFsdWVfb3V0LAomIzQzOwkJICAgICAgIHNpemVvZih2YWx1ZV9vdXQpKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFTk9EQVRBKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXG4mIzM0OywKJiM0MzsJCSAgICAgICBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9HRShlcnIsIDAsICYjMzQ7Z2V0eGF0dHImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7eGF0dHJfdmFsdWUpLCAmIzM0O3hhdHRyX3NpemUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShzdHJuY21wKHZhbHVlX291dCwgJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OywKJiM0MzsJCQkgIHNpemVvZigmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMCYjMzQ7KSksIDAsCiYjNDM7CQkgICYjMzQ7eGF0dHJfdmFsdWUmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShmZCk7CiYjNDM7CXRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTsKJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX25ldyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovCiYjNDM7I2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0CiYjNDM7ICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLgomIzQzOyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307CiYjNDM7CWNvbnN0IGNoYXIgKnRlc3RmaWxlX3Nsb3QgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdCYjMzQ7OwomIzQzOwlpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDsKJiM0MzsJaW50IGksIGZkID0gLTE7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0Oz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJc2tlbFtpXS0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CQlsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS0mZ3Q7cHJvZ3MudGVzdF9pbml0X2lub2RlX3hhdHRyKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX3Nsb3QsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGVfZmlsZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdAomIzQzOwkgKiB0aGUgYnVkZ2V0IGdldHMgLUVOT1NQQy4gVGhlIG9yZGVyIGluIHdoaWNoIHByb2dyYW1zIHJ1biBpcyBub3QKJiM0MzsJICogZ3VhcmFudGVlZCwgc28gY291bnQgcmVzdWx0cyBpbnN0ZWFkIG9mIGluZGV4aW5nLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByZXMgPSBza2VsW2ldLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdDsKJiM0MzsKJiM0MzsJCWlmIChyZXMgPT0gMCkKJiM0MzsJCQlvayYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlIGlmIChyZXMgPT0gLUVOT1NQQykKJiM0MzsJCQlub3NwYyYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlCiYjNDM7CQkJb3RoZXImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsICYjMzQ7c2xvdHNfd2l0aGluX2J1ZGdldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKG5vc3BjLCAxLCAmIzM0O3Nsb3Rfb3Zlcl9idWRnZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShvdGhlciwgMCwgJiMzNDt1bmV4cGVjdGVkX3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDs9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3kobGlua1tpXSk7CiYjNDM7CQl0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7CiYjNDM7CX0KJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX3Nsb3QpOwomIzQzO30KJiM0MzsKIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIHsKIAkvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi8KQEAgLTI4OCw0ICYjNDM7Mzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZCkKIAogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZnN2ZXJpdHkmIzM0OykpCiAJCXRlc3RfZnN2ZXJpdHkoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpbml0X2lub2RlX3hhdHRyJiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0JiMzNDspKQomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uY2IzNzhkYjk1N2FhODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMKQEAgLTAsMCAmIzQzOzEsMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9rZnVuY3MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO19fdTMyIG1vbml0b3JlZF9waWQ7CiYjNDM7aW50IGluaXRfcmVzdWx0ID0gLTE7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgeGF0dHJfbmFtZVtdID0gJiMzNDticGYudGVzdF9sYWJlbCYjMzQ7OwomIzQzO2NoYXIgeGF0dHJfdmFsdWVbXSA9ICYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwJiMzNDs7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtLnMvaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyOwomIzQzOwlfX3UzMiBwaWQ7CiYjNDM7CiYjNDM7CXBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwlpZiAocGlkICE9IG1vbml0b3JlZF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwlpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEJQRiBLZnVuYyBmb3IgSW5vZGUgWGF0dHIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBUaGlzIGlzIHByZXR0eSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGxldCBCUEYgTFNNIHByb2dyYW1zIHNldCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIG9uIGEgKm5ldyogaW5vZGUgcmlnaHQgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgcHJvY2Vzcy4gTG9va2luZyBhdCB0aGUgZmlsZXMgaXQgdG91Y2hlcywgaXQmIzM5O3MgaW1wYWN0aW5nIGEgd2lkZSByYW5nZSBvZiBzZWN1cml0eSBhcmVhczogYGZzL2JwZl9mc19rZnVuY3MuY2AsIHRoZSB2YXJpb3VzIGBpbmNsdWRlL2xpbnV4LypgIGhlYWRlcnMgcmVsYXRlZCB0byBCUEYsIEVWTSwgYW5kIExTTSBob29rcywgYXMgd2VsbCBhcyBjb3JlIHNlY3VyaXR5IGNvbXBvbmVudHMgaW4gYGtlcm5lbC9icGYvYnBmX2xzbS5jYCwgYHNlY3VyaXR5L2JwZi9ob29rcy5jYCwgYHNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY2AsIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBudW1iZXIgb2YgdG91Y2hwb2ludHMhCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG5ldyBrZnVuYyBpcyBwcm9wZXJseSByZWdpc3RlcmVkIGFuZCBhY2Nlc3NpYmxlLiBJIHNlZSBpdCYjMzk7cyBhZGRlZCB0byBgYnBmX2ZzX2tmdW5jX3NldF9pZHNgIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBhbHNvIG1vZGlmeWluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZTsgaW5zdGVhZCBvZiB0aGUgb2xkZXIgYHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50YCwgaXQmIzM5O3Mgbm93IHVzaW5nIGBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzYC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGZvciB0aG9zZSBjcml0aWNhbCBzdWJzeXN0ZW1zIOKAkyBMU00sIEVWTSwgU0VMaW51eCwgU21hY2ssIGFuZCBCUEYuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ugc29tZSBoZWFkYWNoZXMgaWYgbm90IHByb3Blcmx5IGhhbmRsZWQsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHdlIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgdXNlZCBhY3Jvc3MgdGhlIGNvZGViYXNlLgoKVGhlIG5leHQgc3RlcCBpcyB0byBjb25zaWRlciBmdXp6aW5nLiBHaXZlbiB0aGUga2VybmVsLWxldmVsIGludGVncmF0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXcgeGF0dHIgc2V0dGluZyBjYXBhYmlsaXRpZXMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXMgYWJzb2x1dGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGF0IEJQRiBMU00gZnVuY3Rpb25hbGl0eSB3aWxsIHJlcXVpcmUgYENPTkZJR19CUEZfTFNNYC4gTGV0IG1lIGNoZWNrIGlmIHRoZSBrZnVuYyBpdHNlbGYgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AgaGFzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhc3NvY2lhdGVkIHdpdGggaXQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcsIG9mIGNvdXJzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZnNfa2Z1bmNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEzMD1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVx0XHQmIzQzOz0gem9uZWZzL1xuZnMvTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19CUEZfTFNNKVx0XHQmIzQzOz0gYnBmX2ZzX2tmdW5jcy5vXG5mcy9NYWtlZmlsZS0xMzItb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXHQmIzQzOz0gcmVzY3RybC9cbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmM9NDY3PUJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ2OC1cbmZzL2JwZl9mc19rZnVuY3MuYzo0Njk6c3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbmZzL2JwZl9mc19rZnVuY3MuYy00NzAte1xuLS1cbmZzL2JwZl9mc19rZnVuY3MuYz01MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTUwOS1cdC5zZXQgPSBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcyxcbmZzL2JwZl9mc19rZnVuY3MuYzo1MTA6XHQuZmlsdGVyID0gYnBmX2ZzX2tmdW5jc19maWx0ZXIsXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTExLX07XG5mcy9icGZfZnNfa2Z1bmNzLmMtNTEyLVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxMzpzdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcbmZzL2JwZl9mc19rZnVuY3MuYy01MTQte1xuLS1cbmZzL2JwZl9mc19rZnVuY3MuYy01MTctXG5mcy9icGZfZnNfa2Z1bmNzLmM6NTE4OmxhdGVfaW5pdGNhbGwoYnBmX2ZzX2tmdW5jc19pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfTFNNYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IGhlcmUuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEdvdHRhIGJlIHRob3JvdWdoLgoKUmlnaHQsIHRoZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGlzIGRlZmluZWQgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCB0aGF0IGZpbGUgaXMgbXkgbmV4dCB0YXJnZXQuIEFuZCB0aGUgaG9vaywgYGlub2RlX2luaXRfc2VjdXJpdHlgLCB0aGF0JiMzOTtzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgYW5kIEkga25vdyB0aGF0JiMzOTtzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZCB3aGljaCBpc24mIzM5O3QgYSBwcm9ibGVtIGZvciBtZS4gT2theSwgc28gdGhhdCBrZnVuYyB1dGlsaXplcyBgbHNtX2dldF94YXR0cl9zbG90YC4KCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGBsc21fZ2V0X3hhdHRyX3Nsb3RgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgaW5vZGVzIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JwZl9mc19rZnVuY3MuYz0zNzg9c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtMzkyLS8qKlxuZnMvYnBmX2ZzX2tmdW5jcy5jOjM5MzogKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHlcbmZzL2JwZl9mc19rZnVuY3MuYy0zOTQtICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAxLSAqL1xuZnMvYnBmX2ZzX2tmdW5jcy5jOjQwMjpfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbmZzL2JwZl9mc19rZnVuY3MuYy00MDMtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmM9NDY1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDY2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ2Ny1CVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oPTk1PXN0cnVjdCBsc21feGF0dHJzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaDo5NjpleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oLTk3LVx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYz0xNz1pbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjctXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcdTAwMjZ2YWx1ZV9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jOjI4Olx0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhhdHRyIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9uIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXMgY2xlYXJseSB0aGUga2V5IHBsYXllciBoZXJlLiBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gaGFwcGVucy4gQnV0IHRoZW4gdGhlcmUmIzM5O3MgYWxzbyBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHRoaXMgaGFzIHRvIGRvIHdpdGggaW50ZWdyYXRpbmcgQlBGIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgZXhpc3Rpbmcgc2VjdXJpdHkgZnJhbWV3b3JrIGR1cmluZyBpbm9kZSBpbml0aWFsaXphdGlvbi4gSSByZWFsbHkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGltcGFjdCB0aGUgc2VjdXJpdHkgY29udGV4dC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgdGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hbm9uX2lub2Rlcy5jPTkzPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBhbm9uX2lub2RlX2ZzX3R5cGUgPSB7XG4tLVxuZnMvYW5vbl9pbm9kZXMuYy0xMDYtICogVGhlIGZ1bmN0aW9uIGVuc3VyZXMgcHJvcGVyIHNlY3VyaXR5IGluaXRpYWxpemF0aW9uIHRocm91Z2ggdGhlIExTTSBob29rXG5mcy9hbm9uX2lub2Rlcy5jOjEwNzogKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKS5cbmZzL2Fub25faW5vZGVzLmMtMTA4LSAqXG4tLVxuZnMvYW5vbl9pbm9kZXMuYz0xMTE9c3RydWN0IGlub2RlICphbm9uX2lub2RlX21ha2Vfc2VjdXJlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvYW5vbl9pbm9kZXMuYy0xMjEtXHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YW5vbl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvYW5vbl9pbm9kZXMuYzoxMjI6XHRlcnJvciA9XHRzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oaW5vZGUsIFx1MDAyNlFTVFIobmFtZSksXG5mcy9hbm9uX2lub2Rlcy5jLTEyMy1cdFx0XHRcdFx0XHQgIGNvbnRleHRfaW5vZGUpO1xuLS1cbmZzL2J0cmZzL3hhdHRyLmM9NTIxPWludCBidHJmc194YXR0cl9zZWN1cml0eV9pbml0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLFxuLS1cbmZzL2J0cmZzL3hhdHRyLmMtNTI0LXtcbmZzL2J0cmZzL3hhdHRyLmM6NTI1Olx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL2J0cmZzL3hhdHRyLmMtNTI2LVx0XHRcdFx0XHQgICAgXHUwMDI2YnRyZnNfaW5pdHhhdHRycywgdHJhbnMpO1xuLS1cbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYz00OD1leHQyX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0Mi94YXR0cl9zZWN1cml0eS5jLTUwLXtcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYzo1MTpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMtNTItXHRcdFx0XHRcdCAgICBcdTAwMjZleHQyX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYz01NT1leHQ0X2luaXRfc2VjdXJpdHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTU3LXtcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYzo1ODpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNTktXHRcdFx0XHRcdCAgICBcdTAwMjZleHQ0X2luaXR4YXR0cnMsIGhhbmRsZSk7XG4tLVxuZnMvZjJmcy94YXR0ci5jPTE1NT1pbnQgZjJmc19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2YyZnMveGF0dHIuYy0xNTcte1xuZnMvZjJmcy94YXR0ci5jOjE1ODpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9mMmZzL3hhdHRyLmMtMTU5LVx0XHRcdFx0ZjJmc19pbml0eGF0dHJzLCBpZm9saW8pO1xuLS1cbmZzL2dmczIvaW5vZGUuYz03MDA9c3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2dmczIvaW5vZGUuYy04OTEtXG5mcy9nZnMyL2lub2RlLmM6ODkyOlx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KFx1MDAyNmlwLVx1MDAzZWlfaW5vZGUsIFx1MDAyNmRpcC1cdTAwM2VpX2lub2RlLCBuYW1lLFxuZnMvZ2ZzMi9pbm9kZS5jLTg5My1cdFx0XHRcdFx0ICAgICBcdTAwMjZnZnMyX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL2hmc3BsdXMveGF0dHJfc2VjdXJpdHkuYz02OD1pbnQgaGZzcGx1c19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMveGF0dHJfc2VjdXJpdHkuYy03MC17XG5mcy9oZnNwbHVzL3hhdHRyX3NlY3VyaXR5LmM6NzE6XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuZnMvaGZzcGx1cy94YXR0cl9zZWN1cml0eS5jLTcyLVx0XHRcdFx0XHRcdTAwMjZoZnNwbHVzX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL2pmZnMyL3NlY3VyaXR5LmM9NDM9aW50IGpmZnMyX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvamZmczIvc2VjdXJpdHkuYy00NS17XG5mcy9qZmZzMi9zZWN1cml0eS5jOjQ2Olx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL2pmZnMyL3NlY3VyaXR5LmMtNDctXHRcdFx0XHRcdCAgICBcdTAwMjZqZmZzMl9pbml0eGF0dHJzLCBOVUxMKTtcbi0tXG5mcy9qZnMveGF0dHIuYz0xMDQ5PWludCBqZnNfaW5pdF9zZWN1cml0eSh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2pmcy94YXR0ci5jLTEwNTEte1xuZnMvamZzL3hhdHRyLmM6MTA1MjpcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9qZnMveGF0dHIuYy0xMDUzLVx0XHRcdFx0XHQgICAgXHUwMDI2amZzX2luaXR4YXR0cnMsIFx1MDAyNnRpZCk7XG4tLVxuZnMvb2NmczIveGF0dHIuYz03MzA4PWludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzMxOC1cdGlmIChzaSkge1xuZnMvb2NmczIveGF0dHIuYzo3MzE5Olx0XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG5mcy9vY2ZzMi94YXR0ci5jLTczMjAtXHRcdFx0XHRcdFx0ICAgXHUwMDI2b2NmczJfaW5pdHhhdHRycywgc2kpO1xuZnMvb2NmczIveGF0dHIuYy03MzIxLVx0XHQvKlxuZnMvb2NmczIveGF0dHIuYzo3MzIyOlx0XHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZG9lcyBub3QgcmV0dXJuIC1FT1BOT1RTVVBQLFxuZnMvb2NmczIveGF0dHIuYy03MzIzLVx0XHQgKiB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB4YXR0ciBvdXJzZWx2ZXMuXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MzMwLVxuZnMvb2NmczIveGF0dHIuYzo3MzMxOlx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL29jZnMyL3hhdHRyLmMtNzMzMi1cdFx0XHRcdFx0ICAgIFx1MDAyNm9jZnMyX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmZzL3JhbWZzL2lub2RlLmM9OTg9cmFtZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL3JhbWZzL2lub2RlLmMtMTA0LVx0aWYgKGlub2RlKSB7XG5mcy9yYW1mcy9pbm9kZS5jOjEwNTpcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsXG5mcy9yYW1mcy9pbm9kZS5jLTEwNi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIE5VTEwsXG4tLVxuZnMvcmFtZnMvaW5vZGUuYz0xMzY9c3RhdGljIGludCByYW1mc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9yYW1mcy9pbm9kZS5jLTE0NS1cbmZzL3JhbWZzL2lub2RlLmM6MTQ2Olx0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpcixcbmZzL3JhbWZzL2lub2RlLmMtMTQ3LVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgTlVMTCxcbi0tXG5mcy9yYW1mcy9pbm9kZS5jPTE2Nj1zdGF0aWMgaW50IHJhbWZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvcmFtZnMvaW5vZGUuYy0xNzUtXG5mcy9yYW1mcy9pbm9kZS5jOjE3NjpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLFxuZnMvcmFtZnMvaW5vZGUuYy0xNzctXHRcdFx0XHRcdCAgICAgXHUwMDI2ZmlsZV9kZW50cnkoZmlsZSktXHUwMDNlZF9uYW1lLCBOVUxMLFxuLS1cbmZzL3ViaWZzL3hhdHRyLmM9NjM1PWludCB1Ymlmc19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL3ViaWZzL3hhdHRyLmMtNjM5LVxuZnMvdWJpZnMveGF0dHIuYzo2NDA6XHRlcnIgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkZW50cnksIHFzdHIsXG5mcy91Ymlmcy94YXR0ci5jLTY0MS1cdFx0XHRcdFx0ICAgXHUwMDI2aW5pdF94YXR0cnMsIE5VTEwpO1xuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTg2PXhmc19pbm9kZV9pbml0X3NlY3VyaXR5KFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTkwLXtcbmZzL3hmcy94ZnNfaW9wcy5jOjkxOlx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcbmZzL3hmcy94ZnNfaW9wcy5jLTkyLVx0XHRcdFx0XHQgICAgIFx1MDAyNnhmc19pbml0eGF0dHJzLCBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MjcyPWV4dGVybiBpbnQgbW1hcF9taW5fYWRkcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTI3NS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoyNzY6Lyogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSBjYWxsYmFjayBmdW5jdGlvbiB0byB3cml0ZSB4YXR0cnMgKi9cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0yNzctdHlwZWRlZiBpbnQgKCppbml0eGF0dHJzKSAoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDA1PXZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDY6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwOC1cdFx0XHRcdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQwOTppbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEwLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTg4NT1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtODkzLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjg5NDpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtODk1LVx0XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05MDItXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6OTAzOnN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTkwNC1cdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jPTE3OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYnBmX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5rZXJuZWwvYnBmL2lub2RlLmMtMTg4LVxua2VybmVsL2JwZi9pbm9kZS5jOjE4OTpcdHJldCA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmtlcm5lbC9icGYvaW5vZGUuYy0xOTAtXHRcdFx0XHRcdCAgIGJwZl9mc19pbml0eGF0dHJzLCBOVUxMKTtcbi0tXG5rZXJuZWwvYnBmL2lub2RlLmM9MzYzPXN0YXRpYyBpbnQgYnBmX21rb2JqX29wcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqcmF3LFxuLS1cbmtlcm5lbC9icGYvaW5vZGUuYy0zNzQtXG5rZXJuZWwvYnBmL2lub2RlLmM6Mzc1Olx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLFxua2VybmVsL2JwZi9pbm9kZS5jLTM3Ni1cdFx0XHRcdFx0ICAgYnBmX2ZzX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz00Mjc9c3RhdGljIGludCBicGZfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jLTQ0Ni1cbmtlcm5lbC9icGYvaW5vZGUuYzo0NDc6XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsXG5rZXJuZWwvYnBmL2lub2RlLmMtNDQ4LVx0XHRcdFx0XHQgICBicGZfZnNfaW5pdHhhdHRycywgTlVMTCk7XG4tLVxubW0vbWVtZmQuYz00NTg9c3RydWN0IGZpbGUgKm1lbWZkX2FsbG9jX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbm1tL21lbWZkLmMtNDc2LVx0aW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xubW0vbWVtZmQuYzo0Nzc6XHRlcnIgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oaW5vZGUsXG5tbS9tZW1mZC5jLTQ3OC1cdFx0XHRcdTAwMjZRU1RSKE1FTUZEX0FOT05fTkFNRSksIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9Mzg1MD1zaG1lbV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxubW0vc2htZW0uYy0zODY2LVx0XHRnb3RvIG91dF9pcHV0O1xubW0vc2htZW0uYzozODY3Olx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsXG5tbS9zaG1lbS5jLTM4NjgtXHRcdFx0XHRcdCAgICAgc2htZW1faW5pdHhhdHRycywgTlVMTCk7XG4tLVxubW0vc2htZW0uYz0zODg5PXNobWVtX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbm1tL3NobWVtLmMtMzkwMC1cdH1cbm1tL3NobWVtLmM6MzkwMTpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBOVUxMLFxubW0vc2htZW0uYy0zOTAyLVx0XHRcdFx0XHQgICAgIHNobWVtX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9NDA3OT1zdGF0aWMgaW50IHNobWVtX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbm1tL3NobWVtLmMtNDA5Ni1cbm1tL3NobWVtLmM6NDA5NzpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLFxubW0vc2htZW0uYy00MDk4LVx0XHRcdFx0XHQgICAgIHNobWVtX2luaXR4YXR0cnMsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9NDE5MD1zdGF0aWMgaW50IHNobWVtX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTQyMjQtLypcbm1tL3NobWVtLmM6NDIyNTogKiBDYWxsYmFjayBmb3Igc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgpIGZvciBhY3F1aXJpbmcgeGF0dHJzLlxubW0vc2htZW0uYy00MjI2LSAqL1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYz0xMDY0PWludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtMTA3OC1cdC8qXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM6MTA3OTpcdCAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoKSBtYWtlcyBzdXJlIHRoYXQgdGhlIHhhdHRycyBhcnJheSBpc1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTEwODAtXHQgKiBjb250aWd1b3VzLCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHNlY3VyaXR5LmV2bSwgYW5kIHRoYXQgdGhlcmUgaXNcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTEzMDI9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKTtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzMDQtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzMDU6ICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgpIC0gSW5pdGlhbGl6ZSBhbiBpbm9kZSYjMzk7cyBMU00gY29udGV4dFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzA2LSAqIEBpbm9kZTogdGhlIGlub2RlXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzMwLSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzMxOmludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzMyLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3Ni19XG5zZWN1cml0eS9zZWN1cml0eS5jOjEzNzc6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3OC1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3OS0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTM4MDogKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzODEtICogQGlub2RlOiB0aGUgaW5vZGVcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzOTAtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzOTE6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzkyLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMjcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbnRlcnNlY3Rpb24gb2YgQlBGLCBMU00sIGFuZCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoZSBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyIGhlcmUsIGNhbGxlZCBieSBudW1lcm91cyBmaWxlc3lzdGVtcy4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGVudHJ5LiBUaGVuIHdlIGhhdmUgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYSBrZnVuYywgYmVpbmcgaW52b2tlZCBmcm9tIGEgQlBGIHByb2dyYW0uIEludGVyZXN0aW5nLiBUaGF0IHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jYCwgYHRlc3RfaW5pdF9pbm9kZV94YXR0cmAsIGlzIHNob3dpbmcgdXMgdGhlIGRpcmVjdCBsaW5rIOKAkyB0aGUgQlBGIHByb2dyYW0gYXR0YWNoZXMgdG8gYGxzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlgIGFuZCB0aGVuIGNhbGxzIGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19CUEZfTFNNYCBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLiBTaW5jZSBgQ09ORklHX0JQRl9MU01gIGltcGxpZXMgYENPTkZJR19TRUNVUklUWWAsIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBOb3RoaW5nIGFib3V0IG5ldHdvcmsgc2VjdXJpdHkgaGVyZSwgc28gYENPTkZJR19TRUNVUklUWV9ORVRXT1JLYCBpcyBpcnJlbGV2YW50LCBJIHRoaW5rLiBBbmQgc2luY2UgYENPTkZJR19CUEZfTFNNYCBpbXBsaWVzIGBDT05GSUdfQlBGX1NZU0NBTExgLCB0aGF0JiMzOTtzIGNvdmVyZWQgYXMgd2VsbC4gU28sIHRoZXNlIGFyZSB0aGUgZGVwZW5kZW5jaWVzLgoKSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXRzZWxmIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgIG9uZSBtb3JlIHRpbWUuIE5lZWQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGF0IGtmdW5jIGZ1bGx5IGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIGxpbmNocGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9icGZfZnNfa2Z1bmNzLmM9Mzc4PXN0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM5Mi0vKipcbmZzL2JwZl9mc19rZnVuY3MuYzozOTM6ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG5mcy9icGZfZnNfa2Z1bmNzLmMtMzk0LSAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQwMS0gKi9cbmZzL2JwZl9mc19rZnVuY3MuYzo0MDI6X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAzLVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ2NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ2NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2luaXRfaW5vZGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbmZzL2JwZl9mc19rZnVuY3MuYy00NjctQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaD05NT1zdHJ1Y3QgbHNtX3hhdHRycztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg6OTY6ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC05Ny1cdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmM9MTc9aW50IEJQRl9QUk9HKHRlc3RfaW5pdF9pbm9kZV94YXR0ciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI3LVx0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXHUwMDI2dmFsdWVfcHRyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYzoyODpcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcdTAwMjZ2YWx1ZV9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBMU00gYW5kIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmV3IEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBzeW1ib2wgSSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB0aGF0IGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBpcyBhbHNvIGdldHRpbmcgdHdlYWtlZCB0byB1c2UgYHN0cnVjdCBsc21feGF0dHJzYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGF0JiMzOTtzIGEgY2VudHJhbCBMU00gZnVuY3Rpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBhcyBhIG5ldyBCUEYga2Z1bmMgaXMgdGhlIGtleSBoZXJlLgoKRmlyc3QgdGhpbmdzIGZpcnN0OiBJJiMzOTttIGFkZGluZyBib3RoIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYEJQRl9MU01gIGluIG15IGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBgRVZNYCBpbnRvIHRoZSBlcXVhdGlvbi4gWWVwLCBJIHNlZSB0aGF0IGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAgaGFzIGJlZW4gbW9kaWZpZWQsIHNvIEkmIzM5O2xsIGFkZCBgRVZNYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHRob3NlIEVWTSBjb2RlIHBhdGhzIGFyZSBpbmNsdWRlZCBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgYWxzbyBhIGdvb2QgaWRlYSB0byBjb25zaWRlciB0aGUgaW1wYWN0cyBvbiBTRUxpbnV4IGFuZCBTTUFDSywgc28gbGV0JiMzOTtzIGNoZWNrIHRob3NlIG1vZGlmaWNhdGlvbnMgYXMgd2VsbC4gV2hpbGUgYFNFQ1VSSVRZX1NFTElOVVhgIGFuZCBgU0VDVVJJVFlfU01BQ0tgIGFyZSBwcm9iYWJseSB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LCBpdCYjMzk7cyBwcnVkZW50IHRvIGV4cGxpY2l0bHkgbGlzdCB0aGVtIGluIGBFbmFibGVDb25maWdzYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBhbmQgYHNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yOTQyPXN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI5NjItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mjk2MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yOTY0LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDA4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwMDk6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwMTAtXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzUyOT1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTY3LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9mcmVlX3NlY3VyaXR5LCBzZWxpbnV4X2lub2RlX2ZyZWVfc2VjdXJpdHkpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc1Njg6XHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHksIHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU2OTpcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbiksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzU3MC1cdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVXBkYXRlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4gSSBuZWVkIHRvIGFkZCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGBFVk1gLCBhbmQgYEJQRl9MU01gIHRvIGBFbmFibGVDb25maWdzYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZvciB0aGUgc2VjdXJpdHkgYW5kIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSB0YXJnZXRpbmcuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZW5zdXJlIHRoYXQgdGhlaXIgY29ycmVzcG9uZGluZyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIHVzZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGFuZCBgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eWAuIE5vdywgYmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBgYnBmX3hhdHRyc191c2VkYCBpcyBzZXQgdXAgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBiZSBhbiBlYXN5IGNoZWNrLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbGwgY29tcG9uZW50cyBhcmUgYWNjb3VudGVkIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3hhdHRyc191c2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JwZl9mc19rZnVuY3MuYz0zNzM9X19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM3Ny1cbmZzL2JwZl9mc19rZnVuY3MuYzozNzg6c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbmZzL2JwZl9mc19rZnVuY3MuYy0zNzkte1xuLS1cbmZzL2JwZl9mc19rZnVuY3MuYz00MDI9X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQxNC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5mcy9icGZfZnNfa2Z1bmNzLmM6NDE1Olx0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFx1MDAzZT0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbmZzL2JwZl9mc19rZnVuY3MuYy00MTYtXHRcdHJldHVybiAtRU5PU1BDO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwMwoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogRXhwYW5kaW5nIHRoZSBCUEYgTFNNIENvdmVyYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aGlzIG5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBjb3VsZCBkaXJlY3RseSB0YXJnZXQgYGJwZl94YXR0cnNfdXNlZGAsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIHN5bWJvbC4gU3l6a2FsbGVyIGNhbiYjMzk7dCB3b3JrIHdpdGggdGhhdCBkaXJlY3RseSwgYnV0IGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBBaGEhIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgKmlzKiB0aGUga2Z1bmMgSSBuZWVkLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgdGhlIGZ1enppbmcgc2V0dXA6CgoqICAgKipgV29ydGhGdXp6aW5nOiB0cnVlYCoqOiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlLgoqICAgKipgRm9jdXNTeW1ib2xzOmAqKgoKICAgICogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgOiBUaGlzIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSB0YXJnZXQuCiAgICAqICAgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgCiAgICAqICAgYGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5YAogICAgKiAgIGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgCiAgICAqICAgYHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlgOiAgQWxsIG9mIHRoZXNlIGFyZSAqY3JpdGljYWxseSogaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdGhlIExTTSBob29rcyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCB0byB1c2UgdGhlIG5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGZ1bmN0aW9uYWxpdHkuIFRoZXNlIGFyZSB0aGUgdG91Y2ggcG9pbnRzIHRoYXQgbmVlZCB0aG9yb3VnaCBjb3ZlcmFnZS4KCiogICAqKmBFbmFibGVDb25maWdzOmAqKgoKICAgICogICBgQlBGX0xTTWA6IE9idmlvdXNseSwgdGhpcyBpcyBmdW5kYW1lbnRhbC4KICAgICogICBgRVZNYAogICAgKiAgIGBTRUNVUklUWV9TRUxJTlVYYAogICAgKiAgIGBTRUNVUklUWV9TTUFDS2A6IE5lZWQgdG8gbWFrZSBzdXJlIGFsbCB0aGVzZSBhcmUgZW5hYmxlZCBzaW5jZSB0aGUga2Z1bmMgY2hhbmdlcyBMU00gaG9va3MgdGhhdCB0aGVzZSBsZXZlcmFnZS4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBub3ZlbCBtZWNoYW5pc20gZm9yIEJQRiBMU00gcHJvZ3JhbXMgdG8gbWFuYWdlIHhhdHRycyBvbiBuZXcgaW5vZGVzLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vayB0byB1c2UgdGhlIGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlIGFjcm9zcyBtdWx0aXBsZSBMU01zIChjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2spIG1lYW5zIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBjcm9zcy1MU00gY2hhbmdlcyBtYWtlIHRoaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBmb3IgZmluZGluZyBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIFRpbWUgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAxOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O0VWTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luaXRfaW5vZGVfeGF0dHImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7c21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBJdCBtb2RpZmllcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBzdHJ1Y3R1cmUsIGFmZmVjdGluZyBjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2suIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O0VWTSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luaXRfaW5vZGVfeGF0dHImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtldm1faW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7c21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBJdCBtb2RpZmllcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBzdHJ1Y3R1cmUsIGFmZmVjdGluZyBjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2suIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6MjUuNjY5NTgwMjk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5OTYwNjc2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6MjUuNjY5NjAzNjU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA5NDA1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDY0ODRiM2Y5YjA5Nzk4NGI5MmRkYTFhMDk4MGM1ZDJmYzNjZDk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMDE6MzE6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmM0MDIzYzgyZjIxZTQwIDEwMDY0NFxcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc25vdGlmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sc21faG9va3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXR0ci5oXFx1MDAzZVxcbiBcXG5AQCAtMzc0LDYgKzM3NSw4MyBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDE7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjdHgtXFx1MDAzZXhhdHRyX2NvdW50OyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqbmFtZSA9IGN0eC1cXHUwMDNleGF0dHJzW2ldLm5hbWU7XFxuK1xcbitcXHRcXHRpZiAobmFtZSBcXHUwMDI2XFx1MDAyNiAhc3RybmNtcChuYW1lLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwgcHJlZml4X2xlbikpXFxuK1xcdFxcdFxcdG4rKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gbjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxcbisgKiBAeGF0dHJzOiBpbm9kZV9pbml0X3NlY3VyaXR5IHhhdHRyIHN0YXRlIGZyb20gdGhlIGhvb2sgY29udGV4dFxcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcXFwiYnBmLmZpbGVfbGFiZWxcXFwiKVxcbisgKiBAdmFsdWVfcDogZHlucHRyIGNvbnRhaW5pbmcgdGhlIHhhdHRyIHZhbHVlXFxuKyAqXFxuKyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xcbitcXHRzaXplX3QgbmFtZV9sZW47XFxuK1xcdHZvaWQgKnhhdHRyX3ZhbHVlO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xcbitcXHRjb25zdCB2b2lkICp2YWx1ZTtcXG4rXFx0dTMyIHZhbHVlX2xlbjtcXG4rXFxuK1xcdGlmICgheGF0dHJzIHx8ICF4YXR0cnMtXFx1MDAzZXhhdHRycyB8fCAhbmFtZV9fc3RyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFxcdTAwM2U9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMpXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXG4rXFx0bmFtZV9sZW4gPSBzdHJsZW4obmFtZV9fc3RyKTtcXG4rXFx0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXFx1MDAzZSBYQVRUUl9OQU1FX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsXFxuK1xcdFxcdCAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHR2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpO1xcbitcXHRpZiAodmFsdWVfbGVuID09IDAgfHwgdmFsdWVfbGVuIFxcdTAwM2UgWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XFxuK1xcdGlmICghdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cXG4rXFx0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiArIG5hbWVfbGVuICsgMSwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIXhhdHRyX3ZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1lbWNweSh4YXR0cl92YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbik7XFxuK1xcdG1lbWNweSh4YXR0cl92YWx1ZSArIHZhbHVlX2xlbiwgbmFtZV9fc3RyLCBuYW1lX2xlbik7XFxuK1xcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gKyBuYW1lX2xlbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcXG4rXFx0aWYgKCF4YXR0cikge1xcbitcXHRcXHRrZnJlZSh4YXR0cl92YWx1ZSk7XFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHR9XFxuK1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWUgPSB4YXR0cl92YWx1ZTtcXG4rXFx0eGF0dHItXFx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuO1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWVfbGVuID0gdmFsdWVfbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuIFxcbiBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9mc19rZnVuY19zZXRfaWRzKVxcbkBAIC0zODUsNiArNDYzLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG5pbmRleCAxNDM3NzVhMjdhMmEwYi4uYjY1NWM3MDg4MThlNTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxcbkBAIC0xOSw2ICsxOSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sc21faG9va19kZWZzLmhcXHUwMDNlXFxuICN1bmRlZiBMU01fSE9PS1xcbiBcXG4rLyogbWF4IGJwZiB4YXR0cnMgcGVyIGlub2RlICovXFxuKyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0XFxuK1xcbiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7XFxuIFxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSBfX3JjdSAqc3RvcmFnZTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldm0uaCBiL2luY2x1ZGUvbGludXgvZXZtLmhcXG5pbmRleCA5MTNmNDU3M2IyMDM4ZS4uNTI4ZjM2MGYzMzA4ZGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXZtLmhcXG5AQCAtMTIsNiArMTIsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXR0ci5oXFx1MDAzZVxcbiBcXG4rc3RydWN0IGxzbV94YXR0cnM7XFxuK1xcbiAjaWZkZWYgQ09ORklHX0VWTVxcbiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7XFxuIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5AQCAtMjEsOCArMjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxcbiBcXHRcXHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyk7XFxuIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTtcXG4gZXh0ZXJuIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2lmX2VuYWJsZWQoY29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUpO1xcbiBleHRlcm4gaW50IGV2bV9yZWFkX3Byb3RlY3RlZF94YXR0cnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1OCAqYnVmZmVyLFxcbkBAIC02Myw4ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcwLi41YjJkZTc4NjVjZTgxYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTExNiw4ICsxMTYsOCBAQCBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2FsbG9jX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KVxcbiBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tXFx0IGludCAqeGF0dHJfY291bnQpXFxuK1xcdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbkBAIC0yMDAsMjAgKzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuIC8qKlxcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcXG4tICogQHhhdHRyczogYXJyYXkgc3RvcmluZyBMU00tcHJvdmlkZWQgeGF0dHJzXFxuLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZClcXG4rICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcXG4gICpcXG4tICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAeGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhbiB4YXR0cixcXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXFxuKyAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQGN0eC1cXHUwMDNleGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhblxcbisgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVxcdTAwM2V4YXR0cl9jb3VudC5cXG4gICpcXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQGN0eC1cXHUwMDNleGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCBsc21feGF0dHJzICpjdHgpXFxuIHtcXG4tXFx0aWYgKHVubGlrZWx5KCF4YXR0cnMpKVxcbitcXHRpZiAodW5saWtlbHkoIWN0eCB8fCAhY3R4LVxcdTAwM2V4YXR0cnMpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0cmV0dXJuIFxcdTAwMjZ4YXR0cnNbKCp4YXR0cl9jb3VudCkrK107XFxuK1xcdHJldHVybiBcXHUwMDI2Y3R4LVxcdTAwM2V4YXR0cnNbY3R4LVxcdTAwM2V4YXR0cl9jb3VudCsrXTtcXG4gfVxcbiBcXG4gI2VuZGlmIC8qICEgX19MSU5VWF9MU01fSE9PS1NfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5pbmRleCAxNTNlOTA0MzA1OGY4OC4uMGJlNTkwYzQwNjg5NTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuQEAgLTY4LDYgKzY4LDExIEBAIHN0cnVjdCB3YXRjaDtcXG4gc3RydWN0IHdhdGNoX25vdGlmaWNhdGlvbjtcXG4gc3RydWN0IGxzbV9jdHg7XFxuIFxcbitzdHJ1Y3QgbHNtX3hhdHRycyB7XFxuK1xcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xcbitcXHR1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7XFxuK307XFxuK1xcbiAvKiBEZWZhdWx0IChubykgb3B0aW9ucyBmb3IgdGhlIGNhcGFibGUgZnVuY3Rpb24gKi9cXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXFxuIC8qIElmIGNhcGFibGUgc2hvdWxkIGF1ZGl0IHRoZSBzZWN1cml0eSByZXF1ZXN0ICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmNcXG5pbmRleCA1NjQwNzFhOTJkN2QyMC4uMWMzZjg0YTkyNDIwMzkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbkBAIC0zMTUsNiArMzE1LDcgQEAgQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfY3JlYXRlKVxcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9mcmVlX3NlY3VyaXR5KVxcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXRhdHRyKVxcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXR4YXR0cilcXG4rQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfaW5pdF9zZWN1cml0eSlcXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbWtub2QpXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX25lZWRfa2lsbHByaXYpXFxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX3Bvc3Rfc2V0eGF0dHIpXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG5pbmRleCA0MGVmZGUyMzNmM2FiMy4uZDdjNDRjNWMwZTMwNDYgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9icGYvaG9va3MuY1xcbkBAIC0zMCw2ICszMCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxcbiBcXG4gc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2IpLFxcbitcXHQubGJzX3hhdHRyX2NvdW50ID0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyxcXG4gfTtcXG4gXFxuIERFRklORV9MU00oYnBmKSA9IHtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXFxuaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXFxuICAqL1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqbHNtX3hhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXZtX3hhdHRyICp4YXR0cl9kYXRhO1xcbiBcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4gXFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cXHUwMDNleGF0dHJzIDogTlVMTDtcXG4gXFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFxcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XFxuIFxcdC8qXFxuIFxcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXFxuIFxcdCAqIHhhdHRyIHNsb3QuXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuQEAgLTEzMzMsOCArMTMzMyw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsO1xcbi1cXHRzdHJ1Y3QgeGF0dHIgKm5ld194YXR0cnMgPSBOVUxMO1xcbi1cXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcXG4rXFx0c3RydWN0IGxzbV94YXR0cnMgeGF0dHJzID0ge307XFxuK1xcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMzQ0LDE1ICsxMzQ0LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXG4gXFx0aWYgKGluaXR4YXR0cnMpIHtcXG4gXFx0XFx0LyogQWxsb2NhdGUgKzEgYXMgdGVybWluYXRvci4gKi9cXG4tXFx0XFx0bmV3X3hhdHRycyA9IGtjYWxsb2MoYmxvYl9zaXplcy5sYnNfeGF0dHJfY291bnQgKyAxLFxcbi1cXHRcXHRcXHRcXHQgICAgIHNpemVvZigqbmV3X3hhdHRycyksIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCFuZXdfeGF0dHJzKVxcbitcXHRcXHR4YXR0cnMueGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZigqeGF0dHJzLnhhdHRycyksIEdGUF9OT0ZTKTtcXG4rXFx0XFx0aWYgKCF4YXR0cnMueGF0dHJzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0bHNtX2Zvcl9lYWNoX2hvb2soc2NhbGwsIGlub2RlX2luaXRfc2VjdXJpdHkpIHtcXG4tXFx0XFx0cmV0ID0gc2NhbGwtXFx1MDAzZWhsLVxcdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eGF0dHJfY291bnQpO1xcbitcXHRcXHRyZXQgPSBzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cnMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdC8qXFxuQEAgLTEzNjQsMTQgKzEzNjQsMTQgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xcbi1cXHRpZiAoIXhhdHRyX2NvdW50KVxcbitcXHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcXG4rXFx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7XFxuIG91dDpcXG4tXFx0Zm9yICg7IHhhdHRyX2NvdW50IFxcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcXG4tXFx0XFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcXG4tXFx0a2ZyZWUobmV3X3hhdHRycyk7XFxuK1xcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcXG4rXFx0XFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XFxuK1xcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xcbiBcXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4gXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XFxuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIShzYnNlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQkxBQkVMX01OVCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXHRpZiAoeGF0dHIpIHtcXG4gXFx0XFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjb250ZXh0LCBcXHUwMDI2Y2xlbik7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbkBAIC05ODEsMTAgKzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi14YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbiBcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXG4gXFx0aWYgKCF4YXR0cilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTEwMDMsMTQgKzEwMDMsMTMgQEAgeGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXFxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxcbiAgKiBAcXN0cjogdW51c2VkXFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnRcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUncyBubyBtZW1vcnlcXG4gICovXFxuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiB7XFxuIFxcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcXG4gXFx0c3RydWN0IGlub2RlX3NtYWNrICogY29uc3QgaXNzcCA9IHNtYWNrX2lub2RlKGlub2RlKTtcXG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdFxcdHRyYW5zZmxhZyA9IFNNS19JTk9ERV9UUkFOU01VVEU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXFxuLVxcdFxcdFxcdFxcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRV9TSVpFXFxuLVxcdFxcdFxcdCkpXFxuK1xcdFxcdFxcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxcbitcXHRcXHRcXHRcXHRcXHQgVFJBTlNfVFJVRSxcXG4rXFx0XFx0XFx0XFx0XFx0IFRSQU5TX1RSVUVfU0laRSkpXFxuIFxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmMgPT0gMClcXG4tXFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxcbi1cXHRcXHRcXHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxcbi1cXHRcXHRcXHQgICAgaXNzcC1cXHUwMDNlc21rX2lub2RlLVxcdTAwM2VzbWtfa25vd24sXFxuLVxcdFxcdCAgICAgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKVxcbi1cXHRcXHQpKVxcbitcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcXG4rXFx0XFx0XFx0XFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcXG4rXFx0XFx0XFx0XFx0IGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duLFxcbitcXHRcXHRcXHRcXHQgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKSkpXFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gaW5zdGFudF9pbm9kZTpcXG4gXFx0aXNzcC1cXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuQEAgLTkyLDQgKzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcXG4gZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhaztcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzO1xcbitleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbmluZGV4IDQzYTI2ZWM2OWE4ZTM2Li44YjJlMGQ0MzNhZWEyZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXFxcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcXFwiO1xcbiBcXG5AQCAtMjY4LDYgKzI2OSwxMTYgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxcbiBcXHRyZW1vdmUodGVzdGZpbGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTEsIGVycjtcXG4rXFx0Y2hhciB2YWx1ZV9vdXRbNjRdO1xcbitcXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcXFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcXFwiO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZV9maWxlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0LCAwLCBcXFwiaW5pdF9yZXN1bHRcXFwiKTtcXG4rXFxuK1xcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXFxcInNlY3VyaXR5LlxcXCIgdG8gdGhlIG5hbWUuICovXFxuK1xcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXFxcInNlY3VyaXR5LmJwZi50ZXN0X2xhYmVsXFxcIiwgdmFsdWVfb3V0LFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFxcXCJnZXR4YXR0clxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXhhdHRyX3ZhbHVlKSwgXFxcInhhdHRyX3NpemVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIixcXG4rXFx0XFx0XFx0ICBzaXplb2YoXFxcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFxcXCIpKSwgMCxcXG4rXFx0XFx0ICBcXFwieGF0dHJfdmFsdWVcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xcbit9XFxuK1xcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xcbisjZGVmaW5lIElOSVRfSU5PREVfWEFUVFJfTUFYIDRcXG4rXFxuKy8qXFxuKyAqIFByb2dyYW1zIG1heSBhdHRhY2ggdG8gaW5vZGVfaW5pdF9zZWN1cml0eSB3aXRob3V0IGFuIGF0dGFjaC10aW1lIGxpbWl0LCBidXRcXG4rICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxcbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFxcXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcXFwiO1xcbitcXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcXG4rXFx0aW50IGksIGZkID0gLTE7XFxuK1xcbitcXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXFxcIm9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRza2VsW2ldLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFxuK1xcdFxcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVxcdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVfZmlsZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0aGUgcHJvZ3JhbSBwYXN0XFxuK1xcdCAqIHRoZSBidWRnZXQgZ2V0cyAtRU5PU1BDLiBUaGUgb3JkZXIgaW4gd2hpY2ggcHJvZ3JhbXMgcnVuIGlzIG5vdFxcbitcXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0aW50IHJlcyA9IHNrZWxbaV0tXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0O1xcbitcXG4rXFx0XFx0aWYgKHJlcyA9PSAwKVxcbitcXHRcXHRcXHRvaysrO1xcbitcXHRcXHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcXG4rXFx0XFx0XFx0bm9zcGMrKztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvdGhlcisrO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCBcXFwic2xvdHNfd2l0aGluX2J1ZGdldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEobm9zcGMsIDEsIFxcXCJzbG90X292ZXJfYnVkZ2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShvdGhlciwgMCwgXFxcInVuZXhwZWN0ZWRfcmVzdWx0XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShsaW5rW2ldKTtcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pO1xcbitcXHR9XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9zbG90KTtcXG4rfVxcbitcXG4gdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxcbiB7XFxuIFxcdC8qIE1hdGNoZXMgeGF0dHJfbmFtZXMgaW4gcHJvZ3MvdGVzdF9nZXRfeGF0dHIuYyAqL1xcbkBAIC0yODgsNCArMzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcXG4gXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmc3Zlcml0eVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2ZzdmVyaXR5KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdF9pbm9kZV94YXR0clxcXCIpKVxcbitcXHRcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHIoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXRcXFwiKSlcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYjM3OGRiOTU3YWE4OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfa2Z1bmNzLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK19fdTMyIG1vbml0b3JlZF9waWQ7XFxuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgeGF0dHJfbmFtZVtdID0gXFxcImJwZi50ZXN0X2xhYmVsXFxcIjtcXG4rY2hhciB4YXR0cl92YWx1ZVtdID0gXFxcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFxcXCI7XFxuK1xcbitTRUMoXFxcImxzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XFxuK1xcdF9fdTMyIHBpZDtcXG4rXFxuK1xcdHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXFx1MDAyNnZhbHVlX3B0cik7XFxuK1xcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjI2LjE5MTM1MjQxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NzQyNzk2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDY0ODRiM2Y5YjA5Nzk4NGI5MmRkYTFhMDk4MGM1ZDJmYzNjZDk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMTozMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmM0MDIzYzgyZjIxZTQwIDEwMDY0NFxuLS0tIGEvZnMvYnBmX2ZzX2tmdW5jcy5jXG4rKysgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNub3RpZnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbHNtX2hvb2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuQEAgLTM3NCw2ICszNzUsODMgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gZF9yZWFsX2lub2RlKGRlbnRyeSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4re1xuK1x0Y29uc3Qgc2l6ZV90IHByZWZpeF9sZW4gPSBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMTtcbitcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN0eC1cdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XG4rXHRcdGNvbnN0IGNoYXIgKm5hbWUgPSBjdHgtXHUwMDNleGF0dHJzW2ldLm5hbWU7XG4rXG4rXHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwgcHJlZml4X2xlbikpXG4rXHRcdFx0bisrO1xuK1x0fVxuK1x0cmV0dXJuIG47XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxuKyAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XG4rICogQG5hbWVfX3N0cjogeGF0dHIgbmFtZSAoZS5nLiwgXCJicGYuZmlsZV9sYWJlbFwiKVxuKyAqIEB2YWx1ZV9wOiBkeW5wdHIgY29udGFpbmluZyB0aGUgeGF0dHIgdmFsdWVcbisgKlxuKyAqIE9ubHkgY2FsbGFibGUgZnJvbSBsc20vaW5vZGVfaW5pdF9zZWN1cml0eSBwcm9ncmFtcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnZhbHVlX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopdmFsdWVfcDtcbitcdHNpemVfdCBuYW1lX2xlbjtcbitcdHZvaWQgKnhhdHRyX3ZhbHVlO1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cjtcbitcdGNvbnN0IHZvaWQgKnZhbHVlO1xuK1x0dTMyIHZhbHVlX2xlbjtcbitcbitcdGlmICgheGF0dHJzIHx8ICF4YXR0cnMtXHUwMDNleGF0dHJzIHx8ICFuYW1lX19zdHIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGJwZl94YXR0cnNfdXNlZCh4YXR0cnMpIFx1MDAzZT0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXG4rXHRuYW1lX2xlbiA9IHN0cmxlbihuYW1lX19zdHIpO1xuK1x0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXHUwMDNlIFhBVFRSX05BTUVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChzdHJuY21wKG5hbWVfX3N0ciwgWEFUVFJfQlBGX0xTTV9TVUZGSVgsXG4rXHRcdCAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHR2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpO1xuK1x0aWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiBcdTAwM2UgWEFUVFJfU0laRV9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIENvbWJpbmUgeGF0dHIgdmFsdWUgKyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovXG4rXHR4YXR0cl92YWx1ZSA9IGttYWxsb2ModmFsdWVfbGVuICsgbmFtZV9sZW4gKyAxLCBHRlBfTk9GUyk7XG4rXHRpZiAoIXhhdHRyX3ZhbHVlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdG1lbWNweSh4YXR0cl92YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbik7XG4rXHRtZW1jcHkoeGF0dHJfdmFsdWUgKyB2YWx1ZV9sZW4sIG5hbWVfX3N0ciwgbmFtZV9sZW4pO1xuK1x0KChjaGFyICopeGF0dHJfdmFsdWUpW3ZhbHVlX2xlbiArIG5hbWVfbGVuXSA9ICdcXDAnO1xuK1xuK1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbitcdGlmICgheGF0dHIpIHtcbitcdFx0a2ZyZWUoeGF0dHJfdmFsdWUpO1xuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcdH1cbitcbitcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4rXHR4YXR0ci1cdTAwM2VuYW1lID0gKGNvbnN0IGNoYXIgKil4YXR0cl92YWx1ZSArIHZhbHVlX2xlbjtcbitcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG5AQCAtMzg1LDYgKzQ2Myw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuaW5kZXggMTQzNzc1YTI3YTJhMGIuLmI2NTVjNzA4ODE4ZTU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5AQCAtMTksNiArMTksOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rX2RlZnMuaFx1MDAzZVxuICN1bmRlZiBMU01fSE9PS1xuIFxuKy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqL1xuKyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0XG4rXG4gc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2Ige1xuIFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlO1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldm0uaCBiL2luY2x1ZGUvbGludXgvZXZtLmhcbmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZXZtLmhcbkBAIC0xMiw2ICsxMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXR0ci5oXHUwMDNlXG4gXG4rc3RydWN0IGxzbV94YXR0cnM7XG4rXG4gI2lmZGVmIENPTkZJR19FVk1cbiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7XG4gZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuQEAgLTIxLDggKzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFx0XHQgY29uc3QgY2hhciAqeGF0dHJfdmFsdWUsIHNpemVfdCB4YXR0cl92YWx1ZV9sZW4pO1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KTtcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpO1xuIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7XG4gZXh0ZXJuIGludCBldm1fcmVhZF9wcm90ZWN0ZWRfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTggKmJ1ZmZlcixcbkBAIC02Myw4ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9maXhfaG1hYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnhhdHRyX25hbWUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXG4tXHRcdFx0XHRcdCAgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMTYsOCArMTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4rXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuK1x0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuaW5kZXggYjRmOGNhZDUzZGRiMDMuLjdhZmUwNmE4ZDRjNmM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxuQEAgLTIwMCwyMCArMjAwLDE4IEBAIGV4dGVybiBzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsc190YWJsZSBzdGF0aWNfY2FsbHNfdGFibGUgX19yb19hZnRlcl9pbml0O1xuIFxuIC8qKlxuICAqIGxzbV9nZXRfeGF0dHJfc2xvdCAtIFJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBhbmQgaW5jcmVtZW50IHRoZSBpbmRleFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xuLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZClcbisgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rc1xuICAqXG4tICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAeGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhbiB4YXR0cixcbi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC5cbisgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXHUwMDNleGF0dHJzIGFycmF5IHRvIGZpbGwgd2l0aCBhblxuKyAqIHhhdHRyLCBhbmQgaW5jcmVtZW50IEBjdHgtXHUwMDNleGF0dHJfY291bnQuXG4gICpcbi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4rICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXHUwMDNleGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCBsc21feGF0dHJzICpjdHgpXG4ge1xuLVx0aWYgKHVubGlrZWx5KCF4YXR0cnMpKVxuK1x0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cdTAwM2V4YXR0cnMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBcdTAwMjZ4YXR0cnNbKCp4YXR0cl9jb3VudCkrK107XG4rXHRyZXR1cm4gXHUwMDI2Y3R4LVx1MDAzZXhhdHRyc1tjdHgtXHUwMDNleGF0dHJfY291bnQrK107XG4gfVxuIFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4Zjg4Li4wYmU1OTBjNDA2ODk1MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNjgsNiArNjgsMTEgQEAgc3RydWN0IHdhdGNoO1xuIHN0cnVjdCB3YXRjaF9ub3RpZmljYXRpb247XG4gc3RydWN0IGxzbV9jdHg7XG4gXG4rc3RydWN0IGxzbV94YXR0cnMge1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4rXHR1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7XG4rfTtcbitcbiAvKiBEZWZhdWx0IChubykgb3B0aW9ucyBmb3IgdGhlIGNhcGFibGUgZnVuY3Rpb24gKi9cbiAjZGVmaW5lIENBUF9PUFRfTk9ORSAweDBcbiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmNcbmluZGV4IDU2NDA3MWE5MmQ3ZDIwLi4xYzNmODRhOTI0MjAzOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuQEAgLTMxNSw2ICszMTUsNyBAQCBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9jcmVhdGUpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfZnJlZV9zZWN1cml0eSlcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9nZXRhdHRyKVxuIEJURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2dldHhhdHRyKVxuK0JURl9JRChmdW5jLCBicGZfbHNtX2lub2RlX2luaXRfc2VjdXJpdHkpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbWtub2QpXG4gQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5vZGVfbmVlZF9raWxscHJpdilcbiBCVEZfSUQoZnVuYywgYnBmX2xzbV9pbm9kZV9wb3N0X3NldHhhdHRyKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDQwZWZkZTIzM2YzYWIzLi5kN2M0NGM1YzBlMzA0NiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMwLDYgKzMwLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2xzbV9pbml0KHZvaWQpXG4gXG4gc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iKSxcbitcdC5sYnNfeGF0dHJfY291bnQgPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTLFxuIH07XG4gXG4gREVGSU5FX0xTTShicGYpID0ge1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG4rKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxuICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWVcbiAgKi9cbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKVxuIHtcbiBcdHN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7XG4gXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xuK1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4gXHRib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4rXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cdTAwM2V4YXR0cnMgOiBOVUxMO1xuIFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFx1MDAyNiBFVk1fSU5JVF9ITUFDKSB8fCAheGF0dHJzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWV2bV9wcm90ZWN0ZWRfeGF0dHJzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTtcbiBcdC8qXG4gXHQgKiBBcnJheSB0ZXJtaW5hdG9yICh4YXR0ciBuYW1lID0gTlVMTCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWZpbGxlZFxuIFx0ICogeGF0dHIgc2xvdC5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjJhZDdmMDljMWE2MTEwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEzMzMsOCArMTMzMyw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbi1cdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcbitcdHN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9O1xuK1x0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTM0NCwxNSArMTM0NCwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBcdGlmIChpbml0eGF0dHJzKSB7XG4gXHRcdC8qIEFsbG9jYXRlICsxIGFzIHRlcm1pbmF0b3IuICovXG4tXHRcdG5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xuLVx0XHRpZiAoIW5ld194YXR0cnMpXG4rXHRcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbitcdFx0XHRcdFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xuK1x0XHRpZiAoIXhhdHRycy54YXR0cnMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xuLVx0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRyX2NvdW50KTtcbitcdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG4rXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRycyk7XG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0LypcbkBAIC0xMzY0LDE0ICsxMzY0LDE0IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFxuIFx0LyogSWYgaW5pdHhhdHRycygpIGlzIE5VTEwsIHhhdHRyX2NvdW50IGlzIHplcm8sIHNraXAgdGhlIGNhbGwuICovXG4tXHRpZiAoIXhhdHRyX2NvdW50KVxuK1x0aWYgKCF4YXR0cnMueGF0dHJfY291bnQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgbmV3X3hhdHRycywgZnNfZGF0YSk7XG4rXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTtcbiBvdXQ6XG4tXHRmb3IgKDsgeGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXG4tXHRcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4tXHRrZnJlZShuZXdfeGF0dHJzKTtcbitcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRycy54YXR0cl9jb3VudC0tKVxuK1x0XHRrZnJlZSh4YXR0cnMueGF0dHJzW3hhdHRycy54YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcbitcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xuIFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcbiBcbiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpO1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYztcbkBAIC0yOTkyLDcgKzI5OTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhKHNic2VjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQkxBQkVMX01OVCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuK1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiBcdGlmICh4YXR0cikge1xuIFx0XHRyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0X2ZvcmNlKG5ld3NpZCxcbiBcdFx0XHRcdFx0XHQgICBcdTAwMjZjb250ZXh0LCBcdTAwMjZjbGVuKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbkBAIC05ODEsMTAgKzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcbiB9XG4gXG4gc3RhdGljIGludFxuLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbit4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbiBcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWxsZW4pXG4ge1xuLVx0c3RydWN0IHhhdHRyICogY29uc3QgeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4rXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuIFxuIFx0aWYgKCF4YXR0cilcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTAwMywxNCArMTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXG4gICogQGlub2RlOiB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZVxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxuICAqIEBxc3RyOiB1bnVzZWRcbi0gKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgdGhlIGF0dHJpYnV0ZXNcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXG4rICogQHhhdHRyczogd2hlcmUgdG8gcHV0IGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZSBjb3VudFxuICAqXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUncyBubyBtZW1vcnlcbiAgKi9cbiBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcbitcdFx0XHRcdCAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gc21hY2tfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpO1xuQEAgLTEwNTcsMjEgKzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0dHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTtcbiBcbi1cdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0XHRYQVRUUl9TTUFDS19UUkFOU01VVEUsXG4tXHRcdFx0XHRUUkFOU19UUlVFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRV9TSVpFXG4tXHRcdFx0KSlcbitcdFx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcbitcdFx0XHRcdFx0IFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbitcdFx0XHRcdFx0IFRSQU5TX1RSVUUsXG4rXHRcdFx0XHRcdCBUUkFOU19UUlVFX1NJWkUpKVxuIFx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR9XG4gXHR9XG4gXG4gXHRpZiAocmMgPT0gMClcbi1cdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxuLVx0XHRcdCAgICBYQVRUUl9TTUFDS19TVUZGSVgsXG4tXHRcdFx0ICAgIGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bixcbi1cdFx0ICAgICBzdHJsZW4oaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duKVxuLVx0XHQpKVxuK1x0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcbitcdFx0XHRcdCBYQVRUUl9TTUFDS19TVUZGSVgsXG4rXHRcdFx0XHQgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuK1x0XHRcdFx0IHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pKSlcbiBcdFx0XHRyYyA9IC1FTk9NRU07XG4gaW5zdGFudF9pbm9kZTpcbiBcdGlzc3AtXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbmluZGV4IGFlNzFlOWI2OTA1MTg2Li4yNjM5ZjlmOTQxOTU1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICs5Miw5IEBAIGV4dGVybiBpbnQgYnBmX3NldF9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xuIGV4dGVybiBpbnQgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lX19zdHIpIF9fa3N5bSBfX3dlYWs7XG4gXG4rc3RydWN0IGxzbV94YXR0cnM7XG4rZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMzYuLjhiMmUwZDQzM2FlYTJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFwidGVzdF9nZXRfeGF0dHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9mc3Zlcml0eS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaFwiXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgdGVzdGZpbGVbXSA9IFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc1wiO1xuIFxuQEAgLTI2OCw2ICsyNjksMTE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZClcbiBcdHJlbW92ZSh0ZXN0ZmlsZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cih2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWwgPSBOVUxMO1xuK1x0aW50IGZkID0gLTEsIGVycjtcbitcdGNoYXIgdmFsdWVfb3V0WzY0XTtcbitcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX25ldyA9IFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcIjtcbitcbitcdHNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1x0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXG4rXHRmZCA9IG9wZW4odGVzdGZpbGVfbmV3LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQsIDAsIFwiaW5pdF9yZXN1bHRcIik7XG4rXG4rXHQvKiBpbml0eGF0dHJzIHByZXBlbmRzIFwic2VjdXJpdHkuXCIgdG8gdGhlIG5hbWUuICovXG4rXHRlcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsIFwic2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcIiwgdmFsdWVfb3V0LFxuK1x0XHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PREFUQSkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXFxuXCIsXG4rXHRcdCAgICAgICBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFwiZ2V0eGF0dHJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXhhdHRyX3ZhbHVlKSwgXCJ4YXR0cl9zaXplXCIpO1xuK1x0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiLFxuK1x0XHRcdCAgc2l6ZW9mKFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCIpKSwgMCxcbitcdFx0ICBcInhhdHRyX3ZhbHVlXCIpO1xuK1xuK291dDpcbitcdGNsb3NlKGZkKTtcbitcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTtcbitcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xuK31cbitcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xuKyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxuK1xuKy8qXG4rICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxuKyAqIHRoZSBrZnVuYyBvbmx5IGxldHMgQlBGIGNsYWltIElOSVRfSU5PREVfWEFUVFJfTUFYIHhhdHRyIHNsb3RzIHBlciBpbm9kZS5cbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbFtJTklUX0lOT0RFX1hBVFRSX01BWCArIDFdID0ge307XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmtbSU5JVF9JTk9ERV9YQVRUUl9NQVggKyAxXSA9IHt9O1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19zbG90XCI7XG4rXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcbitcdGludCBpLCBmZCA9IC0xO1xuK1xuK1x0LyogQWxsIHByb2dyYW1zIGF0dGFjaCBzdWNjZXNzZnVsbHk7IHRoZXJlIGlzIG5vIGF0dGFjaC10aW1lIGNhcC4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdHNrZWxbaV0gPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTtcbitcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWxbaV0sIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0c2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1xuK1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuK1x0XHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXCJhdHRhY2hcIikpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi9cbitcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdFxuK1x0ICogdGhlIGJ1ZGdldCBnZXRzIC1FTk9TUEMuIFRoZSBvcmRlciBpbiB3aGljaCBwcm9ncmFtcyBydW4gaXMgbm90XG4rXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGludCByZXMgPSBza2VsW2ldLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQ7XG4rXG4rXHRcdGlmIChyZXMgPT0gMClcbitcdFx0XHRvaysrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcbitcdFx0XHRub3NwYysrO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3RoZXIrKztcbitcdH1cbitcbitcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwic2xvdHNfd2l0aGluX2J1ZGdldFwiKTtcbitcdEFTU0VSVF9FUShub3NwYywgMSwgXCJzbG90X292ZXJfYnVkZ2V0XCIpO1xuK1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcInVuZXhwZWN0ZWRfcmVzdWx0XCIpO1xuK1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuK1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4rXHR9XG4rXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCArMzk5LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnN2ZXJpdHlcIikpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdF9pbm9kZV94YXR0clwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImluaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNiMzc4ZGI5NTdhYTg5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitfX3UzMiBtb25pdG9yZWRfcGlkO1xuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIHhhdHRyX25hbWVbXSA9IFwiYnBmLnRlc3RfbGFiZWxcIjtcbitjaGFyIHhhdHRyX3ZhbHVlW10gPSBcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFwiO1xuK1xuK1NFQyhcImxzbS5zL2lub2RlX2luaXRfc2VjdXJpdHlcIilcbitpbnQgQlBGX1BST0codGVzdF9pbml0X2lub2RlX3hhdHRyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyO1xuK1x0X191MzIgcGlkO1xuK1xuK1x0cGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFx1MDAyNnZhbHVlX3B0cik7XG4rXHRpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgXHUwMDI2dmFsdWVfcHRyKTtcbitcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjI2LjE5MTM1NjQ5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MzI5NzMzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgQlBGIEtmdW5jIGZvciBJbm9kZSBYYXR0ciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBUaGlzIGlzIHByZXR0eSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZGVzaWduZWQgdG8gbGV0IEJQRiBMU00gcHJvZ3JhbXMgc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgb24gYSAqbmV3KiBpbm9kZSByaWdodCBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBwcm9jZXNzLiBMb29raW5nIGF0IHRoZSBmaWxlcyBpdCB0b3VjaGVzLCBpdCdzIGltcGFjdGluZyBhIHdpZGUgcmFuZ2Ugb2Ygc2VjdXJpdHkgYXJlYXM6IGBmcy9icGZfZnNfa2Z1bmNzLmNgLCB0aGUgdmFyaW91cyBgaW5jbHVkZS9saW51eC8qYCBoZWFkZXJzIHJlbGF0ZWQgdG8gQlBGLCBFVk0sIGFuZCBMU00gaG9va3MsIGFzIHdlbGwgYXMgY29yZSBzZWN1cml0eSBjb21wb25lbnRzIGluIGBrZXJuZWwvYnBmL2JwZl9sc20uY2AsIGBzZWN1cml0eS9icGYvaG9va3MuY2AsIGBzZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNgLCBgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIFNFTGludXgsIGFuZCBTbWFjay4gVGhhdCdzIGEgc2VyaW91cyBudW1iZXIgb2YgdG91Y2hwb2ludHMhXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgbmV3IGtmdW5jIGlzIHByb3Blcmx5IHJlZ2lzdGVyZWQgYW5kIGFjY2Vzc2libGUuIEkgc2VlIGl0J3MgYWRkZWQgdG8gYGJwZl9mc19rZnVuY19zZXRfaWRzYCBpbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhbHNvIG1vZGlmeWluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZTsgaW5zdGVhZCBvZiB0aGUgb2xkZXIgYHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50YCwgaXQncyBub3cgdXNpbmcgYHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnNgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgdGhvc2UgY3JpdGljYWwgc3Vic3lzdGVtcyDigJMgTFNNLCBFVk0sIFNFTGludXgsIFNtYWNrLCBhbmQgQlBGLiBUaGlzIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIHNvbWUgaGVhZGFjaGVzIGlmIG5vdCBwcm9wZXJseSBoYW5kbGVkLCBzbyBpdCdzIGNyaXRpY2FsIHdlIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgdXNlZCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGZ1enppbmcuIEdpdmVuIHRoZSBrZXJuZWwtbGV2ZWwgaW50ZWdyYXRpb24sIGFuZCB0aGUgZmFjdCB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgbmV3IHhhdHRyIHNldHRpbmcgY2FwYWJpbGl0aWVzLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGlzIGFic29sdXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBCUEYgTFNNIGZ1bmN0aW9uYWxpdHkgd2lsbCByZXF1aXJlIGBDT05GSUdfQlBGX0xTTWAuIExldCBtZSBjaGVjayBpZiB0aGUga2Z1bmMgaXRzZWxmIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIGl0IHRvIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgdW5kZXIgdGhlIGFwcHJvcHJpYXRlIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZywgb2YgY291cnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjMyLjkyNDMzMjc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzE4NDE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZzX2tmdW5jc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMzA9b2JqLSQoQ09ORklHX1pPTkVGU19GUylcXHRcXHQrPSB6b25lZnMvXFxuZnMvTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19CUEZfTFNNKVxcdFxcdCs9IGJwZl9mc19rZnVuY3Mub1xcbmZzL01ha2VmaWxlLTEzMi1vYmotJChDT05GSUdfUkVTQ1RSTF9GUylcXHQrPSByZXNjdHJsL1xcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ2Nz1CVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDY4LVxcbmZzL2JwZl9mc19rZnVuY3MuYzo0Njk6c3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDcwLXtcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz01MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTA5LVxcdC5zZXQgPSBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldF9pZHMsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxMDpcXHQuZmlsdGVyID0gYnBmX2ZzX2tmdW5jc19maWx0ZXIsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTUxMS19O1xcbmZzL2JwZl9mc19rZnVuY3MuYy01MTItXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxMzpzdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTE0LXtcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy01MTctXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjUxODpsYXRlX2luaXRjYWxsKGJwZl9mc19rZnVuY3NfaW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjM1LjM5NjE4NzY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MDgzMzU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9MU01gIGlzIGEgZGVmaW5pdGUgcmVxdWlyZW1lbnQgaGVyZS4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGF0LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuUmlnaHQsIHRoZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGlzIGRlZmluZWQgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIFRoYXQncyBnb29kIHRvIGtub3csIHRoYXQgZmlsZSBpcyBteSBuZXh0IHRhcmdldC4gQW5kIHRoZSBob29rLCBgaW5vZGVfaW5pdF9zZWN1cml0eWAsIHRoYXQncyBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGFuZCBJIGtub3cgdGhhdCdzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZCB3aGljaCBpc24ndCBhIHByb2JsZW0gZm9yIG1lLiBPa2F5LCBzbyB0aGF0IGtmdW5jIHV0aWxpemVzIGBsc21fZ2V0X3hhdHRyX3Nsb3RgLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBgbHNtX2dldF94YXR0cl9zbG90YCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGlub2RlcyBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6MzkuMzc3MDI0OTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTczNzI1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnBmX2ZzX2tmdW5jcy5jPTM3OD1zdGF0aWMgaW50IGJwZl94YXR0cnNfdXNlZChjb25zdCBzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM5Mi0vKipcXG5mcy9icGZfZnNfa2Z1bmNzLmM6MzkzOiAqIGJwZl9pbml0X2lub2RlX3hhdHRyIC0gc2V0IGFuIHhhdHRyIG9uIGEgbmV3IGlub2RlIGZyb20gaW5vZGVfaW5pdF9zZWN1cml0eVxcbmZzL2JwZl9mc19rZnVuY3MuYy0zOTQtICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy00MDEtICovXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQwMjpfX2JwZl9rZnVuYyBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAzLVxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ2NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxcbmZzL2JwZl9mc19rZnVuY3MuYzo0NjY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ2Ny1CVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg9OTU9c3RydWN0IGxzbV94YXR0cnM7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaDo5NjpleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC05Ny1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lX19zdHIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmM9MTc9aW50IEJQRl9QUk9HKHRlc3RfaW5pdF9pbm9kZV94YXR0ciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjctXFx0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXFx1MDAyNnZhbHVlX3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jOjI4OlxcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMtMjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjQxLjQ5NDQxMTQwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODk3ODY5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYYXR0ciBJbml0aWFsaXphdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gdGhlIGZ1bmN0aW9uIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgaXMgY2xlYXJseSB0aGUga2V5IHBsYXllciBoZXJlLiBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gaGFwcGVucy4gQnV0IHRoZW4gdGhlcmUncyBhbHNvIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0aGF0J3MgYmVpbmcgbW9kaWZpZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGlzIGhhcyB0byBkbyB3aXRoIGludGVncmF0aW5nIEJQRiBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIGV4aXN0aW5nIHNlY3VyaXR5IGZyYW1ld29yayBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24uIEkgcmVhbGx5IG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIHNlY3VyaXR5IGNvbnRleHQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCB0aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMTo0NC40ODQyMDExNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNjMyMTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fub25faW5vZGVzLmM9OTM9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGFub25faW5vZGVfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2Fub25faW5vZGVzLmMtMTA2LSAqIFRoZSBmdW5jdGlvbiBlbnN1cmVzIHByb3BlciBzZWN1cml0eSBpbml0aWFsaXphdGlvbiB0aHJvdWdoIHRoZSBMU00gaG9va1xcbmZzL2Fub25faW5vZGVzLmM6MTA3OiAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbigpLlxcbmZzL2Fub25faW5vZGVzLmMtMTA4LSAqXFxuLS1cXG5mcy9hbm9uX2lub2Rlcy5jPTExMT1zdHJ1Y3QgaW5vZGUgKmFub25faW5vZGVfbWFrZV9zZWN1cmVfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2Fub25faW5vZGVzLmMtMTIxLVxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmFub25faW5vZGVfb3BlcmF0aW9ucztcXG5mcy9hbm9uX2lub2Rlcy5jOjEyMjpcXHRlcnJvciA9XFx0c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKGlub2RlLCBcXHUwMDI2UVNUUihuYW1lKSxcXG5mcy9hbm9uX2lub2Rlcy5jLTEyMy1cXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnRleHRfaW5vZGUpO1xcbi0tXFxuZnMvYnRyZnMveGF0dHIuYz01MjE9aW50IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXFxuLS1cXG5mcy9idHJmcy94YXR0ci5jLTUyNC17XFxuZnMvYnRyZnMveGF0dHIuYzo1MjU6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcXG5mcy9idHJmcy94YXR0ci5jLTUyNi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmJ0cmZzX2luaXR4YXR0cnMsIHRyYW5zKTtcXG4tLVxcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYz00OD1leHQyX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMtNTAte1xcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYzo1MTpcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYy01Mi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmV4dDJfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM9NTU9ZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTU3LXtcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6NTg6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNTktXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZleHQ0X2luaXR4YXR0cnMsIGhhbmRsZSk7XFxuLS1cXG5mcy9mMmZzL3hhdHRyLmM9MTU1PWludCBmMmZzX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9mMmZzL3hhdHRyLmMtMTU3LXtcXG5mcy9mMmZzL3hhdHRyLmM6MTU4OlxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuZnMvZjJmcy94YXR0ci5jLTE1OS1cXHRcXHRcXHRcXHRmMmZzX2luaXR4YXR0cnMsIGlmb2xpbyk7XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9NzAwPXN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGVfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy04OTEtXFxuZnMvZ2ZzMi9pbm9kZS5jOjg5MjpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoXFx1MDAyNmlwLVxcdTAwM2VpX2lub2RlLCBcXHUwMDI2ZGlwLVxcdTAwM2VpX2lub2RlLCBuYW1lLFxcbmZzL2dmczIvaW5vZGUuYy04OTMtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Z2ZzMl9pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHJfc2VjdXJpdHkuYz02OD1pbnQgaGZzcGx1c19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvaGZzcGx1cy94YXR0cl9zZWN1cml0eS5jLTcwLXtcXG5mcy9oZnNwbHVzL3hhdHRyX3NlY3VyaXR5LmM6NzE6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0cixcXG5mcy9oZnNwbHVzL3hhdHRyX3NlY3VyaXR5LmMtNzItXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmhmc3BsdXNfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5mcy9qZmZzMi9zZWN1cml0eS5jPTQzPWludCBqZmZzMl9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvamZmczIvc2VjdXJpdHkuYy00NS17XFxuZnMvamZmczIvc2VjdXJpdHkuYzo0NjpcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL2pmZnMyL3NlY3VyaXR5LmMtNDctXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZqZmZzMl9pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbmZzL2pmcy94YXR0ci5jPTEwNDk9aW50IGpmc19pbml0X3NlY3VyaXR5KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9qZnMveGF0dHIuYy0xMDUxLXtcXG5mcy9qZnMveGF0dHIuYzoxMDUyOlxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuZnMvamZzL3hhdHRyLmMtMTA1My1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmpmc19pbml0eGF0dHJzLCBcXHUwMDI2dGlkKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzMwOD1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzMxOC1cXHRpZiAoc2kpIHtcXG5mcy9vY2ZzMi94YXR0ci5jOjczMTk6XFx0XFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL29jZnMyL3hhdHRyLmMtNzMyMC1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2b2NmczJfaW5pdHhhdHRycywgc2kpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzMyMS1cXHRcXHQvKlxcbmZzL29jZnMyL3hhdHRyLmM6NzMyMjpcXHRcXHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZG9lcyBub3QgcmV0dXJuIC1FT1BOT1RTVVBQLFxcbmZzL29jZnMyL3hhdHRyLmMtNzMyMy1cXHRcXHQgKiB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB4YXR0ciBvdXJzZWx2ZXMuXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTczMzAtXFxuZnMvb2NmczIveGF0dHIuYzo3MzMxOlxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuZnMvb2NmczIveGF0dHIuYy03MzMyLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2b2NmczJfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5mcy9yYW1mcy9pbm9kZS5jPTk4PXJhbWZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtMTA0LVxcdGlmIChpbm9kZSkge1xcbmZzL3JhbWZzL2lub2RlLmM6MTA1OlxcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLFxcbmZzL3JhbWZzL2lub2RlLmMtMTA2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLCBOVUxMLFxcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYz0xMzY9c3RhdGljIGludCByYW1mc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL3JhbWZzL2lub2RlLmMtMTQ1LVxcbmZzL3JhbWZzL2lub2RlLmM6MTQ2OlxcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLFxcbmZzL3JhbWZzL2lub2RlLmMtMTQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLCBOVUxMLFxcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYz0xNjY9c3RhdGljIGludCByYW1mc190bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvcmFtZnMvaW5vZGUuYy0xNzUtXFxuZnMvcmFtZnMvaW5vZGUuYzoxNzY6XFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsXFxuZnMvcmFtZnMvaW5vZGUuYy0xNzctXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZmlsZV9kZW50cnkoZmlsZSktXFx1MDAzZWRfbmFtZSwgTlVMTCxcXG4tLVxcbmZzL3ViaWZzL3hhdHRyLmM9NjM1PWludCB1Ymlmc19pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvdWJpZnMveGF0dHIuYy02MzktXFxuZnMvdWJpZnMveGF0dHIuYzo2NDA6XFx0ZXJyID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGVudHJ5LCBxc3RyLFxcbmZzL3ViaWZzL3hhdHRyLmMtNjQxLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpbml0X3hhdHRycywgTlVMTCk7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz04Nj14ZnNfaW5vZGVfaW5pdF9zZWN1cml0eShcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTkwLXtcXG5mcy94ZnMveGZzX2lvcHMuYzo5MTpcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTkyLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnhmc19pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0yNzI9ZXh0ZXJuIGludCBtbWFwX21pbl9hZGRyX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0yNzUtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjI3NjovKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHdyaXRlIHhhdHRycyAqL1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0yNzctdHlwZWRlZiBpbnQgKCppbml0eGF0dHJzKSAoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MDU9dm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDY6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwNy1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwOC1cXHRcXHRcXHRcXHQgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDA5OmludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEwLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTg4NT1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC04OTMtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjg5NDpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTg5NS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05MDItXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjkwMzpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtOTA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYz0xNzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKmJwZl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmMtMTg4LVxcbmtlcm5lbC9icGYvaW5vZGUuYzoxODk6XFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxua2VybmVsL2JwZi9pbm9kZS5jLTE5MC1cXHRcXHRcXHRcXHRcXHQgICBicGZfZnNfaW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmM9MzYzPXN0YXRpYyBpbnQgYnBmX21rb2JqX29wcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqcmF3LFxcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jLTM3NC1cXG5rZXJuZWwvYnBmL2lub2RlLmM6Mzc1OlxcdHJldCA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmtlcm5lbC9icGYvaW5vZGUuYy0zNzYtXFx0XFx0XFx0XFx0XFx0ICAgYnBmX2ZzX2luaXR4YXR0cnMsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jPTQyNz1zdGF0aWMgaW50IGJwZl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYy00NDYtXFxua2VybmVsL2JwZi9pbm9kZS5jOjQ0NzpcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5rZXJuZWwvYnBmL2lub2RlLmMtNDQ4LVxcdFxcdFxcdFxcdFxcdCAgIGJwZl9mc19pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbm1tL21lbWZkLmM9NDU4PXN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm1tL21lbWZkLmMtNDc2LVxcdGlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG5tbS9tZW1mZC5jOjQ3NzpcXHRlcnIgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oaW5vZGUsXFxubW0vbWVtZmQuYy00NzgtXFx0XFx0XFx0XFx1MDAyNlFTVFIoTUVNRkRfQU5PTl9OQU1FKSwgTlVMTCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM4NTA9c2htZW1fbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxubW0vc2htZW0uYy0zODY2LVxcdFxcdGdvdG8gb3V0X2lwdXQ7XFxubW0vc2htZW0uYzozODY3OlxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxubW0vc2htZW0uYy0zODY4LVxcdFxcdFxcdFxcdFxcdCAgICAgc2htZW1faW5pdHhhdHRycywgTlVMTCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM4ODk9c2htZW1fdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5tbS9zaG1lbS5jLTM5MDAtXFx0fVxcbm1tL3NobWVtLmM6MzkwMTpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgTlVMTCxcXG5tbS9zaG1lbS5jLTM5MDItXFx0XFx0XFx0XFx0XFx0ICAgICBzaG1lbV9pbml0eGF0dHJzLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9NDA3OT1zdGF0aWMgaW50IHNobWVtX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxubW0vc2htZW0uYy00MDk2LVxcbm1tL3NobWVtLmM6NDA5NzpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbm1tL3NobWVtLmMtNDA5OC1cXHRcXHRcXHRcXHRcXHQgICAgIHNobWVtX2luaXR4YXR0cnMsIE5VTEwpO1xcbi0tXFxubW0vc2htZW0uYz00MTkwPXN0YXRpYyBpbnQgc2htZW1fZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxubW0vc2htZW0uYy00MjI0LS8qXFxubW0vc2htZW0uYzo0MjI1OiAqIENhbGxiYWNrIGZvciBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZm9yIGFjcXVpcmluZyB4YXR0cnMuXFxubW0vc2htZW0uYy00MjI2LSAqL1xcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jPTEwNjQ9aW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTEwNzgtXFx0LypcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM6MTA3OTpcXHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgbWFrZXMgc3VyZSB0aGF0IHRoZSB4YXR0cnMgYXJyYXkgaXNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtMTA4MC1cXHQgKiBjb250aWd1b3VzLCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHNlY3VyaXR5LmV2bSwgYW5kIHRoYXQgdGhlcmUgaXNcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTMwMj1FWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMpO1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzA0LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTMwNTogKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgLSBJbml0aWFsaXplIGFuIGlub2RlJ3MgTFNNIGNvbnRleHRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzMDYtICogQGlub2RlOiB0aGUgaW5vZGVcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTMzMC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzMzE6aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzMyLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3Ni19XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzc3OkVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzc4LVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM3OS0vKipcXG5zZWN1cml0eS9zZWN1cml0eS5jOjEzODA6ICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTM4MS0gKiBAaW5vZGU6IHRoZSBpbm9kZVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzkwLSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTM5MTppbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzkyLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMTo0Ni40MDA1MzQxMDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY4ODQ2OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW50ZXJzZWN0aW9uIG9mIEJQRiwgTFNNLCBhbmQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyIGhlcmUsIGNhbGxlZCBieSBudW1lcm91cyBmaWxlc3lzdGVtcy4gSXQncyB0aGUgcG9pbnQgb2YgZW50cnkuIFRoZW4gd2UgaGF2ZSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBhIGtmdW5jLCBiZWluZyBpbnZva2VkIGZyb20gYSBCUEYgcHJvZ3JhbS4gSW50ZXJlc3RpbmcuIFRoYXQgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNgLCBgdGVzdF9pbml0X2lub2RlX3hhdHRyYCwgaXMgc2hvd2luZyB1cyB0aGUgZGlyZWN0IGxpbmsg4oCTIHRoZSBCUEYgcHJvZ3JhbSBhdHRhY2hlcyB0byBgbHNtLnMvaW5vZGVfaW5pdF9zZWN1cml0eWAgYW5kIHRoZW4gY2FsbHMgYGJwZl9pbml0X2lub2RlX3hhdHRyYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19CUEZfTFNNYCBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLiBTaW5jZSBgQ09ORklHX0JQRl9MU01gIGltcGxpZXMgYENPTkZJR19TRUNVUklUWWAsIHdlJ3JlIGdvb2QgdGhlcmUuIE5vdGhpbmcgYWJvdXQgbmV0d29yayBzZWN1cml0eSBoZXJlLCBzbyBgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktgIGlzIGlycmVsZXZhbnQsIEkgdGhpbmsuIEFuZCBzaW5jZSBgQ09ORklHX0JQRl9MU01gIGltcGxpZXMgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyBjb3ZlcmVkIGFzIHdlbGwuIFNvLCB0aGVzZSBhcmUgdGhlIGRlcGVuZGVuY2llcy5cblxuSSdtIGdvaW5nIHRvIHJldmlzaXQgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBpdHNlbGYgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2Agb25lIG1vcmUgdGltZS4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoYXQga2Z1bmMgZnVsbHkgaW4gdGhpcyBjb250ZXh0LiBJdCdzIHRoZSBsaW5jaHBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzE6NTEuMzY5MzgzNTM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MjQ1ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbml0X2lub2RlX3hhdHRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JwZl9mc19rZnVuY3MuYz0zNzg9c3RhdGljIGludCBicGZfeGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKmN0eClcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy0zOTItLyoqXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjM5MzogKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHlcXG5mcy9icGZfZnNfa2Z1bmNzLmMtMzk0LSAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDAxLSAqL1xcbmZzL2JwZl9mc19rZnVuY3MuYzo0MDI6X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQwMy1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz00NjU9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWFsX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTClcXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDY2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbmZzL2JwZl9mc19rZnVuY3MuYy00NjctQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oPTk1PXN0cnVjdCBsc21feGF0dHJzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg6OTY6ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgtOTctXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZV9fc3RyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jPTE3PWludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI3LVxcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFxcdTAwMjZ2YWx1ZV9wdHIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYzoyODpcXHRpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgXFx1MDAyNnZhbHVlX3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jLTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMTo1My4yOTQ2NDAxMzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNDk3NTg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBMU00gYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldyBCUEYga2Z1bmMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAuIFRoYXQncyB0aGUgcHJpbWFyeSBzeW1ib2wgSSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB0aGF0IGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBpcyBhbHNvIGdldHRpbmcgdHdlYWtlZCB0byB1c2UgYHN0cnVjdCBsc21feGF0dHJzYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGF0J3MgYSBjZW50cmFsIExTTSBmdW5jdGlvbi4gVGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGFzIGEgbmV3IEJQRiBrZnVuYyBpcyB0aGUga2V5IGhlcmUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdDogSSdtIGFkZGluZyBib3RoIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBBbmQsIG9mIGNvdXJzZSwgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX0xTTWAgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBgRVZNYCBpbnRvIHRoZSBlcXVhdGlvbi4gWWVwLCBJIHNlZSB0aGF0IGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAgaGFzIGJlZW4gbW9kaWZpZWQsIHNvIEknbGwgYWRkIGBFVk1gIHRvIGBFbmFibGVDb25maWdzYCB0byBtYWtlIHN1cmUgdGhvc2UgRVZNIGNvZGUgcGF0aHMgYXJlIGluY2x1ZGVkIGluIG15IGFuYWx5c2lzLiBJdCdzIGFsc28gYSBnb29kIGlkZWEgdG8gY29uc2lkZXIgdGhlIGltcGFjdHMgb24gU0VMaW51eCBhbmQgU01BQ0ssIHNvIGxldCdzIGNoZWNrIHRob3NlIG1vZGlmaWNhdGlvbnMgYXMgd2VsbC4gV2hpbGUgYFNFQ1VSSVRZX1NFTElOVVhgIGFuZCBgU0VDVVJJVFlfU01BQ0tgIGFyZSBwcm9iYWJseSB1c3VhbGx5IGVuYWJsZWQgYW55d2F5LCBpdCdzIHBydWRlbnQgdG8gZXhwbGljaXRseSBsaXN0IHRoZW0gaW4gYEVuYWJsZUNvbmZpZ3NgIGp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjc3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMxOjU4LjcwOTYxOTI3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NDU1MTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI5NDI9c3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yOTYyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyOTYzOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yOTY0LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDA4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDA5OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzAxMC1cXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzUyOT1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc1NjctXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9mcmVlX3NlY3VyaXR5LCBzZWxpbnV4X2lub2RlX2ZyZWVfc2VjdXJpdHkpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NTY4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzU2OTpcXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24pLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NTcwLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMyOjAxLjYwNDE4MzI0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk2NDcxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVXBkYXRlcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgY29uZmlndXJhdGlvbiB1cGRhdGVkLiBJIG5lZWQgdG8gYWRkIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYEVWTWAsIGFuZCBgQlBGX0xTTWAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIHRoZSBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbGl0eSBJJ20gdGFyZ2V0aW5nLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGFyZSB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAsIGBldm1faW5vZGVfaW5pdF9zZWN1cml0eWAsIGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgLCBhbmQgYHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlgLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYGJwZl94YXR0cnNfdXNlZGAgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhpcyBzaG91bGQgYmUgYW4gZWFzeSBjaGVjaywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbGwgY29tcG9uZW50cyBhcmUgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMjYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDE6MzI6MDUuMzAwNjU4MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk2MjQ0MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl94YXR0cnNfdXNlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9icGZfZnNfa2Z1bmNzLmM9MzczPV9fYnBmX2tmdW5jIHN0cnVjdCBpbm9kZSAqYnBmX3JlYWxfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM3Ny1cXG5mcy9icGZfZnNfa2Z1bmNzLmM6Mzc4OnN0YXRpYyBpbnQgYnBmX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICpjdHgpXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTM3OS17XFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmM9NDAyPV9fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQxNC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDE1OlxcdGlmIChicGZfeGF0dHJzX3VzZWQoeGF0dHJzKSBcXHUwMDNlPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxcbmZzL2JwZl9mc19rZnVuY3MuYy00MTYtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAxOjMyOjA3LjM5NjkxMDIyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTc2ODY3NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEV4cGFuZGluZyB0aGUgQlBGIExTTSBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aGlzIG5ldyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBjb3VsZCBkaXJlY3RseSB0YXJnZXQgYGJwZl94YXR0cnNfdXNlZGAsIGJ1dCB0aGF0J3MgYSBzdGF0aWMgc3ltYm9sLiBTeXprYWxsZXIgY2FuJ3Qgd29yayB3aXRoIHRoYXQgZGlyZWN0bHksIGJ1dCBpdCdzIGNhbGxlZCBieSBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLiBBaGEhIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgKmlzKiB0aGUga2Z1bmMgSSBuZWVkLlxuXG5MZXQncyBicmVhayB0aGlzIGRvd24gZm9yIHRoZSBmdXp6aW5nIHNldHVwOlxuXG4qICAgKipgV29ydGhGdXp6aW5nOiB0cnVlYCoqOiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlLlxuKiAgICoqYEZvY3VzU3ltYm9sczpgKipcblxuICAgICogICBgYnBmX2luaXRfaW5vZGVfeGF0dHJgOiBUaGlzIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSB0YXJnZXQuXG4gICAgKiAgIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YFxuICAgICogICBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgXG4gICAgKiAgIGBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlgXG4gICAgKiAgIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YDogIEFsbCBvZiB0aGVzZSBhcmUgKmNyaXRpY2FsbHkqIGltcG9ydGFudCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBMU00gaG9va3MgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIHRoZSBuZXcgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBmdW5jdGlvbmFsaXR5LiBUaGVzZSBhcmUgdGhlIHRvdWNoIHBvaW50cyB0aGF0IG5lZWQgdGhvcm91Z2ggY292ZXJhZ2UuXG5cbiogICAqKmBFbmFibGVDb25maWdzOmAqKlxuXG4gICAgKiAgIGBCUEZfTFNNYDogT2J2aW91c2x5LCB0aGlzIGlzIGZ1bmRhbWVudGFsLlxuICAgICogICBgRVZNYFxuICAgICogICBgU0VDVVJJVFlfU0VMSU5VWGBcbiAgICAqICAgYFNFQ1VSSVRZX1NNQUNLYDogTmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZXNlIGFyZSBlbmFibGVkIHNpbmNlIHRoZSBrZnVuYyBjaGFuZ2VzIExTTSBob29rcyB0aGF0IHRoZXNlIGxldmVyYWdlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm92ZWwgbWVjaGFuaXNtIGZvciBCUEYgTFNNIHByb2dyYW1zIHRvIG1hbmFnZSB4YXR0cnMgb24gbmV3IGlub2Rlcy4gSXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vayB0byB1c2UgdGhlIGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlIGFjcm9zcyBtdWx0aXBsZSBMU01zIChjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2spIG1lYW5zIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBjcm9zcy1MU00gY2hhbmdlcyBtYWtlIHRoaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZyBmb3IgZmluZGluZyBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIFRpbWUgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTAzLCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMTozMjoxNC41NzM3ODAzNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg0NTAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiRVZNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJldm1faW5vZGVfaW5pdF9zZWN1cml0eVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB0aGF0IGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIGBpbm9kZV9pbml0X3NlY3VyaXR5YC4gSXQgbW9kaWZpZXMgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBMU00gaG9vayBzaWduYXR1cmUgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbHNtX3hhdHRyc2Agc3RydWN0dXJlLCBhZmZlY3RpbmcgY29yZSBMU00sIEVWTSwgU0VMaW51eCwgYW5kIFNtYWNrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJFVk1cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlcIixcbiAgICBcImV2bV9pbm9kZV9pbml0X3NlY3VyaXR5XCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlcIixcbiAgICBcInNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHRoYXQgYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgYGlub2RlX2luaXRfc2VjdXJpdHlgLiBJdCBtb2RpZmllcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byB1c2UgYSBuZXcgYHN0cnVjdCBsc21feGF0dHJzYCBzdHJ1Y3R1cmUsIGFmZmVjdGluZyBjb3JlIExTTSwgRVZNLCBTRUxpbnV4LCBhbmQgU21hY2suIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpv8lm[1] Phase: Succeeded StartedAt: 2026-07-01 01:35:27 +0000 UTC FinishedAt: 2026-07-01 01:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 01:35:27 +0000 UTC FinishedAt: 2026-07-01 01:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2] Phase: Succeeded StartedAt: 2026-07-01 01:35:27 +0000 UTC FinishedAt: 2026-07-01 06:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 01:35:27 +0000 UTC FinishedAt: 2026-07-01 06:30:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 01:35:27 +0000 UTC FinishedAt: 2026-07-01 01:36:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 01:35:27 +0000 UTC FinishedAt: 2026-07-01 01:36:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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-workflowpv8lm/series-workflowpv8lm-convert-artifact-4035578994/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 01:36:56 +0000 UTC FinishedAt: 2026-07-01 02:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 01:36:56 +0000 UTC FinishedAt: 2026-07-01 02:25:16 +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:*1ca465c3-efd3-4265-9271-c774e753829f,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-workflowpv8lm/series-workflowpv8lm-convert-artifact-4035578994/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": "b9ee38f0-5c3c-4fa4-9e2a-697c02bd0781", "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-workflowpv8lm/series-workflowpv8lm-build-action-2138805232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 01:36:56 +0000 UTC FinishedAt: 2026-07-01 02:24:52 +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:*1ca465c3-efd3-4265-9271-c774e753829f,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-workflowpv8lm/series-workflowpv8lm-convert-artifact-4035578994/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": "b9ee38f0-5c3c-4fa4-9e2a-697c02bd0781", "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-workflowpv8lm/series-workflowpv8lm-build-action-2138805232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:25:16 +0000 UTC FinishedAt: 2026-07-01 02:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:25:16 +0000 UTC FinishedAt: 2026-07-01 02:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:25:16 +0000 UTC FinishedAt: 2026-07-01 02:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:25:16 +0000 UTC FinishedAt: 2026-07-01 02:25:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-workflowpv8lm/series-workflowpv8lm-convert-artifact-1384327053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:25:26 +0000 UTC FinishedAt: 2026-07-01 02:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:25:26 +0000 UTC FinishedAt: 2026-07-01 02:27:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9ee38f0-5c3c-4fa4-9e2a-697c02bd0781,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-workflowpv8lm/series-workflowpv8lm-build-action-2138805232/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-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:27:41 +0000 UTC FinishedAt: 2026-07-01 02:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:27:41 +0000 UTC FinishedAt: 2026-07-01 02:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:27:41 +0000 UTC FinishedAt: 2026-07-01 03:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:27:41 +0000 UTC FinishedAt: 2026-07-01 03:22:48 +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:*1ca465c3-efd3-4265-9271-c774e753829f,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-workflowpv8lm/series-workflowpv8lm-convert-artifact-1384327053/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": "3030a1d8-fbe5-4ec9-8d2e-8ed8032ba9f3", "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-workflowpv8lm/series-workflowpv8lm-build-action-3836982633/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 02:27:41 +0000 UTC FinishedAt: 2026-07-01 03:21:51 +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:*1ca465c3-efd3-4265-9271-c774e753829f,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-workflowpv8lm/series-workflowpv8lm-convert-artifact-1384327053/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": "3030a1d8-fbe5-4ec9-8d2e-8ed8032ba9f3", "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-workflowpv8lm/series-workflowpv8lm-build-action-3836982633/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:22:48 +0000 UTC FinishedAt: 2026-07-01 03:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:22:48 +0000 UTC FinishedAt: 2026-07-01 03:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:22:48 +0000 UTC FinishedAt: 2026-07-01 03:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:22:48 +0000 UTC FinishedAt: 2026-07-01 03:24:29 +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:*3030a1d8-fbe5-4ec9-8d2e-8ed8032ba9f3,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-workflowpv8lm/series-workflowpv8lm-build-action-3836982633/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-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 06:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 06:30:23 +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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_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:*b9ee38f0-5c3c-4fa4-9e2a-697c02bd0781,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3030a1d8-fbe5-4ec9-8d2e-8ed8032ba9f3,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-workflowpv8lm/series-workflowpv8lm-build-action-2138805232/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-workflowpv8lm/series-workflowpv8lm-build-action-3836982633/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 03:27:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 03:25:25 +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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_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-workflowpv8lm/series-workflowpv8lm-convert-artifact-4033367666/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 03:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 03:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:24:39 +0000 UTC FinishedAt: 2026-07-01 03:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:27:02 +0000 UTC FinishedAt: 2026-07-01 06:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpv8lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"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_inode_init_security","evm_inode_init_security","selinux_inode_init_security","smack_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e771677c937da5808f7b6c1f0e4a97ec1a84f8a8","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM","EVM","SECURITY_SELINUX","SECURITY_SMACK"],"series_id":"86d7e906-c185-4aaa-9650-1f9d4f07e57f","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-07-01 03:27:02 +0000 UTC FinishedAt: 2026-07-01 06:30:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9ee38f0-5c3c-4fa4-9e2a-697c02bd0781,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3030a1d8-fbe5-4ec9-8d2e-8ed8032ba9f3,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-workflowpv8lm/series-workflowpv8lm-build-action-2138805232/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-workflowpv8lm/series-workflowpv8lm-build-action-3836982633/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-workflowpv8lm/series-workflowpv8lm-convert-artifact-4033367666/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,}