Name: series-workflowmms5s Phase: Succeeded StartedAt: 2026-07-08 10:14:18 +0000 UTC FinishedAt: 2026-07-08 15:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[0] Phase: Succeeded StartedAt: 2026-07-08 10:14:18 +0000 UTC FinishedAt: 2026-07-08 10:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 10:14:18 +0000 UTC FinishedAt: 2026-07-08 10:33:26 +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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM" ], "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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM" ], "series_id": "7623a9c1-3c40-4631-9d76-507be97a724e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_init_inode_xattr", "security_lsmxattr_add", "security_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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHdoaWNoIGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vay4gSXQgbW9kaWZpZXMgdGhlIExTTSBob29rIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBoYW5kbGUgdGhlIHhhdHRyIGFkZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgTFNNIGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSBhbmQgY3JlYXRpbmcgZmlsZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmMgYW5kIHRoZSBtb2RpZmllZCBzZWN1cml0eSBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZGI4YjQyZmNmNmY2YTUyMjg5ODM4YjRiZWVhNTk3ZDNmNzg2ZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDozMjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IDc2OGFjYTJkYzBmMDM0Li5hZDAwMjVmMjI2NGE4YiAxMDA2NDRcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5AQCAtMTEsNyAmIzQzOzExLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhdHRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sc20uaFx1MDAzZVxuIFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiBcbkBAIC0zNzQsNiAmIzQzOzM3NiwzOSBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBkX3JlYWxfaW5vZGUoZGVudHJ5KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHlcbiYjNDM7ICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbiYjNDM7ICogQG5hbWVfX3N0cjogeGF0dHIgbmFtZSAoZS5nLiwgXCYjMzQ7YnBmLmZpbGVfbGFiZWxcJiMzNDspXG4mIzQzOyAqIEB2YWx1ZV9wOiBkeW5wdHIgY29udGFpbmluZyB0aGUgeGF0dHIgdmFsdWVcbiYjNDM7ICpcbiYjNDM7ICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICp2YWx1ZV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXZhbHVlX3A7XG4mIzQzO1x0Y29uc3Qgdm9pZCAqdmFsdWU7XG4mIzQzO1x0dTMyIHZhbHVlX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuYW1lX19zdHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLFxuJiM0MztcdFx0ICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XG4mIzQzO1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfbHNteGF0dHJfYWRkKHhhdHRycywgTFNNX0lEX0JQRiwgbmFtZV9fc3RyLCB2YWx1ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHZhbHVlX2xlbik7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiBcbiBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuQEAgLTM4NSw2ICYjNDM7NDIwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cilcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbiBcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbmluZGV4IGRkYTI3MmQ3OGYwMTNmLi4zNzRjNTA4MDFhOGM2ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuQEAgLTIxLDYgJiM0MzsyMSw5IEBAIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rX2RlZnMuaFx1MDAzZVxuICN1bmRlZiBMU01fSE9PS1xuIFxuJiM0MzsvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cbiYjNDM7I2RlZmluZSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIDRcbiYjNDM7XG4gc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2Ige1xuIFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlO1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldm0uaCBiL2luY2x1ZGUvbGludXgvZXZtLmhcbmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXZtLmhcbkBAIC0xMiw2ICYjNDM7MTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVncml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuJiM0MztzdHJ1Y3QgbHNtX3hhdHRycztcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19FVk1cbiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7XG4gZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuQEAgLTIxLDggJiM0MzsyMyw4IEBAIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcbiBcdFx0IGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTtcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudCk7XG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpO1xuIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7XG4gZXh0ZXJuIGludCBldm1fcmVhZF9wcm90ZWN0ZWRfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTggKmJ1ZmZlcixcbkBAIC02Myw4ICYjNDM7NjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcwLi41YjJkZTc4NjVjZTgxYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTExNiw4ICYjNDM7MTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHQgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG5pbmRleCBiNGY4Y2FkNTNkZGIwMy4uN2FmZTA2YThkNGM2YzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG5AQCAtMjAwLDIwICYjNDM7MjAwLDE4IEBAIGV4dGVybiBzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsc190YWJsZSBzdGF0aWNfY2FsbHNfdGFibGUgX19yb19hZnRlcl9pbml0O1xuIFxuIC8qKlxuICAqIGxzbV9nZXRfeGF0dHJfc2xvdCAtIFJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBhbmQgaW5jcmVtZW50IHRoZSBpbmRleFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xuLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZClcbiYjNDM7ICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiAgKlxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXG4mIzQzOyAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQGN0eC1cdTAwM2V4YXR0cnMgYXJyYXkgdG8gZmlsbCB3aXRoIGFuXG4mIzQzOyAqIHhhdHRyLCBhbmQgaW5jcmVtZW50IEBjdHgtXHUwMDNleGF0dHJfY291bnQuXG4gICpcbi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4mIzQzOyAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAY3R4LVx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICAgICAgIGludCAqeGF0dHJfY291bnQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbiB7XG4tXHRpZiAodW5saWtlbHkoIXhhdHRycykpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cdTAwM2V4YXR0cnMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBcdTAwMjZ4YXR0cnNbKCp4YXR0cl9jb3VudCkmIzQzOyYjNDM7XTtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2Y3R4LVx1MDAzZXhhdHRyc1tjdHgtXHUwMDNleGF0dHJfY291bnQmIzQzOyYjNDM7XTtcbiB9XG4gXG4gI2VuZGlmIC8qICEgX19MSU5VWF9MU01fSE9PS1NfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmODguLjY0N2Y3Yjg4MzU4YjJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC02OCw2ICYjNDM7NjgsMTEgQEAgc3RydWN0IHdhdGNoO1xuIHN0cnVjdCB3YXRjaF9ub3RpZmljYXRpb247XG4gc3RydWN0IGxzbV9jdHg7XG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzIHtcbiYjNDM7XHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7XG4mIzQzO307XG4mIzQzO1xuIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqL1xuICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MFxuIC8qIElmIGNhcGFibGUgc2hvdWxkIGF1ZGl0IHRoZSBzZWN1cml0eSByZXF1ZXN0ICovXG5AQCAtNDAxLDYgJiM0Mzs0MDYsOSBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4gXHRcdFx0XHQgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKTtcbiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuJiM0MztcdFx0XHQgIHNpemVfdCB2YWx1ZV9sZW4pO1xuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbkBAIC04OTUsNiAmIzQzOzkwMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzQzO1x0XHRcdFx0XHRzaXplX3QgdmFsdWVfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDdiOThmNWQxZTJiZTgzLi44ZjhjM2RlMzAzNWYwMSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMzLDYgJiM0MzszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4mIzQzO1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4OS4uYjcxNThmYzYzNTQzZTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgJiM0MzsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxuICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWVcbiAgKi9cbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4mIzQzO1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4gXHRib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0eGF0dHJzID0gbHNtX3hhdHRycyA/IGxzbV94YXR0cnMtXHUwMDNleGF0dHJzIDogTlVMTDtcbiBcdGlmICghKGV2bV9pbml0aWFsaXplZCBcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA4Nyw3ICYjNDM7MTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTtcbiBcdC8qXG4gXHQgKiBBcnJheSB0ZXJtaW5hdG9yICh4YXR0ciBuYW1lID0gTlVMTCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWZpbGxlZFxuIFx0ICogeGF0dHIgc2xvdC5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjI2MWY2OGUxN2NmZGEwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtMU006IFwmIzM0OyBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbHNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYXBhYmlsaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kY2FjaGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTMzMyw4ICYjNDM7MTMzNCw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbi1cdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcbiYjNDM7XHRzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTtcbiYjNDM7XHRpbnQgcmV0ID0gLUVPUE5PVFNVUFA7XG4gXG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMzQ0LDE1ICYjNDM7MTM0NSwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBcdGlmIChpbml0eGF0dHJzKSB7XG4gXHRcdC8qIEFsbG9jYXRlICYjNDM7MSBhcyB0ZXJtaW5hdG9yLiAqL1xuLVx0XHRuZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLFxuLVx0XHRcdFx0ICAgICBzaXplb2YoKm5ld194YXR0cnMpLCBHRlBfTk9GUyk7XG4tXHRcdGlmICghbmV3X3hhdHRycylcbiYjNDM7XHRcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRzaXplb2YoKnhhdHRycy54YXR0cnMpLCBHRlBfTk9GUyk7XG4mIzQzO1x0XHRpZiAoIXhhdHRycy54YXR0cnMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xuLVx0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRyX2NvdW50KTtcbiYjNDM7XHRcdHJldCA9IHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2eGF0dHJzKTtcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHQvKlxuQEAgLTEzNjQsMTggJiM0MzsxMzY1LDEwMSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdH1cbiBcbiBcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xuLVx0aWYgKCF4YXR0cl9jb3VudClcbiYjNDM7XHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcbiYjNDM7XHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTtcbiBvdXQ6XG4tXHRmb3IgKDsgeGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXG4tXHRcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4tXHRrZnJlZShuZXdfeGF0dHJzKTtcbiYjNDM7XHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcbiYjNDM7XHRcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuJiM0MztcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xuIFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnByZWZpeClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIG4gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4YXR0cnMtXHUwMDNleGF0dHJfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBjaGFyICpuYW1lID0geGF0dHJzLVx1MDAzZXhhdHRyc1tpXS5uYW1lO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBwcmVmaXgsIHByZWZpeF9sZW4pKVxuJiM0MztcdFx0XHRuJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG47XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcbiYjNDM7ICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiYjNDM7ICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXG4mIzQzOyAqIEBuYW1lOiB4YXR0ciBuYW1lIHN1ZmZpeFxuJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlXG4mIzQzOyAqIEB2YWx1ZV9sZW46IGxlbmd0aCBvZiBAdmFsdWVcbiYjNDM7ICpcbiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogQGxzbV9pZCBhbmQgZmlsbCBpdCB3aXRoIGEgY29weSBvZiBAbmFtZSBhbmQgQHZhbHVlLiBDYWxsZXJzIGNhbiBpbnZva2VcbiYjNDM7ICogdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGUgY2FsbGluZyBMU00mIzM5O3Mgc2xvdCBidWRnZXRcbiYjNDM7ICogICAgICAgICBpcyBleGhhdXN0ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBlcnJvcnMuXG4mIzQzOyAqL1xuJiM0MztpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4mIzQzO1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzQzO1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHI7XG4mIzQzO1x0dm9pZCAqeGF0dHJfdmFsdWU7XG4mIzQzO1x0c2l6ZV90IG5hbWVfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhhdHRycyB8fCAheGF0dHJzLVx1MDAzZXhhdHRycyB8fCAhbmFtZSB8fCAhdmFsdWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7XG4mIzQzO1x0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXHUwMDNlIFhBVFRSX05BTUVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiBcdTAwM2UgWEFUVFJfU0laRV9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChsc21faWQpIHtcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0Y2FzZSBMU01fSURfQlBGOlxuJiM0MztcdFx0aWYgKGxzbV94YXR0cnNfdXNlZCh4YXR0cnMsIFhBVFRSX0JQRl9MU01fU1VGRklYKSBcdTAwM2U9XG4mIzQzO1x0XHQgICAgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSAmIzQzOyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovXG4mIzQzO1x0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiAmIzQzOyBuYW1lX2xlbiAmIzQzOyAxLCBHRlBfTk9XQUlUKTtcbiYjNDM7XHRpZiAoIXhhdHRyX3ZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG1lbWNweSh4YXR0cl92YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbik7XG4mIzQzO1x0bWVtY3B5KHhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbiwgbmFtZSwgbmFtZV9sZW4pO1xuJiM0MztcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiYjNDM7XHRpZiAoIXhhdHRyKSB7XG4mIzQzO1x0XHRrZnJlZSh4YXR0cl92YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4mIzQzO1x0eGF0dHItXHUwMDNlbmFtZSA9IChjb25zdCBjaGFyICopeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZVxuICAqIEBpbm9kZTogdGhlIGlub2RlXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxYTcxM2Q5NjIwNmY1OS4uNmJiYTZiMjEyZTE3YzUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTI5NjIsNyAmIzQzOzI5NjIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZGVudHJ5X2NyZWF0ZV9maWxlc19hcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLFxuIFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpO1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYztcbkBAIC0yOTkyLDcgJiM0MzsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIShzYnNlYy1cdTAwM2VmbGFncyBcdTAwMjYgU0JMQUJFTF9NTlQpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbiYjNDM7XHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuIFx0aWYgKHhhdHRyKSB7XG4gXHRcdHJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNmNvbnRleHQsIFx1MDAyNmNsZW4pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IGZmMTE1MDY4YzVjMDZmLi40NTAxMDc4NDMwY2EwNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTk4MSwxMCAmIzQzOzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcbiB9XG4gXG4gc3RhdGljIGludFxuLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiYjNDM7eGF0dHJfZHVwdmFsKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4gXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKVxuIHtcbi1cdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXG4gXHRpZiAoIXhhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXG4gICogQGlub2RlOiB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZVxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxuICAqIEBxc3RyOiB1bnVzZWRcbi0gKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgdGhlIGF0dHJpYnV0ZXNcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXG4mIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnRcbiAgKlxuICAqIFJldHVybnMgMCBpZiBpdCBhbGwgd29ya3Mgb3V0LCAtRU5PTUVNIGlmIHRoZXJlJiMzOTtzIG5vIG1lbW9yeVxuICAqL1xuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gc21hY2tfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpO1xuQEAgLTEwNTcsMjEgJiM0MzsxMDU2LDE5IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRcdHRyYW5zZmxhZyA9IFNNS19JTk9ERV9UUkFOU01VVEU7XG4gXG4tXHRcdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxuLVx0XHRcdFx0WEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRSxcbi1cdFx0XHRcdFRSQU5TX1RSVUVfU0laRVxuLVx0XHRcdCkpXG4mIzQzO1x0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuJiM0MztcdFx0XHRcdFx0IFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbiYjNDM7XHRcdFx0XHRcdCBUUkFOU19UUlVFLFxuJiM0MztcdFx0XHRcdFx0IFRSQU5TX1RSVUVfU0laRSkpXG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChyYyA9PSAwKVxuLVx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcbi1cdFx0XHQgICAgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuLVx0XHQgICAgIHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pXG4tXHRcdCkpXG4mIzQzO1x0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcbiYjNDM7XHRcdFx0XHQgWEFUVFJfU01BQ0tfU1VGRklYLFxuJiM0MztcdFx0XHRcdCBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4mIzQzO1x0XHRcdFx0IHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pKSlcbiBcdFx0XHRyYyA9IC1FTk9NRU07XG4gaW5zdGFudF9pbm9kZTpcbiBcdGlzc3AtXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbmluZGV4IGFlNzFlOWI2OTA1MTg2Li4yNjM5ZjlmOTQxOTU1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICYjNDM7OTIsOSBAQCBleHRlcm4gaW50IGJwZl9zZXRfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcbiBleHRlcm4gaW50IGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyKSBfX2tzeW0gX193ZWFrO1xuIFxuJiM0MztzdHJ1Y3QgbHNtX3hhdHRycztcbiYjNDM7ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMzYuLjEwYmUwYWI5MWU3MDYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X2dldF94YXR0ci5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9mc3Zlcml0eS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaFwmIzM0O1xuIFxuIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSBcJiMzNDsvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzXCYjMzQ7O1xuIFxuQEAgLTI2OCw2ICYjNDM7MjY5LDEyMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZzdmVyaXR5KHZvaWQpXG4gXHRyZW1vdmUodGVzdGZpbGUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgZmQgPSAtMSwgZXJyO1xuJiM0MztcdGNoYXIgdmFsdWVfb3V0WzY0XTtcbiYjNDM7XHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcJiMzNDsvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX25ld1wmIzM0OztcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXG4mIzQzO1x0ZmQgPSBvcGVuKHRlc3RmaWxlX25ldywgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwmIzM0O2NyZWF0ZV9maWxlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0LCAwLCBcJiMzNDtpbml0X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXCYjMzQ7c2VjdXJpdHkuXCYjMzQ7IHRvIHRoZSBuYW1lLiAqL1xuJiM0MztcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXCYjMzQ7c2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcJiMzNDssIHZhbHVlX291dCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PREFUQSkge1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyVzOlNLSVA6ZmlsZXN5c3RlbSBkaWQgbm90IGFwcGx5IExTTSB4YXR0cnNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghQVNTRVJUX0dFKGVyciwgMCwgXCYjMzQ7Z2V0eGF0dHJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V4YXR0cl92YWx1ZSksIFwmIzM0O3hhdHRyX3NpemVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShzdHJuY21wKHZhbHVlX291dCwgXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHNpemVvZihcJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcJiMzNDspKSwgMCxcbiYjNDM7XHRcdCAgXCYjMzQ7eGF0dHJfdmFsdWVcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0cmVtb3ZlKHRlc3RmaWxlX25ldyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovXG4mIzQzOyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxuJiM0MzsgKiB0aGUga2Z1bmMgb25seSBsZXRzIEJQRiBjbGFpbSBJTklUX0lOT0RFX1hBVFRSX01BWCB4YXR0ciBzbG90cyBwZXIgaW5vZGUuXG4mIzQzOyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbFtJTklUX0lOT0RFX1hBVFRSX01BWCAmIzQzOyAxXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGlua1tJTklUX0lOT0RFX1hBVFRSX01BWCAmIzQzOyAxXSA9IHt9O1xuJiM0MztcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX3Nsb3QgPSBcJiMzNDsvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcJiMzNDs7XG4mIzQzO1x0aW50IG9rID0gMCwgbm9zcGMgPSAwLCBvdGhlciA9IDA7XG4mIzQzO1x0aW50IGksIGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWxbaV0sIFwmIzM0O29wZW5cJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50Zihza2VsW2ldLVx1MDAzZXJvZGF0YS1cdTAwM2V4YXR0cl9uYW1lLFxuJiM0MztcdFx0XHQgc2l6ZW9mKHNrZWxbaV0tXHUwMDNlcm9kYXRhLVx1MDAzZXhhdHRyX25hbWUpLCBcJiMzNDticGYubGFiZWxfJWRcJiMzNDssXG4mIzQzO1x0XHRcdCBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PSyh0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2xvYWQoc2tlbFtpXSksIFwmIzM0O2xvYWRcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRza2VsW2ldLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1xuJiM0MztcdFx0bGlua1tpXSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWxbaV0tXHUwMDNlcHJvZ3MudGVzdF9pbml0X2lub2RlX3hhdHRyKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCBcJiMzNDthdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRyaWdnZXIgaW5vZGVfaW5pdF9zZWN1cml0eSBvbmNlIHdpdGggYWxsIHByb2dyYW1zIGF0dGFjaGVkLiAqL1xuJiM0MztcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7Y3JlYXRlX2ZpbGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhhY3RseSBJTklUX0lOT0RFX1hBVFRSX01BWCBwcm9ncmFtcyBjbGFpbSBhIHNsb3Q7IHRoZSBwcm9ncmFtIHBhc3RcbiYjNDM7XHQgKiB0aGUgYnVkZ2V0IGdldHMgLUVOT1NQQy4gVGhlIG9yZGVyIGluIHdoaWNoIHByb2dyYW1zIHJ1biBpcyBub3RcbiYjNDM7XHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHJlcyA9IHNrZWxbaV0tXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVzID09IDApXG4mIzQzO1x0XHRcdG9rJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKVxuJiM0MztcdFx0XHRub3NwYyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG90aGVyJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwmIzM0O3Nsb3RzX3dpdGhpbl9idWRnZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShub3NwYywgMSwgXCYjMzQ7c2xvdF9vdmVyX2J1ZGdldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcJiMzNDt1bmV4cGVjdGVkX3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRicGZfbGlua19fZGVzdHJveShsaW5rW2ldKTtcbiYjNDM7XHRcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmVtb3ZlKHRlc3RmaWxlX3Nsb3QpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCAmIzQzOzQwNiwxMCBAQCB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpXG4gXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtmc3Zlcml0eVwmIzM0OykpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aW5pdF9pbm9kZV94YXR0clwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0XCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYWFkZTUzYjg3ZTNhM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9rZnVuY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO19fdTMyIG1vbml0b3JlZF9waWQ7XG4mIzQzO2ludCBpbml0X3Jlc3VsdCA9IC0xO1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciB4YXR0cl9uYW1lWzE2XSA9IFwmIzM0O2JwZi50ZXN0X2xhYmVsXCYjMzQ7O1xuJiM0MztjaGFyIHhhdHRyX3ZhbHVlW10gPSBcJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcJiMzNDs7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX2luaXRfc2VjdXJpdHlcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XG4mIzQzO1x0X191MzIgcGlkO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1x0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2RiOGI0MmZjZjZmNmE1MjI4OTgzOGI0YmVlYTU5N2QzZjc4NmU5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMTA6MzI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmMKaW5kZXggNzY4YWNhMmRjMGYwMzQuLmFkMDAyNWYyMjY0YThiIDEwMDY0NAotLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jCkBAIC0xMSw3ICYjNDM7MTEsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZWN1cml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbHNtLmgmZ3Q7CiAKIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKIApAQCAtMzc0LDYgJiM0MzszNzYsMzkgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5CiYjNDM7ICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHQKJiM0MzsgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCAmIzM0O2JwZi5maWxlX2xhYmVsJiMzNDspCiYjNDM7ICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZQomIzQzOyAqCiYjNDM7ICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wOwomIzQzOwljb25zdCB2b2lkICp2YWx1ZTsKJiM0MzsJdTMyIHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFuYW1lX19zdHIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwKJiM0MzsJCSAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwl2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpOwomIzQzOwl2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTsKJiM0MzsJaWYgKCF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfbHNteGF0dHJfYWRkKHhhdHRycywgTFNNX0lEX0JQRiwgbmFtZV9fc3RyLCB2YWx1ZSwKJiM0MzsJCQkJICAgICB2YWx1ZV9sZW4pOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpCkBAIC0zODUsNiAmIzQzOzQyMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cikKIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKQogCiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaAppbmRleCBkZGEyNzJkNzhmMDEzZi4uMzc0YzUwODAxYThjNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBleHRlcm4gYm9vbCBicGZfbHNtX2luaXRpYWxpemVkIF9fcm9fYWZ0ZXJfaW5pdDsKICNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va19kZWZzLmgmZ3Q7CiAjdW5kZWYgTFNNX0hPT0sKIAomIzQzOy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqLwomIzQzOyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0CiYjNDM7CiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7CiAJc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oCmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V2bS5oCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVncml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRyczsKJiM0MzsKICNpZmRlZiBDT05GSUdfRVZNCiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7CiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0yMSw4ICYjNDM7MjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSwKIAkJIGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTsKIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCk7CiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTsKIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsCkBAIC02Myw4ICYjNDM7NjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLAogCiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkJICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkJCQkJICBpbnQgKnhhdHRyX2NvdW50KQomIzQzOwkJCQkJICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMTYsOCAmIzQzOzExNiw4IEBAIExTTV9IT09LKGludCwgMCwgaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSkKIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JIGludCAqeGF0dHJfY291bnQpCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CSBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7CiAKIC8qKgogICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4Ci0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnMKLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZCkKJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rcwogICoKLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsCi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC4KJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtJmd0O3hhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4KJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LSZndDt4YXR0cl9jb3VudC4KICAqCi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtJmd0O3hhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgICAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eCkKIHsKLQlpZiAodW5saWtlbHkoIXhhdHRycykpCiYjNDM7CWlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtJmd0O3hhdHRycykpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiAmYW1wO3hhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdOwomIzQzOwlyZXR1cm4gJmFtcDtjdHgtJmd0O3hhdHRyc1tjdHgtJmd0O3hhdHRyX2NvdW50JiM0MzsmIzQzO107CiB9CiAKICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4OC4uNjQ3ZjdiODgzNThiMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7CiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uOwogc3RydWN0IGxzbV9jdHg7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRycyB7CiYjNDM7CXN0cnVjdCB4YXR0ciAqeGF0dHJzOwomIzQzOwl1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7CiYjNDM7fTsKJiM0MzsKIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqLwogI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwCiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqLwpAQCAtNDAxLDYgJiM0Mzs0MDYsOSBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiAJCQkJIGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSk7CiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLAomIzQzOwkJCSAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCiYjNDM7CQkJICBzaXplX3QgdmFsdWVfbGVuKTsKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpOwpAQCAtODk1LDYgJiM0Mzs5MDMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsCiYjNDM7CQkJCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKJiM0MzsJCQkJCXNpemVfdCB2YWx1ZV9sZW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJCQkgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMgYi9zZWN1cml0eS9icGYvaG9va3MuYwppbmRleCA3Yjk4ZjVkMWUyYmU4My4uOGY4YzNkZTMwMzVmMDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jCkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX2luaXQodm9pZCkKIAogc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7CiAJLmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksCiYjNDM7CS5sYnNfeGF0dHJfY291bnQgPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTLAogfTsKIAogREVGSU5FX0xTTShicGYpID0gewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCmluZGV4IGI1OWUzZjEyMWI4YTg5Li5iNzE1OGZjNjM1NDNlMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYwpAQCAtMTA2MiwxNCAmIzQzOzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpCiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlCiAgKi8KIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CQkJICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKQogewogCXN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7CiAJc3RydWN0IHhhdHRyICp4YXR0ciwgKmV2bV94YXR0cjsKJiM0MzsJc3RydWN0IHhhdHRyICp4YXR0cnM7CiAJYm9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlOwogCWludCByYzsKIAomIzQzOwl4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy0mZ3Q7eGF0dHJzIDogTlVMTDsKIAlpZiAoIShldm1faW5pdGlhbGl6ZWQgJmFtcDsgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycykKIAkJcmV0dXJuIDA7CiAKQEAgLTEwODcsNyAmIzQzOzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFldm1fcHJvdGVjdGVkX3hhdHRycykKIAkJcmV0dXJuIDA7CiAKLQlldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CWV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTsKIAkvKgogCSAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkCiAJICogeGF0dHIgc2xvdC4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDI5Li4yNjFmNjhlMTdjZmRhMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0xTTTogJiMzNDsgZm10CiAKICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2xzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NhcGFiaWxpdHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kY2FjaGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTEzMzMsOCAmIzQzOzEzMzQsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKQogewogCXN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsOwotCXN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7CiYjNDM7CXN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9OwomIzQzOwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKQEAgLTEzNDQsMTUgJiM0MzsxMzQ1LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAJaWYgKGluaXR4YXR0cnMpIHsKIAkJLyogQWxsb2NhdGUgJiM0MzsxIGFzIHRlcm1pbmF0b3IuICovCi0JCW5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCi0JCQkJICAgICBzaXplb2YoKm5ld194YXR0cnMpLCBHRlBfTk9GUyk7Ci0JCWlmICghbmV3X3hhdHRycykKJiM0MzsJCXhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCiYjNDM7CQkJCQlzaXplb2YoKnhhdHRycy54YXR0cnMpLCBHRlBfTk9GUyk7CiYjNDM7CQlpZiAoIXhhdHRycy54YXR0cnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkgewotCQlyZXQgPSBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLAotCQkJCQkJICAmYW1wO3hhdHRyX2NvdW50KTsKJiM0MzsJCXJldCA9IHNjYWxsLSZndDtobC0mZ3Q7aG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsCiYjNDM7CQkJCQkJCSAgJmFtcDt4YXR0cnMpOwogCQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FT1BOT1RTVVBQKQogCQkJZ290byBvdXQ7CiAJCS8qCkBAIC0xMzY0LDE4ICYjNDM7MTM2NSwxMDEgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJfQogCiAJLyogSWYgaW5pdHhhdHRycygpIGlzIE5VTEwsIHhhdHRyX2NvdW50IGlzIHplcm8sIHNraXAgdGhlIGNhbGwuICovCi0JaWYgKCF4YXR0cl9jb3VudCkKJiM0MzsJaWYgKCF4YXR0cnMueGF0dHJfY291bnQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgbmV3X3hhdHRycywgZnNfZGF0YSk7CiYjNDM7CXJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpOwogb3V0OgotCWZvciAoOyB4YXR0cl9jb3VudCAmZ3Q7IDA7IHhhdHRyX2NvdW50LS0pCi0JCWtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7Ci0Ja2ZyZWUobmV3X3hhdHRycyk7CiYjNDM7CWZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgJmd0OyAwOyB4YXR0cnMueGF0dHJfY291bnQtLSkKJiM0MzsJCWtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpOwomIzQzOwlrZnJlZSh4YXR0cnMueGF0dHJzKTsKIAlyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyICpwcmVmaXgpCiYjNDM7ewomIzQzOwlzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOwomIzQzOwl1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB4YXR0cnMtJmd0O3hhdHRyX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqbmFtZSA9IHhhdHRycy0mZ3Q7eGF0dHJzW2ldLm5hbWU7CiYjNDM7CiYjNDM7CQlpZiAobmFtZSAmYW1wOyZhbXA7ICFzdHJuY21wKG5hbWUsIHByZWZpeCwgcHJlZml4X2xlbikpCiYjNDM7CQkJbiYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqLwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5CiYjNDM7ICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3MKJiM0MzsgKiBAbHNtX2lkOiBMU01fSURfKiB2YWx1ZSBpZGVudGlmeWluZyB0aGUgY2FsbGluZyBMU00KJiM0MzsgKiBAbmFtZTogeGF0dHIgbmFtZSBzdWZmaXgKJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlCiYjNDM7ICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZQomIzQzOyAqCiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkKJiM0MzsgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEBuYW1lIGFuZCBAdmFsdWUuIENhbGxlcnMgY2FuIGludm9rZQomIzQzOyAqIHRoaXMgZnVuY3Rpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZSBjYWxsaW5nIExTTSYjMzk7cyBzbG90IGJ1ZGdldAomIzQzOyAqICAgICAgICAgaXMgZXhoYXVzdGVkLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZXJyb3JzLgomIzQzOyAqLwomIzQzO2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAomIzQzOwkJCSAgc2l6ZV90IHZhbHVlX2xlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4YXR0ciAqeGF0dHI7CiYjNDM7CXZvaWQgKnhhdHRyX3ZhbHVlOwomIzQzOwlzaXplX3QgbmFtZV9sZW47CiYjNDM7CiYjNDM7CWlmICgheGF0dHJzIHx8ICF4YXR0cnMtJmd0O3hhdHRycyB8fCAhbmFtZSB8fCAhdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiYjNDM7CWlmIChuYW1lX2xlbiA9PSAwIHx8IG5hbWVfbGVuICZndDsgWEFUVFJfTkFNRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiAmZ3Q7IFhBVFRSX1NJWkVfTUFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXN3aXRjaCAobHNtX2lkKSB7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CWNhc2UgTFNNX0lEX0JQRjoKJiM0MzsJCWlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgJmd0Oz0KJiM0MzsJCSAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKQomIzQzOwkJCXJldHVybiAtRU5PU1BDOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb21iaW5lIHhhdHRyIHZhbHVlICYjNDM7IG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi8KJiM0MzsJeGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiAmIzQzOyBuYW1lX2xlbiAmIzQzOyAxLCBHRlBfTk9XQUlUKTsKJiM0MzsJaWYgKCF4YXR0cl92YWx1ZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwltZW1jcHkoeGF0dHJfdmFsdWUsIHZhbHVlLCB2YWx1ZV9sZW4pOwomIzQzOwltZW1jcHkoeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuLCBuYW1lLCBuYW1lX2xlbik7CiYjNDM7CSgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwl4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwomIzQzOwlpZiAoIXhhdHRyKSB7CiYjNDM7CQlrZnJlZSh4YXR0cl92YWx1ZSk7CiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJfQomIzQzOwomIzQzOwl4YXR0ci0mZ3Q7dmFsdWUgPSB4YXR0cl92YWx1ZTsKJiM0MzsJeGF0dHItJmd0O25hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbjsKJiM0MzsJeGF0dHItJmd0O3ZhbHVlX2xlbiA9IHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlCiAgKiBAaW5vZGU6IHRoZSBpbm9kZQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjk2Miw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpOwogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CkBAIC0yOTkyLDcgJiM0MzsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJICAgICEoc2JzZWMtJmd0O2ZsYWdzICZhbXA7IFNCTEFCRUxfTU5UKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CXhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7CiAJaWYgKHhhdHRyKSB7CiAJCXJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLAogCQkJCQkJICAgJmFtcDtjb250ZXh0LCAmYW1wO2NsZW4pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05ODEsMTAgJiM0Mzs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsCiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCwKJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKIAkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKQogewotCXN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwogCiAJaWYgKCF4YXR0cikKIAkJcmV0dXJuIDA7CkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsCiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlCiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3QKICAqIEBxc3RyOiB1bnVzZWQKLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlcwotICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKQomIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnQKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSYjMzk7cyBubyBtZW1vcnkKICAqLwogc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTsKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpOwpAQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQkJdHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTsKIAotCQkJaWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LAotCQkJCVhBVFRSX1NNQUNLX1RSQU5TTVVURSwKLQkJCQlUUkFOU19UUlVFLAotCQkJCVRSQU5TX1RSVUVfU0laRQotCQkJKSkKJiM0MzsJCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywKJiM0MzsJCQkJCSBYQVRUUl9TTUFDS19UUkFOU01VVEUsCiYjNDM7CQkJCQkgVFJBTlNfVFJVRSwKJiM0MzsJCQkJCSBUUkFOU19UUlVFX1NJWkUpKQogCQkJCXJjID0gLUVOT01FTTsKIAkJfQogCX0KIAogCWlmIChyYyA9PSAwKQotCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsCi0JCQkgICAgWEFUVFJfU01BQ0tfU1VGRklYLAotCQkJICAgIGlzc3AtJmd0O3Nta19pbm9kZS0mZ3Q7c21rX2tub3duLAotCQkgICAgIHN0cmxlbihpc3NwLSZndDtzbWtfaW5vZGUtJmd0O3Nta19rbm93bikKLQkJKSkKJiM0MzsJCWlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLAomIzQzOwkJCQkgWEFUVFJfU01BQ0tfU1VGRklYLAomIzQzOwkJCQkgaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24sCiYjNDM7CQkJCSBzdHJsZW4oaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24pKSkKIAkJCXJjID0gLUVOT01FTTsKIGluc3RhbnRfaW5vZGU6CiAJaXNzcC0mZ3Q7c21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaAppbmRleCBhZTcxZTliNjkwNTE4Ni4uMjYzOWY5Zjk0MTk1NWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaApAQCAtOTIsNCAmIzQzOzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKIAkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrOwogZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhazsKIAomIzQzO3N0cnVjdCBsc21feGF0dHJzOwomIzQzO2V4dGVybiBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKJiM0MzsJCQkJY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhazsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYwppbmRleCA0M2EyNmVjNjlhOGUzNi4uMTBiZTBhYjkxZTcwNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogI2luY2x1ZGUgJiMzNDt0ZXN0X2dldF94YXR0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9mc3Zlcml0eS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaCYjMzQ7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3MmIzM0OzsKIApAQCAtMjY4LDYgJiM0MzsyNjksMTIzIEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZCkKIAlyZW1vdmUodGVzdGZpbGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDsKJiM0MzsJaW50IGZkID0gLTEsIGVycjsKJiM0MzsJY2hhciB2YWx1ZV9vdXRbNjRdOwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NfbmV3JiMzNDs7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX25ldywgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZV9maWxlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdCwgMCwgJiMzNDtpbml0X3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogaW5pdHhhdHRycyBwcmVwZW5kcyAmIzM0O3NlY3VyaXR5LiYjMzQ7IHRvIHRoZSBuYW1lLiAqLwomIzQzOwllcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsICYjMzQ7c2VjdXJpdHkuYnBmLnRlc3RfbGFiZWwmIzM0OywgdmFsdWVfb3V0LAomIzQzOwkJICAgICAgIHNpemVvZih2YWx1ZV9vdXQpKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFTk9EQVRBKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXG4mIzM0OywKJiM0MzsJCSAgICAgICBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9HRShlcnIsIDAsICYjMzQ7Z2V0eGF0dHImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7eGF0dHJfdmFsdWUpLCAmIzM0O3hhdHRyX3NpemUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShzdHJuY21wKHZhbHVlX291dCwgJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OywKJiM0MzsJCQkgIHNpemVvZigmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMCYjMzQ7KSksIDAsCiYjNDM7CQkgICYjMzQ7eGF0dHJfdmFsdWUmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShmZCk7CiYjNDM7CXRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTsKJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX25ldyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovCiYjNDM7I2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0CiYjNDM7ICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLgomIzQzOyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307CiYjNDM7CWNvbnN0IGNoYXIgKnRlc3RmaWxlX3Nsb3QgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdCYjMzQ7OwomIzQzOwlpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDsKJiM0MzsJaW50IGksIGZkID0gLTE7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0Oz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuKCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgJiMzNDtvcGVuJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJc25wcmludGYoc2tlbFtpXS0mZ3Q7cm9kYXRhLSZndDt4YXR0cl9uYW1lLAomIzQzOwkJCSBzaXplb2Yoc2tlbFtpXS0mZ3Q7cm9kYXRhLSZndDt4YXR0cl9uYW1lKSwgJiMzNDticGYubGFiZWxfJWQmIzM0OywKJiM0MzsJCQkgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyh0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2xvYWQoc2tlbFtpXSksICYjMzQ7bG9hZCYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXNrZWxbaV0tJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwomIzQzOwomIzQzOwkJbGlua1tpXSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWxbaV0tJmd0O3Byb2dzLnRlc3RfaW5pdF9pbm9kZV94YXR0cik7CiYjNDM7CQlpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovCiYjNDM7CWZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlX2ZpbGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhhY3RseSBJTklUX0lOT0RFX1hBVFRSX01BWCBwcm9ncmFtcyBjbGFpbSBhIHNsb3Q7IHRoZSBwcm9ncmFtIHBhc3QKJiM0MzsJICogdGhlIGJ1ZGdldCBnZXRzIC1FTk9TUEMuIFRoZSBvcmRlciBpbiB3aGljaCBwcm9ncmFtcyBydW4gaXMgbm90CiYjNDM7CSAqIGd1YXJhbnRlZWQsIHNvIGNvdW50IHJlc3VsdHMgaW5zdGVhZCBvZiBpbmRleGluZy4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0Oz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcmVzID0gc2tlbFtpXS0mZ3Q7ZGF0YS0mZ3Q7aW5pdF9yZXN1bHQ7CiYjNDM7CiYjNDM7CQlpZiAocmVzID09IDApCiYjNDM7CQkJb2smIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAocmVzID09IC1FTk9TUEMpCiYjNDM7CQkJbm9zcGMmIzQzOyYjNDM7OwomIzQzOwkJZWxzZQomIzQzOwkJCW90aGVyJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCAmIzM0O3Nsb3RzX3dpdGhpbl9idWRnZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShub3NwYywgMSwgJiMzNDtzbG90X292ZXJfYnVkZ2V0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEob3RoZXIsIDAsICYjMzQ7dW5leHBlY3RlZF9yZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pOwomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pOwomIzQzOwl9CiYjNDM7CXJlbW92ZSh0ZXN0ZmlsZV9zbG90KTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpCiB7CiAJLyogTWF0Y2hlcyB4YXR0cl9uYW1lcyBpbiBwcm9ncy90ZXN0X2dldF94YXR0ci5jICovCkBAIC0yODgsNCAmIzQzOzQwNiwxMCBAQCB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpCiAKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2ZzdmVyaXR5JiMzNDspKQogCQl0ZXN0X2ZzdmVyaXR5KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW5pdF9pbm9kZV94YXR0ciYjMzQ7KSkKJiM0MzsJCXRlc3RfaW5pdF9pbm9kZV94YXR0cigpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCYjMzQ7KSkKJiM0MzsJCXRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNhYWRlNTNiODdlM2EzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jCkBAIC0wLDAgJiM0MzsxLDMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfa2Z1bmNzLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztfX3UzMiBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBpbml0X3Jlc3VsdCA9IC0xOwomIzQzOwomIzQzO2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSAmIzM0O2JwZi50ZXN0X2xhYmVsJiMzNDs7CiYjNDM7Y2hhciB4YXR0cl92YWx1ZVtdID0gJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyOwomIzQzOwlfX3UzMiBwaWQ7CiYjNDM7CiYjNDM7CXBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwlpZiAocGlkICE9IG1vbml0b3JlZF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwlpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBCUEYgeGF0dHIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IGludGVyZXN0aW5nIGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCBpdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgb24gYSBuZXdseSBjcmVhdGVkIGlub2RlLCBhbGwgdGhyb3VnaCB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIFRoaXMgc2VlbXMgbGlrZSBhIHBvd2VyZnVsIHRvb2wgZm9yIGVuaGFuY2VkIHNlY3VyaXR5IGVuZm9yY2VtZW50IGF0IGlub2RlIGNyZWF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBwYXRjaCByZXdyaXRlcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byBkZWFsIHdpdGggYHN0cnVjdCBsc21feGF0dHJzYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYHN0cnVjdCB4YXR0cmAgc2V0dXAsIGFuZCB1cGRhdGVzIHZhcmlvdXMgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIHRvIHdvcmsgd2l0aCB0aGUgdXBkYXRlZCBzaWduYXR1cmUuIEl0IGFsc28gbG9va3MgbGlrZSBhIG5ldyBmdW5jdGlvbiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCBoYXMgYmVlbiBhZGRlZCBmb3IgYWRkaW5nIHRoZSB4YXR0ciB0byB0aGlzIG5ldyBzdHJ1Y3QuIFRoaXMgY2hhbmdlIGFsc28gaW5jbHVkZXMgdGhlIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgQlBGIGtmdW5jLgoKVGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgdGhlIGtleSBhc3BlY3QsIHJlYWxseS4gQSBCUEYgcHJvZ3JhbSBsb2FkZWQgaW50byB0aGUga2VybmVsLCBhdHRhY2hpbmcgdG8gdGhlIGBsc20vaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vaywgY291bGQgdGhlbiBsZXZlcmFnZSB0aGlzIGBicGZfaW5pdF9pbm9kZV94YXR0cmAga2Z1bmMuIFRoaXMgbWFrZXMgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGVhc2lseSBhY2Nlc3NpYmxlLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIENsZWFybHksIGBDT05GSUdfQlBGX0xTTWAgaXMgYSBtdXN0LWhhdmUsIGFuZCBgQ09ORklHX1NFQ1VSSVRZYCBpcyBlc3NlbnRpYWwsIHNpbmNlIGl0IGludm9sdmVzIExTTSBob29rcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgcmVsYXRlZCB0byBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYCwgYW5kIGBDT05GSUdfRVZNYC4gVGhlIGNvcmUgbG9naWMgaXMgbGlrZWx5IGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhbmQgYGZzL2JwZl9mc19rZnVuY3MuY2AuIEl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IGBmcy9icGZfZnNfa2Z1bmNzLmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIGFzIHRoYXQgbWFrZXMgc2Vuc2UuCgpJJiMzOTtsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgdW5pdCB0ZXN0cyBwcm92aWRlZCBpbiB0aGUgYHNlbGZ0ZXN0c2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYGZzX2tmdW5jcy5jYCBhbmQgYHRlc3RfaW5pdF9pbm9kZV94YXR0ci5jYCDigJMgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGlzIHdvcmtzIGFuZCB3aGF0IHNvcnQgb2Ygc2NlbmFyaW9zIGFyZSBiZWluZyB0ZXN0ZWQuIFRoYXQmIzM5O2xsIGJlIGEga2V5IGRhdGEgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZzX2tmdW5jcy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEyOT1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVx0XHQmIzQzOz0gem9uZWZzL1xuZnMvTWFrZWZpbGU6MTMwOm9iai0kKENPTkZJR19CUEZfTFNNKVx0XHQmIzQzOz0gYnBmX2ZzX2tmdW5jcy5vXG5mcy9NYWtlZmlsZS0xMzEtb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXHQmIzQzOz0gcmVzY3RybC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE1NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBCUEYgTFNNIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX0JQRl9MU01gIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBicm9hZGVyIHNlY3VyaXR5IGxhbmRzY2FwZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYW5kIHRoZSBMU00gaW50ZWdyYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIEJQRiBob29rIHNob3VsZCBiZS4gSSYjMzk7bGwgYW5hbHl6ZSBob3cgdGhlIEJQRiBsb2dpYyBpcyBiZWluZyBpbnZva2VkIGluIHRoZSB4YXR0ciBhZGRpdGlvbiBwYXRoLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvbiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzk3LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzk4OiAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5XG5zZWN1cml0eS9zZWN1cml0eS5jLTEzOTktICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3Ncbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE0MTEtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE0MTI6aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNDEzLVx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJhY3Rpb24gQmV0d2VlbiBMU00gYW5kIEJQRiBFeHRlbmRlZCBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVyYWN0IHdpdGggQlBGLWV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgZnVuY3Rpb24uIEkga25vdyB0aGF0IGxpdmVzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuIFRoZSByZWxhdGVkIGtmdW5jLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCByZXNpZGVzIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLgoKTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgY29tZSBpbnRvIHBsYXkgaGVyZS4gT2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYW55IEJQRiB1c2FnZSwgYnV0IGlmIEkmIzM5O20gZGVhbGluZyB3aXRoIExTTSBhbmQgQlBGIHRvZ2V0aGVyLCBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIFNpbmNlIGBDT05GSUdfQlBGX0xTTWAgcHJvYmFibHkgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBpbXBsaWVzIGl0KSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBDT05GSUdfQlBGX0xTTWAmIzM5O3MgZGVmaW5pdGlvbiBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfTFNNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gTFNNIEludGVncmF0aW9uIHdpdGggQlBGKioKClJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIEJQRiBhbmQgTFNNIGludGVncmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBCUEZfTFNNYCBhcmUgZGVmaW5lZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGEgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbC4gS2NvbmZpZyBmaWxlcyBhcmUgdGhlIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGV5JiMzOTtyZSB0aGUgc291cmNlIG9mIHRydXRoIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHNlYXJjaGluZyBmb3IgYEJQRl9MU01gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIGZpbGVzIGRlZmluZSBpdCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIEJQRl9MU00qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9MU01gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBub3QganVzdCB0YWtlIHRoaXMgYXQgZmFjZSB2YWx1ZSwgYnV0IGluc3RlYWQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGxpa2UgYSBwcm9wZXIgaW52ZXN0aWdhdGlvbi4gV2hlcmUgZG9lcyB0aGlzIGxpdmU/IFdoYXQgb3RoZXIgc3Vic3lzdGVtcyBkb2VzIGl0IHJlbHkgdXBvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyB0aGlzOyBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBib3R0bGVuZWNrcy4gQSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVncmF0ZSBpdC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG1hcHBpbmcgaXQgYWxsIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJQRl9MU01cbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAgOTU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgOTY6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTc6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuICA5ODpcdFx0aGVscFxuICA5OTpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTAwOlx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gMTAzOlx0XG4gMTA0Olx0ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MzAKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogODIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIExTTSB4YXR0ciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEJQRl9MU01gIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGdvaW5nIHRvIGFmZmVjdCB0aGluZ3MsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBhYm91dCBgQ09ORklHX1NFQ1VSSVRZYD8gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGNvZGUgdG8gY29tcGlsZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gQW5kIHdoYXQgYWJvdXQgdGhlIFNFTGludXgsIFNNQUNLLCBhbmQgRVZNIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYCwgYW5kIGBDT05GSUdfRVZNYD8gVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgdGhlbSB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlLCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHNob3VsZCBzdGlsbCB3b3JrLCBldmVuIGlmIHRob3NlIGFyZSAqbm90KiBlbmFibGVkLCBhcyBsb25nIGFzIGBDT05GSUdfQlBGX0xTTWAgaXMgZW5hYmxlZC4KClJpZ2h0LCBzbyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2sgaXMgY2FsbGVkIGJ5IGZpbGVzeXN0ZW0gY29kZSBsaWtlIGBleHQ0YCBvciBgYnRyZnNgIHdoZW4gYSBuZXcgaW5vZGUgaXMgY3JlYXRlZC4gSWYgSSYjMzk7bSBnb2luZyB0byBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIEkmIzM5O20gcHJldHR5IHN1cmUgSSBuZWVkIHRvIGZvY3VzIG9uIGVuYWJsaW5nIGBDT05GSUdfQlBGX0xTTWAuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIHNlZWluZyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIGZ1bmN0aW9ucy4gSSBzZWUgYGxzbV9nZXRfeGF0dHJfc2xvdGAgd2hpY2ggaXMgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQgSSBhbHNvIHNlZSBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YCBhcmUgYXZhaWxhYmxlIGFzIHdlbGwuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgaW1wYWN0IHRoaXMuIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19CUEZfTFNNYCBpcyB0aGUgbWFpbiBvbmUuIEkgKnRoaW5rKiBgQ09ORklHX1NFQ1VSSVRZYCBpcyByZXF1aXJlZCBmb3IgYEJQRl9MU01gLCBzbyB0aGF0IGlzIHByb2JhYmx5IHRoZSBtYWluIGRlcGVuZGVuY3kuCgpMZXQgbWUgZ28gYmFjayB0byB0aGUgcGF0Y2ggYWdhaW4uCgpgYGBjCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKQpgYGAKYGBgYwomIzQzO2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAomIzQzOwkJCSAgc2l6ZV90IHZhbHVlX2xlbikKYGBgCmBgYGMKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKIAkJCQkgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKQpgYGAKClRoZSBrZXkgZm9jdXMgaXMgb24gdGhvc2UgbmV3IHNpZ25hdHVyZXMuCgpTbywganVzdCB0byBzdW1tYXJpemU6CgoqICAgKipGb2N1cyBTeW1ib2xzKio6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBhbmQgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLgoqICAgKipDb25maWdzKio6IGBCUEZfTFNNYCAod2l0aCBhbiBpbXBsaWVkIGRlcGVuZGVuY3kgb24gYFNFQ1VSSVRZYCkuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYWxsb3dpbmcgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIG9uIG5ld2x5IGNyZWF0ZWQgaW5vZGVzIGR1cmluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIEl0IGFsc28gbW9kaWZpZXMgdGhlIExTTSBob29rJiMzOTtzIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBhY3R1YWxseSBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIHRoZSB4YXR0ci4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgYm90aCB0aGUga2VybmVsJiMzOTtzIExTTSBhbmQgQlBGIHN1YnN5c3RlbXMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGEgQlBGIHByb2dyYW0gYW5kIGNyZWF0aW5nIGZpbGVzLCB0aGVyZWZvcmUsIGZ1enppbmcgd2lsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmMsIGFuZCB0aG9zZSBtb2RpZmllZCBzZWN1cml0eSBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSAtLSB5ZXMsIGl0JiMzOTtzIGludm9rZWQgYnkgZmlsZXN5c3RlbXMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLCB3aGljaCBpcyBnb29kLiBJcyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCByZWFjaGFibGU/IFllcywgdGhyb3VnaCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLgoKRG8gSSBuZWVkIG90aGVyIGNvbmZpZ3VyYXRpb25zPyBQZXJoYXBzLCBgQ09ORklHX0VWTWAsIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIG9yIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgPyBUaGV5IGFyZSBtb2RpZmllZCwgeWVzLCBidXQgdGhlICpjb3JlKiBsb2dpYyBJIG5lZWQgdG8gZnV6eiBpcyB0aGUgQlBGIGtmdW5jIGFuZCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgd2hpY2ggbWVhbnMgZW5hYmxpbmcgYEJQRl9MU01gICpzaG91bGQqIGJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGUgbmV3IGZlYXR1cmUgcHJvcGVybHkuCgpBbHJpZ2h0LCB0aW1lIHRvIHVzZSB0aGF0IGBzZXQtcmVzdWx0c2AgdG9vbC4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjMzLjAzMTA1Njc3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTY0Mjg2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5pdF9pbm9kZV94YXR0clwiLFxuICAgIFwic2VjdXJpdHlfbHNteGF0dHJfYWRkXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB3aGljaCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIG9uIGEgbmV3IGlub2RlIGR1cmluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIEl0IG1vZGlmaWVzIHRoZSBMU00gaG9vayBzaWduYXR1cmUgYW5kIGltcGxlbWVudHMgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgdG8gaGFuZGxlIHRoZSB4YXR0ciBhZGRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgTFNNIGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSBhbmQgY3JlYXRpbmcgZmlsZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmMgYW5kIHRoZSBtb2RpZmllZCBzZWN1cml0eSBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjMzLjAzMTA2NTI1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NzY3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2RiOGI0MmZjZjZmNmE1MjI4OTgzOGI0YmVlYTU5N2QzZjc4NmU5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjMyOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbmluZGV4IDc2OGFjYTJkYzBmMDM0Li5hZDAwMjVmMjI2NGE4YiAxMDA2NDRcXG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcXG4rKysgYi9mcy9icGZfZnNfa2Z1bmNzLmNcXG5AQCAtMTEsNyArMTEsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjdXJpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhdHRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2xzbS5oXFx1MDAzZVxcbiBcXG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbiBcXG5AQCAtMzc0LDYgKzM3NiwzOSBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XFxuKyAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XFxuKyAqIEBuYW1lX19zdHI6IHhhdHRyIG5hbWUgKGUuZy4sIFxcXCJicGYuZmlsZV9sYWJlbFxcXCIpXFxuKyAqIEB2YWx1ZV9wOiBkeW5wdHIgY29udGFpbmluZyB0aGUgeGF0dHIgdmFsdWVcXG4rICpcXG4rICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS5cXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICp2YWx1ZV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXZhbHVlX3A7XFxuK1xcdGNvbnN0IHZvaWQgKnZhbHVlO1xcbitcXHR1MzIgdmFsdWVfbGVuO1xcbitcXG4rXFx0aWYgKCFuYW1lX19zdHIpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLFxcbitcXHRcXHQgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0dmFsdWVfbGVuID0gX19icGZfZHlucHRyX3NpemUodmFsdWVfcHRyKTtcXG4rXFx0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XFxuK1xcdGlmICghdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCh4YXR0cnMsIExTTV9JRF9CUEYsIG5hbWVfX3N0ciwgdmFsdWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdmFsdWVfbGVuKTtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4gXFxuIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXFxuQEAgLTM4NSw2ICs0MjAsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9maWxlX3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWFsX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyKVxcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG5pbmRleCBkZGEyNzJkNzhmMDEzZi4uMzc0YzUwODAxYThjNmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxcbkBAIC0yMSw2ICsyMSw5IEBAIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHNtX2hvb2tfZGVmcy5oXFx1MDAzZVxcbiAjdW5kZWYgTFNNX0hPT0tcXG4gXFxuKy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqL1xcbisjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxcbitcXG4gc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2Ige1xcbiBcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgX19yY3UgKnN0b3JhZ2U7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuaW5kZXggOTEzZjQ1NzNiMjAzOGUuLjUyOGYzNjBmMzMwOGRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuQEAgLTEyLDYgKzEyLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVncml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgveGF0dHIuaFxcdTAwM2VcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzO1xcbitcXG4gI2lmZGVmIENPTkZJR19FVk1cXG4gZXh0ZXJuIGludCBldm1fc2V0X2tleSh2b2lkICprZXksIHNpemVfdCBrZXlsZW4pO1xcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuQEAgLTIxLDggKzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcXG4gXFx0XFx0IGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTtcXG4gaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHQgICAgaW50ICp4YXR0cl9jb3VudCk7XFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpO1xcbiBleHRlcm4gYm9vbCBldm1fcmV2YWxpZGF0ZV9zdGF0dXMoY29uc3QgY2hhciAqeGF0dHJfbmFtZSk7XFxuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcXG4gZXh0ZXJuIGludCBldm1fcmVhZF9wcm90ZWN0ZWRfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTggKmJ1ZmZlcixcXG5AQCAtNjMsOCArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG5pbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC0xMTYsOCArMTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSlcXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdCBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbitcXHQgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcXG5pbmRleCBiNGY4Y2FkNTNkZGIwMy4uN2FmZTA2YThkNGM2YzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcXG5AQCAtMjAwLDIwICsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiAvKipcXG4gICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4XFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEBjdHg6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuICAqXFxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXFxuLSAqIGFuZCBpbmNyZW1lbnQgQHhhdHRyX2NvdW50LlxcbisgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXFx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cXG4rICogeGF0dHIsIGFuZCBpbmNyZW1lbnQgQGN0eC1cXHUwMDNleGF0dHJfY291bnQuXFxuICAqXFxuLSAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAeGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXFx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseSgheGF0dHJzKSlcXG4rXFx0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cXHUwMDNleGF0dHJzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdHJldHVybiBcXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xcbitcXHRyZXR1cm4gXFx1MDAyNmN0eC1cXHUwMDNleGF0dHJzW2N0eC1cXHUwMDNleGF0dHJfY291bnQrK107XFxuIH1cXG4gXFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmODguLjY0N2Y3Yjg4MzU4YjJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbkBAIC02OCw2ICs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XFxuIHN0cnVjdCB3YXRjaF9ub3RpZmljYXRpb247XFxuIHN0cnVjdCBsc21fY3R4O1xcbiBcXG4rc3RydWN0IGxzbV94YXR0cnMge1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4rXFx0dW5zaWduZWQgaW50IHhhdHRyX2NvdW50O1xcbit9O1xcbitcXG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXFxuICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MFxcbiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqL1xcbkBAIC00MDEsNiArNDA2LDkgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbiBcXHRcXHRcXHRcXHQgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKTtcXG4raW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxcbitcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbitcXHRcXHRcXHQgIHNpemVfdCB2YWx1ZV9sZW4pO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xcbkBAIC04OTUsNiArOTAzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0c2l6ZV90IHZhbHVlX2xlbilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG5pbmRleCA3Yjk4ZjVkMWUyYmU4My4uOGY4YzNkZTMwMzVmMDEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9icGYvaG9va3MuY1xcbkBAIC0zMyw2ICszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxcbiBcXG4gc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2IpLFxcbitcXHQubGJzX3hhdHRyX2NvdW50ID0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyxcXG4gfTtcXG4gXFxuIERFRklORV9MU00oYnBmKSA9IHtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXFxuaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXFxuICAqL1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqbHNtX3hhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXZtX3hhdHRyICp4YXR0cl9kYXRhO1xcbiBcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4gXFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cXHUwMDNleGF0dHJzIDogTlVMTDtcXG4gXFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFxcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XFxuIFxcdC8qXFxuIFxcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXFxuIFxcdCAqIHhhdHRyIHNsb3QuXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjI2MWY2OGUxN2NmZGEwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBwcl9mbXQoZm10KSBcXFwiTFNNOiBcXFwiIGZtdFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2xzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGNhY2hlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG5AQCAtMTMzMyw4ICsxMzM0LDggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XFxuLVxcdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XFxuLVxcdGludCByZXQgPSAtRU9QTk9UU1VQUCwgeGF0dHJfY291bnQgPSAwO1xcbitcXHRzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTtcXG4rXFx0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTEzNDQsMTUgKzEzNDUsMTUgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcbiBcXHRpZiAoaW5pdHhhdHRycykge1xcbiBcXHRcXHQvKiBBbGxvY2F0ZSArMSBhcyB0ZXJtaW5hdG9yLiAqL1xcbi1cXHRcXHRuZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXFxuLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAoIW5ld194YXR0cnMpXFxuK1xcdFxcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcXG4rXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xcbitcXHRcXHRpZiAoIXhhdHRycy54YXR0cnMpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbiBcXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xcbi1cXHRcXHRyZXQgPSBzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cl9jb3VudCk7XFxuK1xcdFxcdHJldCA9IHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnhhdHRycyk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0LypcXG5AQCAtMTM2NCwxOCArMTM2NSwxMDEgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xcbi1cXHRpZiAoIXhhdHRyX2NvdW50KVxcbitcXHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcXG4rXFx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7XFxuIG91dDpcXG4tXFx0Zm9yICg7IHhhdHRyX2NvdW50IFxcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcXG4tXFx0XFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcXG4tXFx0a2ZyZWUobmV3X3hhdHRycyk7XFxuK1xcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcXG4rXFx0XFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XFxuK1xcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xcbiBcXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rc3RhdGljIHVuc2lnbmVkIGludCBsc21feGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKnByZWZpeClcXG4re1xcbitcXHRzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpO1xcbitcXHR1bnNpZ25lZCBpbnQgaSwgbiA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgeGF0dHJzLVxcdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtXFx1MDAzZXhhdHRyc1tpXS5uYW1lO1xcbitcXG4rXFx0XFx0aWYgKG5hbWUgXFx1MDAyNlxcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcXG4rXFx0XFx0XFx0bisrO1xcbitcXHR9XFxuK1xcdHJldHVybiBuO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitcXG4rLyoqXFxuKyAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5XFxuKyAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuKyAqIEBsc21faWQ6IExTTV9JRF8qIHZhbHVlIGlkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIExTTVxcbisgKiBAbmFtZTogeGF0dHIgbmFtZSBzdWZmaXhcXG4rICogQHZhbHVlOiB4YXR0ciB2YWx1ZVxcbisgKiBAdmFsdWVfbGVuOiBsZW5ndGggb2YgQHZhbHVlXFxuKyAqXFxuKyAqIENsYWltIGFuIHhhdHRyIHNsb3QgaW4gQHhhdHRycyBvbiBiZWhhbGYgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XFxuKyAqIEBsc21faWQgYW5kIGZpbGwgaXQgd2l0aCBhIGNvcHkgb2YgQG5hbWUgYW5kIEB2YWx1ZS4gQ2FsbGVycyBjYW4gaW52b2tlXFxuKyAqIHRoaXMgZnVuY3Rpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHQuXFxuKyAqXFxuKyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJ3Mgc2xvdCBidWRnZXRcXG4rICogICAgICAgICBpcyBleGhhdXN0ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBlcnJvcnMuXFxuKyAqL1xcbitpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXFxuK1xcdFxcdFxcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXFxuK1xcdFxcdFxcdCAgc2l6ZV90IHZhbHVlX2xlbilcXG4re1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xcbitcXHR2b2lkICp4YXR0cl92YWx1ZTtcXG4rXFx0c2l6ZV90IG5hbWVfbGVuO1xcbitcXG4rXFx0aWYgKCF4YXR0cnMgfHwgIXhhdHRycy1cXHUwMDNleGF0dHJzIHx8ICFuYW1lIHx8ICF2YWx1ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTtcXG4rXFx0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXFx1MDAzZSBYQVRUUl9OQU1FX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gXFx1MDAzZSBYQVRUUl9TSVpFX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzd2l0Y2ggKGxzbV9pZCkge1xcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rXFx0Y2FzZSBMU01fSURfQlBGOlxcbitcXHRcXHRpZiAobHNtX3hhdHRyc191c2VkKHhhdHRycywgWEFUVFJfQlBGX0xTTV9TVUZGSVgpIFxcdTAwM2U9XFxuK1xcdFxcdCAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cXG4rXFx0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiArIG5hbWVfbGVuICsgMSwgR0ZQX05PV0FJVCk7XFxuK1xcdGlmICgheGF0dHJfdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuLCBuYW1lLCBuYW1lX2xlbik7XFxuK1xcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gKyBuYW1lX2xlbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcXG4rXFx0aWYgKCF4YXR0cikge1xcbitcXHRcXHRrZnJlZSh4YXR0cl92YWx1ZSk7XFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHR9XFxuK1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWUgPSB4YXR0cl92YWx1ZTtcXG4rXFx0eGF0dHItXFx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuO1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWVfbGVuID0gdmFsdWVfbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlXFxuICAqIEBpbm9kZTogdGhlIGlub2RlXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4gXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XFxuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIShzYnNlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQkxBQkVMX01OVCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXHRpZiAoeGF0dHIpIHtcXG4gXFx0XFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjb250ZXh0LCBcXHUwMDI2Y2xlbik7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbkBAIC05ODEsMTAgKzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi14YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbiBcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXG4gXFx0aWYgKCF4YXR0cilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTEwMDMsMTQgKzEwMDMsMTMgQEAgeGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXFxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxcbiAgKiBAcXN0cjogdW51c2VkXFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnRcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUncyBubyBtZW1vcnlcXG4gICovXFxuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiB7XFxuIFxcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcXG4gXFx0c3RydWN0IGlub2RlX3NtYWNrICogY29uc3QgaXNzcCA9IHNtYWNrX2lub2RlKGlub2RlKTtcXG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdFxcdHRyYW5zZmxhZyA9IFNNS19JTk9ERV9UUkFOU01VVEU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXFxuLVxcdFxcdFxcdFxcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRV9TSVpFXFxuLVxcdFxcdFxcdCkpXFxuK1xcdFxcdFxcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxcbitcXHRcXHRcXHRcXHRcXHQgVFJBTlNfVFJVRSxcXG4rXFx0XFx0XFx0XFx0XFx0IFRSQU5TX1RSVUVfU0laRSkpXFxuIFxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmMgPT0gMClcXG4tXFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxcbi1cXHRcXHRcXHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxcbi1cXHRcXHRcXHQgICAgaXNzcC1cXHUwMDNlc21rX2lub2RlLVxcdTAwM2VzbWtfa25vd24sXFxuLVxcdFxcdCAgICAgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKVxcbi1cXHRcXHQpKVxcbitcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcXG4rXFx0XFx0XFx0XFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcXG4rXFx0XFx0XFx0XFx0IGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duLFxcbitcXHRcXHRcXHRcXHQgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKSkpXFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gaW5zdGFudF9pbm9kZTpcXG4gXFx0aXNzcC1cXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuQEAgLTkyLDQgKzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcXG4gZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhaztcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzO1xcbitleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbmluZGV4IDQzYTI2ZWM2OWE4ZTM2Li4xMGJlMGFiOTFlNzA2MSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXFxcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcXFwiO1xcbiBcXG5AQCAtMjY4LDYgKzI2OSwxMjMgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxcbiBcXHRyZW1vdmUodGVzdGZpbGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTEsIGVycjtcXG4rXFx0Y2hhciB2YWx1ZV9vdXRbNjRdO1xcbitcXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcXFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcXFwiO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZV9maWxlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0LCAwLCBcXFwiaW5pdF9yZXN1bHRcXFwiKTtcXG4rXFxuK1xcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXFxcInNlY3VyaXR5LlxcXCIgdG8gdGhlIG5hbWUuICovXFxuK1xcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXFxcInNlY3VyaXR5LmJwZi50ZXN0X2xhYmVsXFxcIiwgdmFsdWVfb3V0LFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFxcXCJnZXR4YXR0clxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXhhdHRyX3ZhbHVlKSwgXFxcInhhdHRyX3NpemVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIixcXG4rXFx0XFx0XFx0ICBzaXplb2YoXFxcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFxcXCIpKSwgMCxcXG4rXFx0XFx0ICBcXFwieGF0dHJfdmFsdWVcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xcbit9XFxuK1xcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xcbisjZGVmaW5lIElOSVRfSU5PREVfWEFUVFJfTUFYIDRcXG4rXFxuKy8qXFxuKyAqIFByb2dyYW1zIG1heSBhdHRhY2ggdG8gaW5vZGVfaW5pdF9zZWN1cml0eSB3aXRob3V0IGFuIGF0dGFjaC10aW1lIGxpbWl0LCBidXRcXG4rICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxcbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFxcXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcXFwiO1xcbitcXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcXG4rXFx0aW50IGksIGZkID0gLTE7XFxuK1xcbitcXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXFxcIm9wZW5cXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRzbnByaW50Zihza2VsW2ldLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZXhhdHRyX25hbWUsXFxuK1xcdFxcdFxcdCBzaXplb2Yoc2tlbFtpXS1cXHUwMDNlcm9kYXRhLVxcdTAwM2V4YXR0cl9uYW1lKSwgXFxcImJwZi5sYWJlbF8lZFxcXCIsXFxuK1xcdFxcdFxcdCBpKTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXFxcImxvYWRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRza2VsW2ldLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFxuK1xcdFxcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVxcdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVfZmlsZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0aGUgcHJvZ3JhbSBwYXN0XFxuK1xcdCAqIHRoZSBidWRnZXQgZ2V0cyAtRU5PU1BDLiBUaGUgb3JkZXIgaW4gd2hpY2ggcHJvZ3JhbXMgcnVuIGlzIG5vdFxcbitcXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0aW50IHJlcyA9IHNrZWxbaV0tXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0O1xcbitcXG4rXFx0XFx0aWYgKHJlcyA9PSAwKVxcbitcXHRcXHRcXHRvaysrO1xcbitcXHRcXHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcXG4rXFx0XFx0XFx0bm9zcGMrKztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvdGhlcisrO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCBcXFwic2xvdHNfd2l0aGluX2J1ZGdldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEobm9zcGMsIDEsIFxcXCJzbG90X292ZXJfYnVkZ2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShvdGhlciwgMCwgXFxcInVuZXhwZWN0ZWRfcmVzdWx0XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShsaW5rW2ldKTtcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pO1xcbitcXHR9XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9zbG90KTtcXG4rfVxcbitcXG4gdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxcbiB7XFxuIFxcdC8qIE1hdGNoZXMgeGF0dHJfbmFtZXMgaW4gcHJvZ3MvdGVzdF9nZXRfeGF0dHIuYyAqL1xcbkBAIC0yODgsNCArNDA2LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcXG4gXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmc3Zlcml0eVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2ZzdmVyaXR5KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdF9pbm9kZV94YXR0clxcXCIpKVxcbitcXHRcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHIoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXRcXFwiKSlcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYWFkZTUzYjg3ZTNhM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfa2Z1bmNzLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK19fdTMyIG1vbml0b3JlZF9waWQ7XFxuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xcbitcXG4rY29uc3QgY2hhciB4YXR0cl9uYW1lWzE2XSA9IFxcXCJicGYudGVzdF9sYWJlbFxcXCI7XFxuK2NoYXIgeGF0dHJfdmFsdWVbXSA9IFxcXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcXFwiO1xcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfaW5pdF9zZWN1cml0eVxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIHZhbHVlX3B0cjtcXG4rXFx0X191MzIgcGlkO1xcbitcXG4rXFx0cGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG4rXFx0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFxcdTAwMjZ2YWx1ZV9wdHIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6MzMuNTYxNDMyMjc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAzMzkwMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIExTTSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGEgQlBGIHByb2dyYW0gYW5kIGNyZWF0aW5nIGZpbGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jIGFuZCB0aGUgbW9kaWZpZWQgc2VjdXJpdHkgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdkYjhiNDJmY2Y2ZjZhNTIyODk4MzhiNGJlZWE1OTdkM2Y3ODZlOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjMyOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5pbmRleCA3NjhhY2EyZGMwZjAzNC4uYWQwMDI1ZjIyNjRhOGIgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTExLDcgKzExLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG5AQCAtMzc0LDYgKzM3NiwzOSBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBkX3JlYWxfaW5vZGUoZGVudHJ5KTtcbiB9XG4gXG4rLyoqXG4rICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG4rICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcImJwZi5maWxlX2xhYmVsXCIpXG4rICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZVxuKyAqXG4rICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4rXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xuK1x0Y29uc3Qgdm9pZCAqdmFsdWU7XG4rXHR1MzIgdmFsdWVfbGVuO1xuK1xuK1x0aWYgKCFuYW1lX19zdHIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCxcbitcdFx0ICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XG4rXHR2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTtcbitcdGlmICghdmFsdWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCh4YXR0cnMsIExTTV9JRF9CUEYsIG5hbWVfX3N0ciwgdmFsdWUsXG4rXHRcdFx0XHQgICAgIHZhbHVlX2xlbik7XG4rfVxuK1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zODUsNiArNDIwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuaW5kZXggZGRhMjcyZDc4ZjAxM2YuLjM3NGM1MDgwMWE4YzZkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5AQCAtMjEsNiArMjEsOSBAQCBleHRlcm4gYm9vbCBicGZfbHNtX2luaXRpYWxpemVkIF9fcm9fYWZ0ZXJfaW5pdDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sc21faG9va19kZWZzLmhcdTAwM2VcbiAjdW5kZWYgTFNNX0hPT0tcbiBcbisvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cbisjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxuK1xuIHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iIHtcbiBcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSBfX3JjdSAqc3RvcmFnZTtcbiB9O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5pbmRleCA5MTNmNDU3M2IyMDM4ZS4uNTI4ZjM2MGYzMzA4ZGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V2bS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5AQCAtMTIsNiArMTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVncml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuK3N0cnVjdCBsc21feGF0dHJzO1xuK1xuICNpZmRlZiBDT05GSUdfRVZNXG4gZXh0ZXJuIGludCBldm1fc2V0X2tleSh2b2lkICprZXksIHNpemVfdCBrZXlsZW4pO1xuIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC0yMSw4ICsyMyw4IEBAIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcbiBcdFx0IGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTtcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudCk7XG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTtcbiBleHRlcm4gYm9vbCBldm1fcmV2YWxpZGF0ZV9zdGF0dXMoY29uc3QgY2hhciAqeGF0dHJfbmFtZSk7XG4gZXh0ZXJuIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2lmX2VuYWJsZWQoY29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsXG5AQCAtNjMsOCArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgIGludCAqeGF0dHJfY291bnQpXG4rXHRcdFx0XHRcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3NzAuLjViMmRlNzg2NWNlODFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTE2LDggKzExNiw4IEBAIExTTV9IT09LKGludCwgMCwgaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KVxuIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbkBAIC0yMDAsMjAgKzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiAvKipcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcbi0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnNcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXG4rICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiAgKlxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXG4rICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAY3R4LVx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cbisgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVx1MDAzZXhhdHRyX2NvdW50LlxuICAqXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAY3R4LVx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICAgICAgIGludCAqeGF0dHJfY291bnQpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxuIHtcbi1cdGlmICh1bmxpa2VseSgheGF0dHJzKSlcbitcdGlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtXHUwMDNleGF0dHJzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xuK1x0cmV0dXJuIFx1MDAyNmN0eC1cdTAwM2V4YXR0cnNbY3R4LVx1MDAzZXhhdHRyX2NvdW50KytdO1xuIH1cbiBcbiAjZW5kaWYgLyogISBfX0xJTlVYX0xTTV9IT09LU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4OC4uNjQ3ZjdiODgzNThiMmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTY4LDYgKzY4LDExIEBAIHN0cnVjdCB3YXRjaDtcbiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uO1xuIHN0cnVjdCBsc21fY3R4O1xuIFxuK3N0cnVjdCBsc21feGF0dHJzIHtcbitcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuK1x0dW5zaWduZWQgaW50IHhhdHRyX2NvdW50O1xuK307XG4rXG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cbkBAIC00MDEsNiArNDA2LDkgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuIFx0XHRcdFx0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSk7XG4raW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuK1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4rXHRcdFx0ICBzaXplX3QgdmFsdWVfbGVuKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XG5AQCAtODk1LDYgKzkwMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuK1x0XHRcdFx0XHRzaXplX3QgdmFsdWVfbGVuKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuaW5kZXggN2I5OGY1ZDFlMmJlODMuLjhmOGMzZGUzMDM1ZjAxIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jXG5AQCAtMzMsNiArMzMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX2luaXQodm9pZClcbiBcbiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2IpLFxuK1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4OS4uYjcxNThmYzYzNTQzZTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgKzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogZXZtX2lub2RlX2luaXRfc2VjdXJpdHkgLSBpbml0aWFsaXplcyBzZWN1cml0eS5ldm0gSE1BQyB2YWx1ZVxuICAqL1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbiBcdGJvb2wgZXZtX3Byb3RlY3RlZF94YXR0cnMgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbitcdHhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLVx1MDAzZXhhdHRycyA6IE5VTEw7XG4gXHRpZiAoIShldm1faW5pdGlhbGl6ZWQgXHUwMDI2IEVWTV9JTklUX0hNQUMpIHx8ICF4YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwODcsNyArMTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuK1x0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KGxzbV94YXR0cnMpO1xuIFx0LypcbiBcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXG4gXHQgKiB4YXR0ciBzbG90LlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCA3MWFlYThmZGYwMTQyOS4uMjYxZjY4ZTE3Y2ZkYTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNkZWZpbmUgcHJfZm10KGZtdCkgXCJMU006IFwiIGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2xzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGNhY2hlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEzMzMsOCArMTMzNCw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbi1cdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcbitcdHN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9O1xuK1x0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTM0NCwxNSArMTM0NSwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBcdGlmIChpbml0eGF0dHJzKSB7XG4gXHRcdC8qIEFsbG9jYXRlICsxIGFzIHRlcm1pbmF0b3IuICovXG4tXHRcdG5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xuLVx0XHRpZiAoIW5ld194YXR0cnMpXG4rXHRcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbitcdFx0XHRcdFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xuK1x0XHRpZiAoIXhhdHRycy54YXR0cnMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xuLVx0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRyX2NvdW50KTtcbitcdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG4rXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRycyk7XG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0LypcbkBAIC0xMzY0LDE4ICsxMzY1LDEwMSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdH1cbiBcbiBcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xuLVx0aWYgKCF4YXR0cl9jb3VudClcbitcdGlmICgheGF0dHJzLnhhdHRyX2NvdW50KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIG5ld194YXR0cnMsIGZzX2RhdGEpO1xuK1x0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7XG4gb3V0OlxuLVx0Zm9yICg7IHhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cl9jb3VudC0tKVxuLVx0XHRrZnJlZShuZXdfeGF0dHJzW3hhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuLVx0a2ZyZWUobmV3X3hhdHRycyk7XG4rXHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcbitcdFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4rXHRrZnJlZSh4YXR0cnMueGF0dHJzKTtcbiBcdHJldHVybiAocmV0ID09IC1FT1BOT1RTVVBQKSA/IDAgOiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXG4rc3RhdGljIHVuc2lnbmVkIGludCBsc21feGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpwcmVmaXgpXG4re1xuK1x0c2l6ZV90IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTtcbitcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHhhdHRycy1cdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XG4rXHRcdGNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtXHUwMDNleGF0dHJzW2ldLm5hbWU7XG4rXG4rXHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBwcmVmaXgsIHByZWZpeF9sZW4pKVxuK1x0XHRcdG4rKztcbitcdH1cbitcdHJldHVybiBuO1xuK31cbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbitcbisvKipcbisgKiBzZWN1cml0eV9sc214YXR0cl9hZGQoKSAtIEFkZCBhbiB4YXR0ciBkdXJpbmcgaW5vZGVfaW5pdF9zZWN1cml0eVxuKyAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXG4rICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXG4rICogQG5hbWU6IHhhdHRyIG5hbWUgc3VmZml4XG4rICogQHZhbHVlOiB4YXR0ciB2YWx1ZVxuKyAqIEB2YWx1ZV9sZW46IGxlbmd0aCBvZiBAdmFsdWVcbisgKlxuKyAqIENsYWltIGFuIHhhdHRyIHNsb3QgaW4gQHhhdHRycyBvbiBiZWhhbGYgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XG4rICogQGxzbV9pZCBhbmQgZmlsbCBpdCB3aXRoIGEgY29weSBvZiBAbmFtZSBhbmQgQHZhbHVlLiBDYWxsZXJzIGNhbiBpbnZva2VcbisgKiB0aGlzIGZ1bmN0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0LlxuKyAqXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGUgY2FsbGluZyBMU00ncyBzbG90IGJ1ZGdldFxuKyAqICAgICAgICAgaXMgZXhoYXVzdGVkLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZXJyb3JzLlxuKyAqL1xuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcbitcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuK1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbilcbit7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xuK1x0dm9pZCAqeGF0dHJfdmFsdWU7XG4rXHRzaXplX3QgbmFtZV9sZW47XG4rXG4rXHRpZiAoIXhhdHRycyB8fCAheGF0dHJzLVx1MDAzZXhhdHRycyB8fCAhbmFtZSB8fCAhdmFsdWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7XG4rXHRpZiAobmFtZV9sZW4gPT0gMCB8fCBuYW1lX2xlbiBcdTAwM2UgWEFUVFJfTkFNRV9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiBcdTAwM2UgWEFUVFJfU0laRV9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3dpdGNoIChsc21faWQpIHtcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitcdGNhc2UgTFNNX0lEX0JQRjpcbitcdFx0aWYgKGxzbV94YXR0cnNfdXNlZCh4YXR0cnMsIFhBVFRSX0JQRl9MU01fU1VGRklYKSBcdTAwM2U9XG4rXHRcdCAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxuK1x0XHRcdHJldHVybiAtRU5PU1BDO1xuK1x0XHRicmVhaztcbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cbitcdHhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gKyBuYW1lX2xlbiArIDEsIEdGUF9OT1dBSVQpO1xuK1x0aWYgKCF4YXR0cl92YWx1ZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtZW1jcHkoeGF0dHJfdmFsdWUsIHZhbHVlLCB2YWx1ZV9sZW4pO1xuK1x0bWVtY3B5KHhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuLCBuYW1lLCBuYW1lX2xlbik7XG4rXHQoKGNoYXIgKil4YXR0cl92YWx1ZSlbdmFsdWVfbGVuICsgbmFtZV9sZW5dID0gJ1xcMCc7XG4rXG4rXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuK1x0aWYgKCF4YXR0cikge1xuK1x0XHRrZnJlZSh4YXR0cl92YWx1ZSk7XG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0fVxuK1xuK1x0eGF0dHItXHUwMDNldmFsdWUgPSB4YXR0cl92YWx1ZTtcbitcdHhhdHRyLVx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuO1xuK1x0eGF0dHItXHUwMDNldmFsdWVfbGVuID0gdmFsdWVfbGVuO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbigpIC0gSW5pdGlhbGl6ZSBhbiBhbm9ueW1vdXMgaW5vZGVcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMWE3MTNkOTYyMDZmNTkuLjZiYmE2YjIxMmUxN2M1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yOTYyLDcgKzI5NjIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZGVudHJ5X2NyZWF0ZV9maWxlc19hcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLFxuIFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjO1xuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0ICAgICEoc2JzZWMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNCTEFCRUxfTU5UKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4rXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuIFx0aWYgKHhhdHRyKSB7XG4gXHRcdHJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNmNvbnRleHQsIFx1MDAyNmNsZW4pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IGZmMTE1MDY4YzVjMDZmLi40NTAxMDc4NDMwY2EwNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTk4MSwxMCArOTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuIFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbGxlbilcbiB7XG4tXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXG4gXHRpZiAoIXhhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDAzLDE0ICsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbisgKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgYXR0cmlidXRlcyBhbmQgdXBkYXRlIGNvdW50XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSdzIG5vIG1lbW9yeVxuICAqL1xuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHR0cmFuc2ZsYWcgPSBTTUtfSU5PREVfVFJBTlNNVVRFO1xuIFxuLVx0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHRcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbi1cdFx0XHRcdFRSQU5TX1RSVUUsXG4tXHRcdFx0XHRUUkFOU19UUlVFX1NJWkVcbi1cdFx0XHQpKVxuK1x0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuK1x0XHRcdFx0XHQgVFJBTlNfVFJVRSxcbitcdFx0XHRcdFx0IFRSQU5TX1RSVUVfU0laRSkpXG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChyYyA9PSAwKVxuLVx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcbi1cdFx0XHQgICAgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuLVx0XHQgICAgIHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pXG4tXHRcdCkpXG4rXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcbitcdFx0XHRcdCBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4rXHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuQEAgLTkyLDQgKzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wLCBpbnQgZmxhZ3MpIF9fa3N5bSBfX3dlYWs7XG4gZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhaztcbiBcbitzdHJ1Y3QgbHNtX3hhdHRycztcbitleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4rXHRcdFx0XHRjb25zdCBjaGFyICpuYW1lX19zdHIsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5pbmRleCA0M2EyNmVjNjlhOGUzNi4uMTBiZTBhYjkxZTcwNjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXCJ0ZXN0X2dldF94YXR0ci5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9zZXRfcmVtb3ZlX3hhdHRyLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X2luaXRfaW5vZGVfeGF0dHIuc2tlbC5oXCJcbiBcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzXCI7XG4gXG5AQCAtMjY4LDYgKzI2OSwxMjMgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxuIFx0cmVtb3ZlKHRlc3RmaWxlKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgZmQgPSAtMSwgZXJyO1xuK1x0Y2hhciB2YWx1ZV9vdXRbNjRdO1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfbmV3ID0gXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX25ld1wiO1xuK1xuK1x0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwidGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXHRlcnIgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi9cbitcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiY3JlYXRlX2ZpbGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdCwgMCwgXCJpbml0X3Jlc3VsdFwiKTtcbitcbitcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXCJzZWN1cml0eS5cIiB0byB0aGUgbmFtZS4gKi9cbitcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXCJzZWN1cml0eS5icGYudGVzdF9sYWJlbFwiLCB2YWx1ZV9vdXQsXG4rXHRcdCAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XG4rXHRcdHByaW50ZihcIiVzOlNLSVA6ZmlsZXN5c3RlbSBkaWQgbm90IGFwcGx5IExTTSB4YXR0cnNcXG5cIixcbitcdFx0ICAgICAgIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmICghQVNTRVJUX0dFKGVyciwgMCwgXCJnZXR4YXR0clwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfRVEoZXJyLCAoaW50KXNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNleGF0dHJfdmFsdWUpLCBcInhhdHRyX3NpemVcIik7XG4rXHRBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsIFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCIsXG4rXHRcdFx0ICBzaXplb2YoXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcIikpLCAwLFxuK1x0XHQgIFwieGF0dHJfdmFsdWVcIik7XG4rXG4rb3V0OlxuK1x0Y2xvc2UoZmQpO1xuK1x0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWwpO1xuK1x0cmVtb3ZlKHRlc3RmaWxlX25ldyk7XG4rfVxuK1xuKy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovXG4rI2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0XG4rXG4rLypcbisgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0XG4rICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxuKyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcbitcdHN0cnVjdCBicGZfbGluayAqbGlua1tJTklUX0lOT0RFX1hBVFRSX01BWCArIDFdID0ge307XG4rXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcIjtcbitcdGludCBvayA9IDAsIG5vc3BjID0gMCwgb3RoZXIgPSAwO1xuK1x0aW50IGksIGZkID0gLTE7XG4rXG4rXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcbitcdFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xuK1x0XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXCJvcGVuXCIpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRzbnByaW50Zihza2VsW2ldLVx1MDAzZXJvZGF0YS1cdTAwM2V4YXR0cl9uYW1lLFxuK1x0XHRcdCBzaXplb2Yoc2tlbFtpXS1cdTAwM2Vyb2RhdGEtXHUwMDNleGF0dHJfbmFtZSksIFwiYnBmLmxhYmVsXyVkXCIsXG4rXHRcdFx0IGkpO1xuK1xuK1x0XHRpZiAoIUFTU0VSVF9PSyh0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2xvYWQoc2tlbFtpXSksIFwibG9hZFwiKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0c2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1xuK1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuK1x0XHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXCJhdHRhY2hcIikpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi9cbitcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdFxuK1x0ICogdGhlIGJ1ZGdldCBnZXRzIC1FTk9TUEMuIFRoZSBvcmRlciBpbiB3aGljaCBwcm9ncmFtcyBydW4gaXMgbm90XG4rXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGludCByZXMgPSBza2VsW2ldLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQ7XG4rXG4rXHRcdGlmIChyZXMgPT0gMClcbitcdFx0XHRvaysrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcbitcdFx0XHRub3NwYysrO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3RoZXIrKztcbitcdH1cbitcbitcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwic2xvdHNfd2l0aGluX2J1ZGdldFwiKTtcbitcdEFTU0VSVF9FUShub3NwYywgMSwgXCJzbG90X292ZXJfYnVkZ2V0XCIpO1xuK1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcInVuZXhwZWN0ZWRfcmVzdWx0XCIpO1xuK1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuK1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4rXHR9XG4rXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCArNDA2LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnN2ZXJpdHlcIikpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdF9pbm9kZV94YXR0clwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImluaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNhYWRlNTNiODdlM2EzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitfX3UzMiBtb25pdG9yZWRfcGlkO1xuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xuK1xuK2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSBcImJwZi50ZXN0X2xhYmVsXCI7XG4rY2hhciB4YXR0cl92YWx1ZVtdID0gXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcIjtcbitcbitTRUMoXCJsc20vaW5vZGVfaW5pdF9zZWN1cml0eVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XG4rXHRfX3UzMiBwaWQ7XG4rXG4rXHRwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXHUwMDI2dmFsdWVfcHRyKTtcbitcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcdTAwMjZ2YWx1ZV9wdHIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6MzMuNTYxNDMzNzQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyOTIyNDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgQlBGIHhhdHRyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IGludGVyZXN0aW5nIGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCBpdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgb24gYSBuZXdseSBjcmVhdGVkIGlub2RlLCBhbGwgdGhyb3VnaCB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIFRoaXMgc2VlbXMgbGlrZSBhIHBvd2VyZnVsIHRvb2wgZm9yIGVuaGFuY2VkIHNlY3VyaXR5IGVuZm9yY2VtZW50IGF0IGlub2RlIGNyZWF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHBhdGNoIHJld3JpdGVzIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgTFNNIGhvb2sgc2lnbmF0dXJlIHRvIGRlYWwgd2l0aCBgc3RydWN0IGxzbV94YXR0cnNgIGluc3RlYWQgb2YgdGhlIG9sZCBgc3RydWN0IHhhdHRyYCBzZXR1cCwgYW5kIHVwZGF0ZXMgdmFyaW91cyBzZWN1cml0eSBtb2R1bGVzIGxpa2UgYGV2bWAsIGBzZWxpbnV4YCwgYW5kIGBzbWFja2AgdG8gd29yayB3aXRoIHRoZSB1cGRhdGVkIHNpZ25hdHVyZS4gSXQgYWxzbyBsb29rcyBsaWtlIGEgbmV3IGZ1bmN0aW9uIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIGhhcyBiZWVuIGFkZGVkIGZvciBhZGRpbmcgdGhlIHhhdHRyIHRvIHRoaXMgbmV3IHN0cnVjdC4gVGhpcyBjaGFuZ2UgYWxzbyBpbmNsdWRlcyB0aGUgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBCUEYga2Z1bmMuXG5cblRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIHRoZSBrZXkgYXNwZWN0LCByZWFsbHkuIEEgQlBGIHByb2dyYW0gbG9hZGVkIGludG8gdGhlIGtlcm5lbCwgYXR0YWNoaW5nIHRvIHRoZSBgbHNtL2lub2RlX2luaXRfc2VjdXJpdHlgIGhvb2ssIGNvdWxkIHRoZW4gbGV2ZXJhZ2UgdGhpcyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jLiBUaGlzIG1ha2VzIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBlYXNpbHkgYWNjZXNzaWJsZS5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gQ2xlYXJseSwgYENPTkZJR19CUEZfTFNNYCBpcyBhIG11c3QtaGF2ZSwgYW5kIGBDT05GSUdfU0VDVVJJVFlgIGlzIGVzc2VudGlhbCwgc2luY2UgaXQgaW52b2x2ZXMgTFNNIGhvb2tzLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBmaWxlcyByZWxhdGVkIHRvIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgLCBhbmQgYENPTkZJR19FVk1gLiBUaGUgY29yZSBsb2dpYyBpcyBsaWtlbHkgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFuZCBgZnMvYnBmX2ZzX2tmdW5jcy5jYC4gSXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBgZnMvYnBmX2ZzX2tmdW5jcy5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBhcyB0aGF0IG1ha2VzIHNlbnNlLlxuXG5JJ2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSB1bml0IHRlc3RzIHByb3ZpZGVkIGluIHRoZSBgc2VsZnRlc3RzYCBkaXJlY3Rvcnkg4oCTIHNwZWNpZmljYWxseSBgZnNfa2Z1bmNzLmNgIGFuZCBgdGVzdF9pbml0X2lub2RlX3hhdHRyLmNgIOKAkyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgd29ya3MgYW5kIHdoYXQgc29ydCBvZiBzY2VuYXJpb3MgYXJlIGJlaW5nIHRlc3RlZC4gVGhhdCdsbCBiZSBhIGtleSBkYXRhIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjQxLjk5MDY2MDgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzQ0NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9mc19rZnVuY3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTI5PW9iai0kKENPTkZJR19aT05FRlNfRlMpXFx0XFx0Kz0gem9uZWZzL1xcbmZzL01ha2VmaWxlOjEzMDpvYmotJChDT05GSUdfQlBGX0xTTSlcXHRcXHQrPSBicGZfZnNfa2Z1bmNzLm9cXG5mcy9NYWtlZmlsZS0xMzEtb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXFx0Kz0gcmVzY3RybC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6NDIuMDc3NDEwODMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0Mzk1NDc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQlBGIExTTSBJbnRlZ3JhdGlvbioqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9MU01gIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBicm9hZGVyIHNlY3VyaXR5IGxhbmRzY2FwZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYW5kIHRoZSBMU00gaW50ZWdyYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIEJQRiBob29rIHNob3VsZCBiZS4gSSdsbCBhbmFseXplIGhvdyB0aGUgQlBGIGxvZ2ljIGlzIGJlaW5nIGludm9rZWQgaW4gdGhlIHhhdHRyIGFkZGl0aW9uIHBhdGguIEknbSBsb29raW5nIGZvciB0aGUgaW50ZWdyYXRpb24gcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6NDUuMzIxMzY4MjQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzc4MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzOTctLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzk4OiAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzk5LSAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE0MTEtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNDEyOmludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE0MTMtXFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6NDUuMzgyMTUyMjI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NjQ2ODA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbnRlcmFjdGlvbiBCZXR3ZWVuIExTTSBhbmQgQlBGIEV4dGVuZGVkIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVyYWN0IHdpdGggQlBGLWV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgZnVuY3Rpb24uIEkga25vdyB0aGF0IGxpdmVzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC4gVGhlIHJlbGF0ZWQga2Z1bmMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIHJlc2lkZXMgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGNvbWUgaW50byBwbGF5IGhlcmUuIE9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFueSBCUEYgdXNhZ2UsIGJ1dCBpZiBJJ20gZGVhbGluZyB3aXRoIExTTSBhbmQgQlBGIHRvZ2V0aGVyLCBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIFNpbmNlIGBDT05GSUdfQlBGX0xTTWAgcHJvYmFibHkgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBpbXBsaWVzIGl0KSwgSSdsbCBkb3VibGUtY2hlY2sgYENPTkZJR19CUEZfTFNNYCdzIGRlZmluaXRpb24gaW4gdGhlIEtjb25maWcgZmlsZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBwYXJhbW91bnQgdG8gZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjQ5Ljc3ODYyMzMyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUwODk4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozMjo0OS44NDAxMzg0NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU4MjM1MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIExTTSBJbnRlZ3JhdGlvbiB3aXRoIEJQRioqXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIEJQRiBhbmQgTFNNIGludGVncmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBCUEZfTFNNYCBhcmUgZGVmaW5lZC4gVGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHN0ZXAgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgYSBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsLiBLY29uZmlnIGZpbGVzIGFyZSB0aGUgcGxhY2UgdG8gc3RhcnQg4oCTIHRoZXkncmUgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZ2V0IHRvIHNlYXJjaGluZyBmb3IgYEJQRl9MU01gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIGZpbGVzIGRlZmluZSBpdCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjUzLjY5ODM3NTYyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzE0NTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0xTTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjU2LjAyNTUyNjg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTM4MDQzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIEJQRl9MU00qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX0xTTWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3Mgbm90IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUsIGJ1dCBpbnN0ZWFkLCBsZXQncyB0cmFjZSB0aGlzIGxpa2UgYSBwcm9wZXIgaW52ZXN0aWdhdGlvbi4gV2hlcmUgZG9lcyB0aGlzIGxpdmU/IFdoYXQgb3RoZXIgc3Vic3lzdGVtcyBkb2VzIGl0IHJlbHkgdXBvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyB0aGlzOyBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBib3R0bGVuZWNrcy4gQSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVncmF0ZSBpdC4gTGV0J3Mgc3RhcnQgYnkgbWFwcGluZyBpdCBhbGwgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjU5LjMzOTMzMzIxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIEJQRl9MU01cXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbiAgOTU6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgOTY6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbiAgOTc6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuICA5ODpcXHRcXHRoZWxwXFxuICA5OTpcXHRcXHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3JcXG4gMTAwOlxcdFxcdCAgaW1wbGVtZW50aW5nIGR5bmFtaWMgTUFDIGFuZCBBdWRpdCBQb2xpY2llcy5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRlbmRtZW51ICMgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjU5LjMzOTM5NzQwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE3NTEzOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBMU00geGF0dHIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQlBGX0xTTWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZ29pbmcgdG8gYWZmZWN0IHRoaW5ncywgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQgYWJvdXQgYENPTkZJR19TRUNVUklUWWA/IEknbSBwcmV0dHkgc3VyZSB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGNvZGUgdG8gY29tcGlsZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBBbmQgd2hhdCBhYm91dCB0aGUgU0VMaW51eCwgU01BQ0ssIGFuZCBFVk0gY29uZmlndXJhdGlvbnM6IGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgLCBhbmQgYENPTkZJR19FVk1gPyBUaGUgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aGVtIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUsIGJ1dCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgc2hvdWxkIHN0aWxsIHdvcmssIGV2ZW4gaWYgdGhvc2UgYXJlICpub3QqIGVuYWJsZWQsIGFzIGxvbmcgYXMgYENPTkZJR19CUEZfTFNNYCBpcyBlbmFibGVkLlxuXG5SaWdodCwgc28gdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rIGlzIGNhbGxlZCBieSBmaWxlc3lzdGVtIGNvZGUgbGlrZSBgZXh0NGAgb3IgYGJ0cmZzYCB3aGVuIGEgbmV3IGlub2RlIGlzIGNyZWF0ZWQuIElmIEknbSBnb2luZyB0byBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIEknbSBwcmV0dHkgc3VyZSBJIG5lZWQgdG8gZm9jdXMgb24gZW5hYmxpbmcgYENPTkZJR19CUEZfTFNNYC4gVGhhdCdzIHRoZSBwcmlvcml0eS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEknbSBzZWVpbmcgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAsIGFuZCBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIGZ1bmN0aW9ucy4gSSBzZWUgYGxzbV9nZXRfeGF0dHJfc2xvdGAgd2hpY2ggaXMgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQgSSBhbHNvIHNlZSBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YCBhcmUgYXZhaWxhYmxlIGFzIHdlbGwuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzLiBJJ20gcHJldHR5IHN1cmUgYENPTkZJR19CUEZfTFNNYCBpcyB0aGUgbWFpbiBvbmUuIEkgKnRoaW5rKiBgQ09ORklHX1NFQ1VSSVRZYCBpcyByZXF1aXJlZCBmb3IgYEJQRl9MU01gLCBzbyB0aGF0IGlzIHByb2JhYmx5IHRoZSBtYWluIGRlcGVuZGVuY3kuXG5cbkxldCBtZSBnbyBiYWNrIHRvIHRoZSBwYXRjaCBhZ2Fpbi5cblxuYGBgY1xuK19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKVxuYGBgXG5gYGBjXG4raW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuK1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4rXHRcdFx0ICBzaXplX3QgdmFsdWVfbGVuKVxuYGBgXG5gYGBjXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4gXHRcdFx0XHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxuYGBgXG5cblRoZSBrZXkgZm9jdXMgaXMgb24gdGhvc2UgbmV3IHNpZ25hdHVyZXMuXG5cblNvLCBqdXN0IHRvIHN1bW1hcml6ZTpcblxuKiAgICoqRm9jdXMgU3ltYm9scyoqOiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YC5cbiogICAqKkNvbmZpZ3MqKjogYEJQRl9MU01gICh3aXRoIGFuIGltcGxpZWQgZGVwZW5kZW5jeSBvbiBgU0VDVVJJVFlgKS5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGFsbG93aW5nIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBuZXdseSBjcmVhdGVkIGlub2RlcyBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBMU00gaG9vaydzIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBhY3R1YWxseSBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIHRoZSB4YXR0ci4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgYm90aCB0aGUga2VybmVsJ3MgTFNNIGFuZCBCUEYgc3Vic3lzdGVtcyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSBhbmQgY3JlYXRpbmcgZmlsZXMsIHRoZXJlZm9yZSwgZnV6emluZyB3aWxsIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5ldyBrZnVuYywgYW5kIHRob3NlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBpcyBhY3R1YWxseSByZWFjaGFibGUgLS0geWVzLCBpdCdzIGludm9rZWQgYnkgZmlsZXN5c3RlbXMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLCB3aGljaCBpcyBnb29kLiBJcyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCByZWFjaGFibGU/IFllcywgdGhyb3VnaCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLlxuXG5EbyBJIG5lZWQgb3RoZXIgY29uZmlndXJhdGlvbnM/IFBlcmhhcHMsIGBDT05GSUdfRVZNYCwgYENPTkZJR19TRUNVUklUWV9TRUxJTlVYYCwgb3IgYENPTkZJR19TRUNVUklUWV9TTUFDS2A/IFRoZXkgYXJlIG1vZGlmaWVkLCB5ZXMsIGJ1dCB0aGUgKmNvcmUqIGxvZ2ljIEkgbmVlZCB0byBmdXp6IGlzIHRoZSBCUEYga2Z1bmMgYW5kIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCB3aGljaCBtZWFucyBlbmFibGluZyBgQlBGX0xTTWAgKnNob3VsZCogYmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZSBuZXcgZmVhdHVyZSBwcm9wZXJseS5cblxuQWxyaWdodCwgdGltZSB0byB1c2UgdGhhdCBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzMCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozMzoxNC41MTQ1NDAzNzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4OTkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9sc214YXR0cl9hZGRcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHdoaWNoIGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vay4gSXQgbW9kaWZpZXMgdGhlIExTTSBob29rIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBoYW5kbGUgdGhlIHhhdHRyIGFkZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIExTTSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGEgQlBGIHByb2dyYW0gYW5kIGNyZWF0aW5nIGZpbGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jIGFuZCB0aGUgbW9kaWZpZWQgc2VjdXJpdHkgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmms5s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 10:14:18 +0000 UTC FinishedAt: 2026-07-08 10:33: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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM" ], "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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_LSM" ], "series_id": "7623a9c1-3c40-4631-9d76-507be97a724e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_init_inode_xattr", "security_lsmxattr_add", "security_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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5pdF9pbm9kZV94YXR0ciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHdoaWNoIGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vay4gSXQgbW9kaWZpZXMgdGhlIExTTSBob29rIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBoYW5kbGUgdGhlIHhhdHRyIGFkZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgTFNNIGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSBhbmQgY3JlYXRpbmcgZmlsZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmMgYW5kIHRoZSBtb2RpZmllZCBzZWN1cml0eSBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZGI4YjQyZmNmNmY2YTUyMjg5ODM4YjRiZWVhNTk3ZDNmNzg2ZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDozMjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbmluZGV4IDc2OGFjYTJkYzBmMDM0Li5hZDAwMjVmMjI2NGE4YiAxMDA2NDRcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5AQCAtMTEsNyAmIzQzOzExLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhdHRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9sc20uaFx1MDAzZVxuIFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiBcbkBAIC0zNzQsNiAmIzQzOzM3NiwzOSBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBkX3JlYWxfaW5vZGUoZGVudHJ5KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfaW5pdF9pbm9kZV94YXR0ciAtIHNldCBhbiB4YXR0ciBvbiBhIG5ldyBpbm9kZSBmcm9tIGlub2RlX2luaXRfc2VjdXJpdHlcbiYjNDM7ICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbiYjNDM7ICogQG5hbWVfX3N0cjogeGF0dHIgbmFtZSAoZS5nLiwgXCYjMzQ7YnBmLmZpbGVfbGFiZWxcJiMzNDspXG4mIzQzOyAqIEB2YWx1ZV9wOiBkeW5wdHIgY29udGFpbmluZyB0aGUgeGF0dHIgdmFsdWVcbiYjNDM7ICpcbiYjNDM7ICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICp2YWx1ZV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXZhbHVlX3A7XG4mIzQzO1x0Y29uc3Qgdm9pZCAqdmFsdWU7XG4mIzQzO1x0dTMyIHZhbHVlX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuYW1lX19zdHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLFxuJiM0MztcdFx0ICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XG4mIzQzO1x0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfbHNteGF0dHJfYWRkKHhhdHRycywgTFNNX0lEX0JQRiwgbmFtZV9fc3RyLCB2YWx1ZSxcbiYjNDM7XHRcdFx0XHQgICAgIHZhbHVlX2xlbik7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiBcbiBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuQEAgLTM4NSw2ICYjNDM7NDIwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cilcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbiBcbiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbmluZGV4IGRkYTI3MmQ3OGYwMTNmLi4zNzRjNTA4MDFhOGM2ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuQEAgLTIxLDYgJiM0MzsyMSw5IEBAIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xzbV9ob29rX2RlZnMuaFx1MDAzZVxuICN1bmRlZiBMU01fSE9PS1xuIFxuJiM0MzsvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cbiYjNDM7I2RlZmluZSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIDRcbiYjNDM7XG4gc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2Ige1xuIFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlO1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldm0uaCBiL2luY2x1ZGUvbGludXgvZXZtLmhcbmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXZtLmhcbkBAIC0xMiw2ICYjNDM7MTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVncml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuJiM0MztzdHJ1Y3QgbHNtX3hhdHRycztcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19FVk1cbiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7XG4gZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuQEAgLTIxLDggJiM0MzsyMyw4IEBAIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcbiBcdFx0IGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTtcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudCk7XG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpO1xuIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTtcbiBleHRlcm4gaW50IGV2bV9wcm90ZWN0ZWRfeGF0dHJfaWZfZW5hYmxlZChjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSk7XG4gZXh0ZXJuIGludCBldm1fcmVhZF9wcm90ZWN0ZWRfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTggKmJ1ZmZlcixcbkBAIC02Myw4ICYjNDM7NjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgIGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcwLi41YjJkZTc4NjVjZTgxYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTExNiw4ICYjNDM7MTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSwgdm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0IGludCAqeGF0dHJfY291bnQpXG4mIzQzO1x0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbiYjNDM7XHQgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG5pbmRleCBiNGY4Y2FkNTNkZGIwMy4uN2FmZTA2YThkNGM2YzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oXG5AQCAtMjAwLDIwICYjNDM7MjAwLDE4IEBAIGV4dGVybiBzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsc190YWJsZSBzdGF0aWNfY2FsbHNfdGFibGUgX19yb19hZnRlcl9pbml0O1xuIFxuIC8qKlxuICAqIGxzbV9nZXRfeGF0dHJfc2xvdCAtIFJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBhbmQgaW5jcmVtZW50IHRoZSBpbmRleFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xuLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZClcbiYjNDM7ICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiAgKlxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXG4mIzQzOyAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQGN0eC1cdTAwM2V4YXR0cnMgYXJyYXkgdG8gZmlsbCB3aXRoIGFuXG4mIzQzOyAqIHhhdHRyLCBhbmQgaW5jcmVtZW50IEBjdHgtXHUwMDNleGF0dHJfY291bnQuXG4gICpcbi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4mIzQzOyAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAY3R4LVx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICAgICAgIGludCAqeGF0dHJfY291bnQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eClcbiB7XG4tXHRpZiAodW5saWtlbHkoIXhhdHRycykpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cdTAwM2V4YXR0cnMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBcdTAwMjZ4YXR0cnNbKCp4YXR0cl9jb3VudCkmIzQzOyYjNDM7XTtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2Y3R4LVx1MDAzZXhhdHRyc1tjdHgtXHUwMDNleGF0dHJfY291bnQmIzQzOyYjNDM7XTtcbiB9XG4gXG4gI2VuZGlmIC8qICEgX19MSU5VWF9MU01fSE9PS1NfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmODguLjY0N2Y3Yjg4MzU4YjJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC02OCw2ICYjNDM7NjgsMTEgQEAgc3RydWN0IHdhdGNoO1xuIHN0cnVjdCB3YXRjaF9ub3RpZmljYXRpb247XG4gc3RydWN0IGxzbV9jdHg7XG4gXG4mIzQzO3N0cnVjdCBsc21feGF0dHJzIHtcbiYjNDM7XHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7XG4mIzQzO307XG4mIzQzO1xuIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqL1xuICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MFxuIC8qIElmIGNhcGFibGUgc2hvdWxkIGF1ZGl0IHRoZSBzZWN1cml0eSByZXF1ZXN0ICovXG5AQCAtNDAxLDYgJiM0Mzs0MDYsOSBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4gXHRcdFx0XHQgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKTtcbiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuJiM0MztcdFx0XHQgIHNpemVfdCB2YWx1ZV9sZW4pO1xuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbkBAIC04OTUsNiAmIzQzOzkwMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzQzO1x0XHRcdFx0XHRzaXplX3QgdmFsdWVfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbmluZGV4IDdiOThmNWQxZTJiZTgzLi44ZjhjM2RlMzAzNWYwMSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuQEAgLTMzLDYgJiM0MzszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxuIFxuIHN0cnVjdCBsc21fYmxvYl9zaXplcyBicGZfbHNtX2Jsb2Jfc2l6ZXMgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksXG4mIzQzO1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4OS4uYjcxNThmYzYzNTQzZTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgJiM0MzsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxuICAqIGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5IC0gaW5pdGlhbGl6ZXMgc2VjdXJpdHkuZXZtIEhNQUMgdmFsdWVcbiAgKi9cbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudClcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4mIzQzO1x0c3RydWN0IHhhdHRyICp4YXR0cnM7XG4gXHRib29sIGV2bV9wcm90ZWN0ZWRfeGF0dHJzID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0eGF0dHJzID0gbHNtX3hhdHRycyA/IGxzbV94YXR0cnMtXHUwMDNleGF0dHJzIDogTlVMTDtcbiBcdGlmICghKGV2bV9pbml0aWFsaXplZCBcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA4Nyw3ICYjNDM7MTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdGV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTtcbiBcdC8qXG4gXHQgKiBBcnJheSB0ZXJtaW5hdG9yICh4YXR0ciBuYW1lID0gTlVMTCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWZpbGxlZFxuIFx0ICogeGF0dHIgc2xvdC5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjI2MWY2OGUxN2NmZGEwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtMU006IFwmIzM0OyBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbHNtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYXBhYmlsaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kY2FjaGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTMzMyw4ICYjNDM7MTMzNCw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbi1cdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcbiYjNDM7XHRzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTtcbiYjNDM7XHRpbnQgcmV0ID0gLUVPUE5PVFNVUFA7XG4gXG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMzQ0LDE1ICYjNDM7MTM0NSwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBcdGlmIChpbml0eGF0dHJzKSB7XG4gXHRcdC8qIEFsbG9jYXRlICYjNDM7MSBhcyB0ZXJtaW5hdG9yLiAqL1xuLVx0XHRuZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCAmIzQzOyAxLFxuLVx0XHRcdFx0ICAgICBzaXplb2YoKm5ld194YXR0cnMpLCBHRlBfTk9GUyk7XG4tXHRcdGlmICghbmV3X3hhdHRycylcbiYjNDM7XHRcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRzaXplb2YoKnhhdHRycy54YXR0cnMpLCBHRlBfTk9GUyk7XG4mIzQzO1x0XHRpZiAoIXhhdHRycy54YXR0cnMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xuLVx0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRyX2NvdW50KTtcbiYjNDM7XHRcdHJldCA9IHNjYWxsLVx1MDAzZWhsLVx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2eGF0dHJzKTtcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHQvKlxuQEAgLTEzNjQsMTggJiM0MzsxMzY1LDEwMSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdH1cbiBcbiBcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xuLVx0aWYgKCF4YXR0cl9jb3VudClcbiYjNDM7XHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcbiYjNDM7XHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCB4YXR0cnMueGF0dHJzLCBmc19kYXRhKTtcbiBvdXQ6XG4tXHRmb3IgKDsgeGF0dHJfY291bnQgXHUwMDNlIDA7IHhhdHRyX2NvdW50LS0pXG4tXHRcdGtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4tXHRrZnJlZShuZXdfeGF0dHJzKTtcbiYjNDM7XHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcbiYjNDM7XHRcdGtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuJiM0MztcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xuIFx0cmV0dXJuIChyZXQgPT0gLUVPUE5PVFNVUFApID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnByZWZpeClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIG4gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4YXR0cnMtXHUwMDNleGF0dHJfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBjaGFyICpuYW1lID0geGF0dHJzLVx1MDAzZXhhdHRyc1tpXS5uYW1lO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBwcmVmaXgsIHByZWZpeF9sZW4pKVxuJiM0MztcdFx0XHRuJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG47XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfbHNteGF0dHJfYWRkKCkgLSBBZGQgYW4geGF0dHIgZHVyaW5nIGlub2RlX2luaXRfc2VjdXJpdHlcbiYjNDM7ICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiYjNDM7ICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXG4mIzQzOyAqIEBuYW1lOiB4YXR0ciBuYW1lIHN1ZmZpeFxuJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlXG4mIzQzOyAqIEB2YWx1ZV9sZW46IGxlbmd0aCBvZiBAdmFsdWVcbiYjNDM7ICpcbiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogQGxzbV9pZCBhbmQgZmlsbCBpdCB3aXRoIGEgY29weSBvZiBAbmFtZSBhbmQgQHZhbHVlLiBDYWxsZXJzIGNhbiBpbnZva2VcbiYjNDM7ICogdGhpcyBmdW5jdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGUgY2FsbGluZyBMU00mIzM5O3Mgc2xvdCBidWRnZXRcbiYjNDM7ICogICAgICAgICBpcyBleGhhdXN0ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBlcnJvcnMuXG4mIzQzOyAqL1xuJiM0MztpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4mIzQzO1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzQzO1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqeGF0dHI7XG4mIzQzO1x0dm9pZCAqeGF0dHJfdmFsdWU7XG4mIzQzO1x0c2l6ZV90IG5hbWVfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhhdHRycyB8fCAheGF0dHJzLVx1MDAzZXhhdHRycyB8fCAhbmFtZSB8fCAhdmFsdWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7XG4mIzQzO1x0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXHUwMDNlIFhBVFRSX05BTUVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiBcdTAwM2UgWEFUVFJfU0laRV9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChsc21faWQpIHtcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0Y2FzZSBMU01fSURfQlBGOlxuJiM0MztcdFx0aWYgKGxzbV94YXR0cnNfdXNlZCh4YXR0cnMsIFhBVFRSX0JQRl9MU01fU1VGRklYKSBcdTAwM2U9XG4mIzQzO1x0XHQgICAgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSAmIzQzOyBuYW1lIGludG8gb25lIGFsbG9jYXRpb24uICovXG4mIzQzO1x0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiAmIzQzOyBuYW1lX2xlbiAmIzQzOyAxLCBHRlBfTk9XQUlUKTtcbiYjNDM7XHRpZiAoIXhhdHRyX3ZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG1lbWNweSh4YXR0cl92YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbik7XG4mIzQzO1x0bWVtY3B5KHhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbiwgbmFtZSwgbmFtZV9sZW4pO1xuJiM0MztcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcbiYjNDM7XHRpZiAoIXhhdHRyKSB7XG4mIzQzO1x0XHRrZnJlZSh4YXR0cl92YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlID0geGF0dHJfdmFsdWU7XG4mIzQzO1x0eGF0dHItXHUwMDNlbmFtZSA9IChjb25zdCBjaGFyICopeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuO1xuJiM0MztcdHhhdHRyLVx1MDAzZXZhbHVlX2xlbiA9IHZhbHVlX2xlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKCkgLSBJbml0aWFsaXplIGFuIGFub255bW91cyBpbm9kZVxuICAqIEBpbm9kZTogdGhlIGlub2RlXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxYTcxM2Q5NjIwNmY1OS4uNmJiYTZiMjEyZTE3YzUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTI5NjIsNyAmIzQzOzI5NjIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZGVudHJ5X2NyZWF0ZV9maWxlc19hcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLFxuIFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpO1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYztcbkBAIC0yOTkyLDcgJiM0MzsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIShzYnNlYy1cdTAwM2VmbGFncyBcdTAwMjYgU0JMQUJFTF9NTlQpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbiYjNDM7XHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuIFx0aWYgKHhhdHRyKSB7XG4gXHRcdHJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNmNvbnRleHQsIFx1MDAyNmNsZW4pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IGZmMTE1MDY4YzVjMDZmLi40NTAxMDc4NDMwY2EwNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTk4MSwxMCAmIzQzOzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcbiB9XG4gXG4gc3RhdGljIGludFxuLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiYjNDM7eGF0dHJfZHVwdmFsKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4gXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKVxuIHtcbi1cdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuJiM0MztcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXG4gXHRpZiAoIXhhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXG4gICogQGlub2RlOiB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZVxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxuICAqIEBxc3RyOiB1bnVzZWRcbi0gKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgdGhlIGF0dHJpYnV0ZXNcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXG4mIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnRcbiAgKlxuICAqIFJldHVybnMgMCBpZiBpdCBhbGwgd29ya3Mgb3V0LCAtRU5PTUVNIGlmIHRoZXJlJiMzOTtzIG5vIG1lbW9yeVxuICAqL1xuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gc21hY2tfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpO1xuQEAgLTEwNTcsMjEgJiM0MzsxMDU2LDE5IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRcdHRyYW5zZmxhZyA9IFNNS19JTk9ERV9UUkFOU01VVEU7XG4gXG4tXHRcdFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxuLVx0XHRcdFx0WEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuLVx0XHRcdFx0VFJBTlNfVFJVRSxcbi1cdFx0XHRcdFRSQU5TX1RSVUVfU0laRVxuLVx0XHRcdCkpXG4mIzQzO1x0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuJiM0MztcdFx0XHRcdFx0IFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbiYjNDM7XHRcdFx0XHRcdCBUUkFOU19UUlVFLFxuJiM0MztcdFx0XHRcdFx0IFRSQU5TX1RSVUVfU0laRSkpXG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChyYyA9PSAwKVxuLVx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcbi1cdFx0XHQgICAgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuLVx0XHQgICAgIHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pXG4tXHRcdCkpXG4mIzQzO1x0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcbiYjNDM7XHRcdFx0XHQgWEFUVFJfU01BQ0tfU1VGRklYLFxuJiM0MztcdFx0XHRcdCBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4mIzQzO1x0XHRcdFx0IHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pKSlcbiBcdFx0XHRyYyA9IC1FTk9NRU07XG4gaW5zdGFudF9pbm9kZTpcbiBcdGlzc3AtXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbmluZGV4IGFlNzFlOWI2OTA1MTg2Li4yNjM5ZjlmOTQxOTU1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcbkBAIC05Miw0ICYjNDM7OTIsOSBAQCBleHRlcm4gaW50IGJwZl9zZXRfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcbiBleHRlcm4gaW50IGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZV9fc3RyKSBfX2tzeW0gX193ZWFrO1xuIFxuJiM0MztzdHJ1Y3QgbHNtX3hhdHRycztcbiYjNDM7ZXh0ZXJuIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuaW5kZXggNDNhMjZlYzY5YThlMzYuLjEwYmUwYWI5MWU3MDYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X2dldF94YXR0ci5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9mc3Zlcml0eS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaFwmIzM0O1xuIFxuIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSBcJiMzNDsvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzXCYjMzQ7O1xuIFxuQEAgLTI2OCw2ICYjNDM7MjY5LDEyMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZzdmVyaXR5KHZvaWQpXG4gXHRyZW1vdmUodGVzdGZpbGUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgZmQgPSAtMSwgZXJyO1xuJiM0MztcdGNoYXIgdmFsdWVfb3V0WzY0XTtcbiYjNDM7XHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcJiMzNDsvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX25ld1wmIzM0OztcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXG4mIzQzO1x0ZmQgPSBvcGVuKHRlc3RmaWxlX25ldywgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwmIzM0O2NyZWF0ZV9maWxlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWluaXRfcmVzdWx0LCAwLCBcJiMzNDtpbml0X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXCYjMzQ7c2VjdXJpdHkuXCYjMzQ7IHRvIHRoZSBuYW1lLiAqL1xuJiM0MztcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXCYjMzQ7c2VjdXJpdHkuYnBmLnRlc3RfbGFiZWxcJiMzNDssIHZhbHVlX291dCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PREFUQSkge1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyVzOlNLSVA6ZmlsZXN5c3RlbSBkaWQgbm90IGFwcGx5IExTTSB4YXR0cnNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghQVNTRVJUX0dFKGVyciwgMCwgXCYjMzQ7Z2V0eGF0dHJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V4YXR0cl92YWx1ZSksIFwmIzM0O3hhdHRyX3NpemVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShzdHJuY21wKHZhbHVlX291dCwgXCYjMzQ7dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHNpemVvZihcJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcJiMzNDspKSwgMCxcbiYjNDM7XHRcdCAgXCYjMzQ7eGF0dHJfdmFsdWVcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0cmVtb3ZlKHRlc3RmaWxlX25ldyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovXG4mIzQzOyNkZWZpbmUgSU5JVF9JTk9ERV9YQVRUUl9NQVggNFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJvZ3JhbXMgbWF5IGF0dGFjaCB0byBpbm9kZV9pbml0X3NlY3VyaXR5IHdpdGhvdXQgYW4gYXR0YWNoLXRpbWUgbGltaXQsIGJ1dFxuJiM0MzsgKiB0aGUga2Z1bmMgb25seSBsZXRzIEJQRiBjbGFpbSBJTklUX0lOT0RFX1hBVFRSX01BWCB4YXR0ciBzbG90cyBwZXIgaW5vZGUuXG4mIzQzOyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbFtJTklUX0lOT0RFX1hBVFRSX01BWCAmIzQzOyAxXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGlua1tJTklUX0lOT0RFX1hBVFRSX01BWCAmIzQzOyAxXSA9IHt9O1xuJiM0MztcdGNvbnN0IGNoYXIgKnRlc3RmaWxlX3Nsb3QgPSBcJiMzNDsvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcJiMzNDs7XG4mIzQzO1x0aW50IG9rID0gMCwgbm9zcGMgPSAwLCBvdGhlciA9IDA7XG4mIzQzO1x0aW50IGksIGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWxbaV0sIFwmIzM0O29wZW5cJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50Zihza2VsW2ldLVx1MDAzZXJvZGF0YS1cdTAwM2V4YXR0cl9uYW1lLFxuJiM0MztcdFx0XHQgc2l6ZW9mKHNrZWxbaV0tXHUwMDNlcm9kYXRhLVx1MDAzZXhhdHRyX25hbWUpLCBcJiMzNDticGYubGFiZWxfJWRcJiMzNDssXG4mIzQzO1x0XHRcdCBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9PSyh0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2xvYWQoc2tlbFtpXSksIFwmIzM0O2xvYWRcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRza2VsW2ldLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1xuJiM0MztcdFx0bGlua1tpXSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWxbaV0tXHUwMDNlcHJvZ3MudGVzdF9pbml0X2lub2RlX3hhdHRyKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LX1BUUihsaW5rW2ldLCBcJiMzNDthdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRyaWdnZXIgaW5vZGVfaW5pdF9zZWN1cml0eSBvbmNlIHdpdGggYWxsIHByb2dyYW1zIGF0dGFjaGVkLiAqL1xuJiM0MztcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7Y3JlYXRlX2ZpbGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhhY3RseSBJTklUX0lOT0RFX1hBVFRSX01BWCBwcm9ncmFtcyBjbGFpbSBhIHNsb3Q7IHRoZSBwcm9ncmFtIHBhc3RcbiYjNDM7XHQgKiB0aGUgYnVkZ2V0IGdldHMgLUVOT1NQQy4gVGhlIG9yZGVyIGluIHdoaWNoIHByb2dyYW1zIHJ1biBpcyBub3RcbiYjNDM7XHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHJlcyA9IHNrZWxbaV0tXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVzID09IDApXG4mIzQzO1x0XHRcdG9rJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKVxuJiM0MztcdFx0XHRub3NwYyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG90aGVyJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwmIzM0O3Nsb3RzX3dpdGhpbl9idWRnZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShub3NwYywgMSwgXCYjMzQ7c2xvdF9vdmVyX2J1ZGdldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcJiMzNDt1bmV4cGVjdGVkX3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRicGZfbGlua19fZGVzdHJveShsaW5rW2ldKTtcbiYjNDM7XHRcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmVtb3ZlKHRlc3RmaWxlX3Nsb3QpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCAmIzQzOzQwNiwxMCBAQCB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpXG4gXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtmc3Zlcml0eVwmIzM0OykpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aW5pdF9pbm9kZV94YXR0clwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0XCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2luaXRfaW5vZGVfeGF0dHIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYWFkZTUzYjg3ZTNhM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9rZnVuY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO19fdTMyIG1vbml0b3JlZF9waWQ7XG4mIzQzO2ludCBpbml0X3Jlc3VsdCA9IC0xO1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciB4YXR0cl9uYW1lWzE2XSA9IFwmIzM0O2JwZi50ZXN0X2xhYmVsXCYjMzQ7O1xuJiM0MztjaGFyIHhhdHRyX3ZhbHVlW10gPSBcJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcJiMzNDs7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX2luaXRfc2VjdXJpdHlcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XG4mIzQzO1x0X191MzIgcGlkO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9tZW0oeGF0dHJfdmFsdWUsIHNpemVvZih4YXR0cl92YWx1ZSksIDAsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1x0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFx1MDAyNnZhbHVlX3B0cik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2RiOGI0MmZjZjZmNmE1MjI4OTgzOGI0YmVlYTU5N2QzZjc4NmU5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMTA6MzI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9icGZfZnNfa2Z1bmNzLmMgYi9mcy9icGZfZnNfa2Z1bmNzLmMKaW5kZXggNzY4YWNhMmRjMGYwMzQuLmFkMDAyNWYyMjY0YThiIDEwMDY0NAotLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnBmX2ZzX2tmdW5jcy5jCkBAIC0xMSw3ICYjNDM7MTEsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZWN1cml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbHNtLmgmZ3Q7CiAKIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKIApAQCAtMzc0LDYgJiM0MzszNzYsMzkgQEAgX19icGZfa2Z1bmMgc3RydWN0IGlub2RlICpicGZfcmVhbF9pbm9kZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5CiYjNDM7ICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHQKJiM0MzsgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCAmIzM0O2JwZi5maWxlX2xhYmVsJiMzNDspCiYjNDM7ICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZQomIzQzOyAqCiYjNDM7ICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wOwomIzQzOwljb25zdCB2b2lkICp2YWx1ZTsKJiM0MzsJdTMyIHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFuYW1lX19zdHIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCwKJiM0MzsJCSAgICBzaXplb2YoWEFUVFJfQlBGX0xTTV9TVUZGSVgpIC0gMSkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwl2YWx1ZV9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZSh2YWx1ZV9wdHIpOwomIzQzOwl2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTsKJiM0MzsJaWYgKCF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfbHNteGF0dHJfYWRkKHhhdHRycywgTFNNX0lEX0JQRiwgbmFtZV9fc3RyLCB2YWx1ZSwKJiM0MzsJCQkJICAgICB2YWx1ZV9sZW4pOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpCkBAIC0zODUsNiAmIzQzOzQyMCw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZpbGVfeGF0dHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaW5pdF9pbm9kZV94YXR0cikKIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKQogCiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaAppbmRleCBkZGEyNzJkNzhmMDEzZi4uMzc0YzUwODAxYThjNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oCkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBleHRlcm4gYm9vbCBicGZfbHNtX2luaXRpYWxpemVkIF9fcm9fYWZ0ZXJfaW5pdDsKICNpbmNsdWRlICZsdDtsaW51eC9sc21faG9va19kZWZzLmgmZ3Q7CiAjdW5kZWYgTFNNX0hPT0sKIAomIzQzOy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqLwomIzQzOyNkZWZpbmUgQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyA0CiYjNDM7CiBzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiB7CiAJc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlIF9fcmN1ICpzdG9yYWdlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oCmluZGV4IDkxM2Y0NTczYjIwMzhlLi41MjhmMzYwZjMzMDhkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V2bS5oCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVncml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhdHRyLmgmZ3Q7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRyczsKJiM0MzsKICNpZmRlZiBDT05GSUdfRVZNCiBleHRlcm4gaW50IGV2bV9zZXRfa2V5KHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbik7CiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0yMSw4ICYjNDM7MjMsOCBAQCBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSwKIAkJIGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTsKIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCk7CiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTsKIGV4dGVybiBib29sIGV2bV9yZXZhbGlkYXRlX3N0YXR1cyhjb25zdCBjaGFyICp4YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTsKIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsCkBAIC02Myw4ICYjNDM7NjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLAogCiBzdGF0aWMgaW5saW5lIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkJICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywKLQkJCQkJICBpbnQgKnhhdHRyX2NvdW50KQomIzQzOwkJCQkJICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMTYsOCAmIzQzOzExNiw4IEBAIExTTV9IT09LKGludCwgMCwgaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSkKIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JIGludCAqeGF0dHJfY291bnQpCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CSBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rcy5oCkBAIC0yMDAsMjAgJiM0MzsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7CiAKIC8qKgogICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4Ci0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnMKLSAqIEB4YXR0cl9jb3VudDogbnVtYmVyIG9mIGFscmVhZHkgc3RvcmVkIHhhdHRycyAodXBkYXRlZCkKJiM0MzsgKiBAY3R4OiB4YXR0ciBzdGF0ZSBzaGFyZWQgYnkgaW5vZGVfaW5pdF9zZWN1cml0eSBob29rcwogICoKLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsCi0gKiBhbmQgaW5jcmVtZW50IEB4YXR0cl9jb3VudC4KJiM0MzsgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtJmd0O3hhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4KJiM0MzsgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LSZndDt4YXR0cl9jb3VudC4KICAqCi0gKiBSZXR1cm46IFRoZSBzbG90IHRvIGZpbGwgaW4gQHhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtJmd0O3hhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkJCSAgICAgICBpbnQgKnhhdHRyX2NvdW50KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyICpsc21fZ2V0X3hhdHRyX3Nsb3Qoc3RydWN0IGxzbV94YXR0cnMgKmN0eCkKIHsKLQlpZiAodW5saWtlbHkoIXhhdHRycykpCiYjNDM7CWlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtJmd0O3hhdHRycykpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiAmYW1wO3hhdHRyc1soKnhhdHRyX2NvdW50KSYjNDM7JiM0MztdOwomIzQzOwlyZXR1cm4gJmFtcDtjdHgtJmd0O3hhdHRyc1tjdHgtJmd0O3hhdHRyX2NvdW50JiM0MzsmIzQzO107CiB9CiAKICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4OC4uNjQ3ZjdiODgzNThiMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTY4LDYgJiM0Mzs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7CiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uOwogc3RydWN0IGxzbV9jdHg7CiAKJiM0MztzdHJ1Y3QgbHNtX3hhdHRycyB7CiYjNDM7CXN0cnVjdCB4YXR0ciAqeGF0dHJzOwomIzQzOwl1bnNpZ25lZCBpbnQgeGF0dHJfY291bnQ7CiYjNDM7fTsKJiM0MzsKIC8qIERlZmF1bHQgKG5vKSBvcHRpb25zIGZvciB0aGUgY2FwYWJsZSBmdW5jdGlvbiAqLwogI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwCiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqLwpAQCAtNDAxLDYgJiM0Mzs0MDYsOSBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiAJCQkJIGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSk7CiYjNDM7aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLAomIzQzOwkJCSAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCiYjNDM7CQkJICBzaXplX3QgdmFsdWVfbGVuKTsKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpOwpAQCAtODk1LDYgJiM0Mzs5MDMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsCiYjNDM7CQkJCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKJiM0MzsJCQkJCXNpemVfdCB2YWx1ZV9sZW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJCQkgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMgYi9zZWN1cml0eS9icGYvaG9va3MuYwppbmRleCA3Yjk4ZjVkMWUyYmU4My4uOGY4YzNkZTMwMzVmMDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2JwZi9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jCkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX2luaXQodm9pZCkKIAogc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7CiAJLmxic19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3N0b3JhZ2VfYmxvYiksCiYjNDM7CS5sYnNfeGF0dHJfY291bnQgPSBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTLAogfTsKIAogREVGSU5FX0xTTShicGYpID0gewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCmluZGV4IGI1OWUzZjEyMWI4YTg5Li5iNzE1OGZjNjM1NDNlMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYwpAQCAtMTA2MiwxNCAmIzQzOzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpCiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlCiAgKi8KIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsCi0JCQkgICAgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCiYjNDM7CQkJICAgIHN0cnVjdCBsc21feGF0dHJzICpsc21feGF0dHJzKQogewogCXN0cnVjdCBldm1feGF0dHIgKnhhdHRyX2RhdGE7CiAJc3RydWN0IHhhdHRyICp4YXR0ciwgKmV2bV94YXR0cjsKJiM0MzsJc3RydWN0IHhhdHRyICp4YXR0cnM7CiAJYm9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlOwogCWludCByYzsKIAomIzQzOwl4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy0mZ3Q7eGF0dHJzIDogTlVMTDsKIAlpZiAoIShldm1faW5pdGlhbGl6ZWQgJmFtcDsgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycykKIAkJcmV0dXJuIDA7CiAKQEAgLTEwODcsNyAmIzQzOzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFldm1fcHJvdGVjdGVkX3hhdHRycykKIAkJcmV0dXJuIDA7CiAKLQlldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CWV2bV94YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdChsc21feGF0dHJzKTsKIAkvKgogCSAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkCiAJICogeGF0dHIgc2xvdC4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDI5Li4yNjFmNjhlMTdjZmRhMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0xTTTogJiMzNDsgZm10CiAKICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2xzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NhcGFiaWxpdHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kY2FjaGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTEzMzMsOCAmIzQzOzEzMzQsOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKQogewogCXN0cnVjdCBsc21fc3RhdGljX2NhbGwgKnNjYWxsOwotCXN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQLCB4YXR0cl9jb3VudCA9IDA7CiYjNDM7CXN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9OwomIzQzOwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKQEAgLTEzNDQsMTUgJiM0MzsxMzQ1LDE1IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAJaWYgKGluaXR4YXR0cnMpIHsKIAkJLyogQWxsb2NhdGUgJiM0MzsxIGFzIHRlcm1pbmF0b3IuICovCi0JCW5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCi0JCQkJICAgICBzaXplb2YoKm5ld194YXR0cnMpLCBHRlBfTk9GUyk7Ci0JCWlmICghbmV3X3hhdHRycykKJiM0MzsJCXhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICYjNDM7IDEsCiYjNDM7CQkJCQlzaXplb2YoKnhhdHRycy54YXR0cnMpLCBHRlBfTk9GUyk7CiYjNDM7CQlpZiAoIXhhdHRycy54YXR0cnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkgewotCQlyZXQgPSBzY2FsbC0mZ3Q7aGwtJmd0O2hvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLAotCQkJCQkJICAmYW1wO3hhdHRyX2NvdW50KTsKJiM0MzsJCXJldCA9IHNjYWxsLSZndDtobC0mZ3Q7aG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsCiYjNDM7CQkJCQkJCSAgJmFtcDt4YXR0cnMpOwogCQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FT1BOT1RTVVBQKQogCQkJZ290byBvdXQ7CiAJCS8qCkBAIC0xMzY0LDE4ICYjNDM7MTM2NSwxMDEgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJfQogCiAJLyogSWYgaW5pdHhhdHRycygpIGlzIE5VTEwsIHhhdHRyX2NvdW50IGlzIHplcm8sIHNraXAgdGhlIGNhbGwuICovCi0JaWYgKCF4YXR0cl9jb3VudCkKJiM0MzsJaWYgKCF4YXR0cnMueGF0dHJfY291bnQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgbmV3X3hhdHRycywgZnNfZGF0YSk7CiYjNDM7CXJldCA9IGluaXR4YXR0cnMoaW5vZGUsIHhhdHRycy54YXR0cnMsIGZzX2RhdGEpOwogb3V0OgotCWZvciAoOyB4YXR0cl9jb3VudCAmZ3Q7IDA7IHhhdHRyX2NvdW50LS0pCi0JCWtmcmVlKG5ld194YXR0cnNbeGF0dHJfY291bnQgLSAxXS52YWx1ZSk7Ci0Ja2ZyZWUobmV3X3hhdHRycyk7CiYjNDM7CWZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgJmd0OyAwOyB4YXR0cnMueGF0dHJfY291bnQtLSkKJiM0MzsJCWtmcmVlKHhhdHRycy54YXR0cnNbeGF0dHJzLnhhdHRyX2NvdW50IC0gMV0udmFsdWUpOwomIzQzOwlrZnJlZSh4YXR0cnMueGF0dHJzKTsKIAlyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyICpwcmVmaXgpCiYjNDM7ewomIzQzOwlzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOwomIzQzOwl1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB4YXR0cnMtJmd0O3hhdHRyX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqbmFtZSA9IHhhdHRycy0mZ3Q7eGF0dHJzW2ldLm5hbWU7CiYjNDM7CiYjNDM7CQlpZiAobmFtZSAmYW1wOyZhbXA7ICFzdHJuY21wKG5hbWUsIHByZWZpeCwgcHJlZml4X2xlbikpCiYjNDM7CQkJbiYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqLwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5CiYjNDM7ICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3MKJiM0MzsgKiBAbHNtX2lkOiBMU01fSURfKiB2YWx1ZSBpZGVudGlmeWluZyB0aGUgY2FsbGluZyBMU00KJiM0MzsgKiBAbmFtZTogeGF0dHIgbmFtZSBzdWZmaXgKJiM0MzsgKiBAdmFsdWU6IHhhdHRyIHZhbHVlCiYjNDM7ICogQHZhbHVlX2xlbjogbGVuZ3RoIG9mIEB2YWx1ZQomIzQzOyAqCiYjNDM7ICogQ2xhaW0gYW4geGF0dHIgc2xvdCBpbiBAeGF0dHJzIG9uIGJlaGFsZiBvZiB0aGUgTFNNIGlkZW50aWZpZWQgYnkKJiM0MzsgKiBAbHNtX2lkIGFuZCBmaWxsIGl0IHdpdGggYSBjb3B5IG9mIEBuYW1lIGFuZCBAdmFsdWUuIENhbGxlcnMgY2FuIGludm9rZQomIzQzOyAqIHRoaXMgZnVuY3Rpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZSBjYWxsaW5nIExTTSYjMzk7cyBzbG90IGJ1ZGdldAomIzQzOyAqICAgICAgICAgaXMgZXhoYXVzdGVkLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZXJyb3JzLgomIzQzOyAqLwomIzQzO2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAomIzQzOwkJCSAgc2l6ZV90IHZhbHVlX2xlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4YXR0ciAqeGF0dHI7CiYjNDM7CXZvaWQgKnhhdHRyX3ZhbHVlOwomIzQzOwlzaXplX3QgbmFtZV9sZW47CiYjNDM7CiYjNDM7CWlmICgheGF0dHJzIHx8ICF4YXR0cnMtJmd0O3hhdHRycyB8fCAhbmFtZSB8fCAhdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiYjNDM7CWlmIChuYW1lX2xlbiA9PSAwIHx8IG5hbWVfbGVuICZndDsgWEFUVFJfTkFNRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiAmZ3Q7IFhBVFRSX1NJWkVfTUFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXN3aXRjaCAobHNtX2lkKSB7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CWNhc2UgTFNNX0lEX0JQRjoKJiM0MzsJCWlmIChsc21feGF0dHJzX3VzZWQoeGF0dHJzLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCkgJmd0Oz0KJiM0MzsJCSAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKQomIzQzOwkJCXJldHVybiAtRU5PU1BDOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb21iaW5lIHhhdHRyIHZhbHVlICYjNDM7IG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi8KJiM0MzsJeGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiAmIzQzOyBuYW1lX2xlbiAmIzQzOyAxLCBHRlBfTk9XQUlUKTsKJiM0MzsJaWYgKCF4YXR0cl92YWx1ZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwltZW1jcHkoeGF0dHJfdmFsdWUsIHZhbHVlLCB2YWx1ZV9sZW4pOwomIzQzOwltZW1jcHkoeGF0dHJfdmFsdWUgJiM0MzsgdmFsdWVfbGVuLCBuYW1lLCBuYW1lX2xlbik7CiYjNDM7CSgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gJiM0MzsgbmFtZV9sZW5dID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwl4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwomIzQzOwlpZiAoIXhhdHRyKSB7CiYjNDM7CQlrZnJlZSh4YXR0cl92YWx1ZSk7CiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJfQomIzQzOwomIzQzOwl4YXR0ci0mZ3Q7dmFsdWUgPSB4YXR0cl92YWx1ZTsKJiM0MzsJeGF0dHItJmd0O25hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICYjNDM7IHZhbHVlX2xlbjsKJiM0MzsJeGF0dHItJmd0O3ZhbHVlX2xlbiA9IHZhbHVlX2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlCiAgKiBAaW5vZGU6IHRoZSBpbm9kZQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjk2Miw3ICYjNDM7Mjk2Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCQkgICAgICAgc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQpCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkX3NlY3VyaXR5X3N0cnVjdCAqY3JzZWMgPSBzZWxpbnV4X2NyZWQoY3VycmVudF9jcmVkKCkpOwogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CkBAIC0yOTkyLDcgJiM0MzsyOTkyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAJICAgICEoc2JzZWMtJmd0O2ZsYWdzICZhbXA7IFNCTEFCRUxfTU5UKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JeGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7CiYjNDM7CXhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7CiAJaWYgKHhhdHRyKSB7CiAJCXJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLAogCQkJCQkJICAgJmFtcDtjb250ZXh0LCAmYW1wO2NsZW4pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05ODEsMTAgJiM0Mzs5ODEsMTAgQEAgc21rX3J1bGVfdHJhbnNtdXRlcyhzdHJ1Y3Qgc21hY2tfa25vd24gKnN1YmplY3QsCiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCwKJiM0Mzt4YXR0cl9kdXB2YWwoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKIAkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKQogewotCXN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpOwomIzQzOwlzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpOwogCiAJaWYgKCF4YXR0cikKIAkJcmV0dXJuIDA7CkBAIC0xMDAzLDE0ICYjNDM7MTAwMywxMyBAQCB4YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsCiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlCiAgKiBAZGlyOiBjb250YWluaW5nIGRpcmVjdG9yeSBvYmplY3QKICAqIEBxc3RyOiB1bnVzZWQKLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlcwotICogQHhhdHRyX2NvdW50OiBjdXJyZW50IG51bWJlciBvZiBMU00tcHJvdmlkZWQgeGF0dHJzICh1cGRhdGVkKQomIzQzOyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnQKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSYjMzk7cyBubyBtZW1vcnkKICAqLwogc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsCi0JCQkJICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTsKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKiBjb25zdCBpc3NwID0gc21hY2tfaW5vZGUoaW5vZGUpOwpAQCAtMTA1NywyMSAmIzQzOzEwNTYsMTkgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQkJdHJhbnNmbGFnID0gU01LX0lOT0RFX1RSQU5TTVVURTsKIAotCQkJaWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LAotCQkJCVhBVFRSX1NNQUNLX1RSQU5TTVVURSwKLQkJCQlUUkFOU19UUlVFLAotCQkJCVRSQU5TX1RSVUVfU0laRQotCQkJKSkKJiM0MzsJCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywKJiM0MzsJCQkJCSBYQVRUUl9TTUFDS19UUkFOU01VVEUsCiYjNDM7CQkJCQkgVFJBTlNfVFJVRSwKJiM0MzsJCQkJCSBUUkFOU19UUlVFX1NJWkUpKQogCQkJCXJjID0gLUVOT01FTTsKIAkJfQogCX0KIAogCWlmIChyYyA9PSAwKQotCQlpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsCi0JCQkgICAgWEFUVFJfU01BQ0tfU1VGRklYLAotCQkJICAgIGlzc3AtJmd0O3Nta19pbm9kZS0mZ3Q7c21rX2tub3duLAotCQkgICAgIHN0cmxlbihpc3NwLSZndDtzbWtfaW5vZGUtJmd0O3Nta19rbm93bikKLQkJKSkKJiM0MzsJCWlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLAomIzQzOwkJCQkgWEFUVFJfU01BQ0tfU1VGRklYLAomIzQzOwkJCQkgaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24sCiYjNDM7CQkJCSBzdHJsZW4oaXNzcC0mZ3Q7c21rX2lub2RlLSZndDtzbWtfa25vd24pKSkKIAkJCXJjID0gLUVOT01FTTsKIGluc3RhbnRfaW5vZGU6CiAJaXNzcC0mZ3Q7c21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaAppbmRleCBhZTcxZTliNjkwNTE4Ni4uMjYzOWY5Zjk0MTk1NWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaApAQCAtOTIsNCAmIzQzOzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0ciwKIAkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCwgaW50IGZsYWdzKSBfX2tzeW0gX193ZWFrOwogZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhazsKIAomIzQzO3N0cnVjdCBsc21feGF0dHJzOwomIzQzO2V4dGVybiBpbnQgYnBmX2luaXRfaW5vZGVfeGF0dHIoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywKJiM0MzsJCQkJY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhazsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYwppbmRleCA0M2EyNmVjNjlhOGUzNi4uMTBiZTBhYjkxZTcwNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogI2luY2x1ZGUgJiMzNDt0ZXN0X2dldF94YXR0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3NldF9yZW1vdmVfeGF0dHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9mc3Zlcml0eS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyLnNrZWwuaCYjMzQ7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHRlc3RmaWxlW10gPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3MmIzM0OzsKIApAQCAtMjY4LDYgJiM0MzsyNjksMTIzIEBAIHN0YXRpYyB2b2lkIHRlc3RfZnN2ZXJpdHkodm9pZCkKIAlyZW1vdmUodGVzdGZpbGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDsKJiM0MzsJaW50IGZkID0gLTEsIGVycjsKJiM0MzsJY2hhciB2YWx1ZV9vdXRbNjRdOwomIzQzOwljb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NfbmV3JiMzNDs7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi8KJiM0MzsJZmQgPSBvcGVuKHRlc3RmaWxlX25ldywgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZV9maWxlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtpbml0X3Jlc3VsdCwgMCwgJiMzNDtpbml0X3Jlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogaW5pdHhhdHRycyBwcmVwZW5kcyAmIzM0O3NlY3VyaXR5LiYjMzQ7IHRvIHRoZSBuYW1lLiAqLwomIzQzOwllcnIgPSBnZXR4YXR0cih0ZXN0ZmlsZV9uZXcsICYjMzQ7c2VjdXJpdHkuYnBmLnRlc3RfbGFiZWwmIzM0OywgdmFsdWVfb3V0LAomIzQzOwkJICAgICAgIHNpemVvZih2YWx1ZV9vdXQpKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFTk9EQVRBKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOmZpbGVzeXN0ZW0gZGlkIG5vdCBhcHBseSBMU00geGF0dHJzXG4mIzM0OywKJiM0MzsJCSAgICAgICBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9HRShlcnIsIDAsICYjMzQ7Z2V0eGF0dHImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGVyciwgKGludClzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7eGF0dHJfdmFsdWUpLCAmIzM0O3hhdHRyX3NpemUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShzdHJuY21wKHZhbHVlX291dCwgJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OywKJiM0MzsJCQkgIHNpemVvZigmIzM0O3VuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMCYjMzQ7KSksIDAsCiYjNDM7CQkgICYjMzQ7eGF0dHJfdmFsdWUmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShmZCk7CiYjNDM7CXRlc3RfaW5pdF9pbm9kZV94YXR0cl9fZGVzdHJveShza2VsKTsKJiM0MzsJcmVtb3ZlKHRlc3RmaWxlX25ldyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovCiYjNDM7I2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0CiYjNDM7ICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLgomIzQzOyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIgKnNrZWxbSU5JVF9JTk9ERV9YQVRUUl9NQVggJiM0MzsgMV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICYjNDM7IDFdID0ge307CiYjNDM7CWNvbnN0IGNoYXIgKnRlc3RmaWxlX3Nsb3QgPSAmIzM0Oy90bXAvdGVzdF9wcm9nc19mc19rZnVuY3Nfc2xvdCYjMzQ7OwomIzQzOwlpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDsKJiM0MzsJaW50IGksIGZkID0gLTE7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm9ncmFtcyBhdHRhY2ggc3VjY2Vzc2Z1bGx5OyB0aGVyZSBpcyBubyBhdHRhY2gtdGltZSBjYXAuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0Oz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2VsW2ldID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuKCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgJiMzNDtvcGVuJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJc25wcmludGYoc2tlbFtpXS0mZ3Q7cm9kYXRhLSZndDt4YXR0cl9uYW1lLAomIzQzOwkJCSBzaXplb2Yoc2tlbFtpXS0mZ3Q7cm9kYXRhLSZndDt4YXR0cl9uYW1lKSwgJiMzNDticGYubGFiZWxfJWQmIzM0OywKJiM0MzsJCQkgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyh0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2xvYWQoc2tlbFtpXSksICYjMzQ7bG9hZCYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXNrZWxbaV0tJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwomIzQzOwomIzQzOwkJbGlua1tpXSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWxbaV0tJmd0O3Byb2dzLnRlc3RfaW5pdF9pbm9kZV94YXR0cik7CiYjNDM7CQlpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovCiYjNDM7CWZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlX2ZpbGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhhY3RseSBJTklUX0lOT0RFX1hBVFRSX01BWCBwcm9ncmFtcyBjbGFpbSBhIHNsb3Q7IHRoZSBwcm9ncmFtIHBhc3QKJiM0MzsJICogdGhlIGJ1ZGdldCBnZXRzIC1FTk9TUEMuIFRoZSBvcmRlciBpbiB3aGljaCBwcm9ncmFtcyBydW4gaXMgbm90CiYjNDM7CSAqIGd1YXJhbnRlZWQsIHNvIGNvdW50IHJlc3VsdHMgaW5zdGVhZCBvZiBpbmRleGluZy4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0Oz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcmVzID0gc2tlbFtpXS0mZ3Q7ZGF0YS0mZ3Q7aW5pdF9yZXN1bHQ7CiYjNDM7CiYjNDM7CQlpZiAocmVzID09IDApCiYjNDM7CQkJb2smIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAocmVzID09IC1FTk9TUEMpCiYjNDM7CQkJbm9zcGMmIzQzOyYjNDM7OwomIzQzOwkJZWxzZQomIzQzOwkJCW90aGVyJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCAmIzM0O3Nsb3RzX3dpdGhpbl9idWRnZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShub3NwYywgMSwgJiMzNDtzbG90X292ZXJfYnVkZ2V0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEob3RoZXIsIDAsICYjMzQ7dW5leHBlY3RlZF9yZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pOwomIzQzOwkJdGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pOwomIzQzOwl9CiYjNDM7CXJlbW92ZSh0ZXN0ZmlsZV9zbG90KTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpCiB7CiAJLyogTWF0Y2hlcyB4YXR0cl9uYW1lcyBpbiBwcm9ncy90ZXN0X2dldF94YXR0ci5jICovCkBAIC0yODgsNCAmIzQzOzQwNiwxMCBAQCB2b2lkIHRlc3RfZnNfa2Z1bmNzKHZvaWQpCiAKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2ZzdmVyaXR5JiMzNDspKQogCQl0ZXN0X2ZzdmVyaXR5KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW5pdF9pbm9kZV94YXR0ciYjMzQ7KSkKJiM0MzsJCXRlc3RfaW5pdF9pbm9kZV94YXR0cigpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2luaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdCYjMzQ7KSkKJiM0MzsJCXRlc3RfaW5pdF9pbm9kZV94YXR0cl9zbG90X2xpbWl0KCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNhYWRlNTNiODdlM2EzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jCkBAIC0wLDAgJiM0MzsxLDMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ2lzY28gU3lzdGVtcywgSW5jLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfa2Z1bmNzLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztfX3UzMiBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBpbml0X3Jlc3VsdCA9IC0xOwomIzQzOwomIzQzO2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSAmIzM0O2JwZi50ZXN0X2xhYmVsJiMzNDs7CiYjNDM7Y2hhciB4YXR0cl92YWx1ZVtdID0gJiMzNDt1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czAmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfaW5pdF9zZWN1cml0eSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgdmFsdWVfcHRyOwomIzQzOwlfX3UzMiBwaWQ7CiYjNDM7CiYjNDM7CXBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwlpZiAocGlkICE9IG1vbml0b3JlZF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwlpbml0X3Jlc3VsdCA9IGJwZl9pbml0X2lub2RlX3hhdHRyKHhhdHRycywgeGF0dHJfbmFtZSwgJmFtcDt2YWx1ZV9wdHIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBCUEYgeGF0dHIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IGludGVyZXN0aW5nIGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCBpdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgb24gYSBuZXdseSBjcmVhdGVkIGlub2RlLCBhbGwgdGhyb3VnaCB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIFRoaXMgc2VlbXMgbGlrZSBhIHBvd2VyZnVsIHRvb2wgZm9yIGVuaGFuY2VkIHNlY3VyaXR5IGVuZm9yY2VtZW50IGF0IGlub2RlIGNyZWF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBwYXRjaCByZXdyaXRlcyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIExTTSBob29rIHNpZ25hdHVyZSB0byBkZWFsIHdpdGggYHN0cnVjdCBsc21feGF0dHJzYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYHN0cnVjdCB4YXR0cmAgc2V0dXAsIGFuZCB1cGRhdGVzIHZhcmlvdXMgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIGBldm1gLCBgc2VsaW51eGAsIGFuZCBgc21hY2tgIHRvIHdvcmsgd2l0aCB0aGUgdXBkYXRlZCBzaWduYXR1cmUuIEl0IGFsc28gbG9va3MgbGlrZSBhIG5ldyBmdW5jdGlvbiBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCBoYXMgYmVlbiBhZGRlZCBmb3IgYWRkaW5nIHRoZSB4YXR0ciB0byB0aGlzIG5ldyBzdHJ1Y3QuIFRoaXMgY2hhbmdlIGFsc28gaW5jbHVkZXMgdGhlIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgQlBGIGtmdW5jLgoKVGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgdGhlIGtleSBhc3BlY3QsIHJlYWxseS4gQSBCUEYgcHJvZ3JhbSBsb2FkZWQgaW50byB0aGUga2VybmVsLCBhdHRhY2hpbmcgdG8gdGhlIGBsc20vaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vaywgY291bGQgdGhlbiBsZXZlcmFnZSB0aGlzIGBicGZfaW5pdF9pbm9kZV94YXR0cmAga2Z1bmMuIFRoaXMgbWFrZXMgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGVhc2lseSBhY2Nlc3NpYmxlLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIENsZWFybHksIGBDT05GSUdfQlBGX0xTTWAgaXMgYSBtdXN0LWhhdmUsIGFuZCBgQ09ORklHX1NFQ1VSSVRZYCBpcyBlc3NlbnRpYWwsIHNpbmNlIGl0IGludm9sdmVzIExTTSBob29rcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgcmVsYXRlZCB0byBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYCwgYW5kIGBDT05GSUdfRVZNYC4gVGhlIGNvcmUgbG9naWMgaXMgbGlrZWx5IGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhbmQgYGZzL2JwZl9mc19rZnVuY3MuY2AuIEl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IGBmcy9icGZfZnNfa2Z1bmNzLmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIGFzIHRoYXQgbWFrZXMgc2Vuc2UuCgpJJiMzOTtsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgdW5pdCB0ZXN0cyBwcm92aWRlZCBpbiB0aGUgYHNlbGZ0ZXN0c2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYGZzX2tmdW5jcy5jYCBhbmQgYHRlc3RfaW5pdF9pbm9kZV94YXR0ci5jYCDigJMgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGlzIHdvcmtzIGFuZCB3aGF0IHNvcnQgb2Ygc2NlbmFyaW9zIGFyZSBiZWluZyB0ZXN0ZWQuIFRoYXQmIzM5O2xsIGJlIGEga2V5IGRhdGEgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZzX2tmdW5jcy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTEyOT1vYmotJChDT05GSUdfWk9ORUZTX0ZTKVx0XHQmIzQzOz0gem9uZWZzL1xuZnMvTWFrZWZpbGU6MTMwOm9iai0kKENPTkZJR19CUEZfTFNNKVx0XHQmIzQzOz0gYnBmX2ZzX2tmdW5jcy5vXG5mcy9NYWtlZmlsZS0xMzEtb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXHQmIzQzOz0gcmVzY3RybC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE1NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBCUEYgTFNNIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX0JQRl9MU01gIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBicm9hZGVyIHNlY3VyaXR5IGxhbmRzY2FwZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYW5kIHRoZSBMU00gaW50ZWdyYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIEJQRiBob29rIHNob3VsZCBiZS4gSSYjMzk7bGwgYW5hbHl6ZSBob3cgdGhlIEJQRiBsb2dpYyBpcyBiZWluZyBpbnZva2VkIGluIHRoZSB4YXR0ciBhZGRpdGlvbiBwYXRoLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvbiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9sc214YXR0cl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzk3LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzk4OiAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5XG5zZWN1cml0eS9zZWN1cml0eS5jLTEzOTktICogQHhhdHRyczogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3Ncbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE0MTEtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE0MTI6aW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNDEzLVx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJhY3Rpb24gQmV0d2VlbiBMU00gYW5kIEJQRiBFeHRlbmRlZCBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVyYWN0IHdpdGggQlBGLWV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgZnVuY3Rpb24uIEkga25vdyB0aGF0IGxpdmVzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuIFRoZSByZWxhdGVkIGtmdW5jLCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCByZXNpZGVzIGluIGBmcy9icGZfZnNfa2Z1bmNzLmNgLgoKTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgY29tZSBpbnRvIHBsYXkgaGVyZS4gT2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYW55IEJQRiB1c2FnZSwgYnV0IGlmIEkmIzM5O20gZGVhbGluZyB3aXRoIExTTSBhbmQgQlBGIHRvZ2V0aGVyLCBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIFNpbmNlIGBDT05GSUdfQlBGX0xTTWAgcHJvYmFibHkgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBpbXBsaWVzIGl0KSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBDT05GSUdfQlBGX0xTTWAmIzM5O3MgZGVmaW5pdGlvbiBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfTFNNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gTFNNIEludGVncmF0aW9uIHdpdGggQlBGKioKClJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIEJQRiBhbmQgTFNNIGludGVncmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBCUEZfTFNNYCBhcmUgZGVmaW5lZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGEgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbC4gS2NvbmZpZyBmaWxlcyBhcmUgdGhlIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGV5JiMzOTtyZSB0aGUgc291cmNlIG9mIHRydXRoIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHNlYXJjaGluZyBmb3IgYEJQRl9MU01gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIGZpbGVzIGRlZmluZSBpdCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIEJQRl9MU00qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9MU01gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBub3QganVzdCB0YWtlIHRoaXMgYXQgZmFjZSB2YWx1ZSwgYnV0IGluc3RlYWQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGxpa2UgYSBwcm9wZXIgaW52ZXN0aWdhdGlvbi4gV2hlcmUgZG9lcyB0aGlzIGxpdmU/IFdoYXQgb3RoZXIgc3Vic3lzdGVtcyBkb2VzIGl0IHJlbHkgdXBvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyB0aGlzOyBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBib3R0bGVuZWNrcy4gQSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVncmF0ZSBpdC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG1hcHBpbmcgaXQgYWxsIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJQRl9MU01cbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAgOTU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgOTY6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTc6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuICA5ODpcdFx0aGVscFxuICA5OTpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTAwOlx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gMTAzOlx0XG4gMTA0Olx0ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MzAKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogODIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIExTTSB4YXR0ciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEJQRl9MU01gIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGdvaW5nIHRvIGFmZmVjdCB0aGluZ3MsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBhYm91dCBgQ09ORklHX1NFQ1VSSVRZYD8gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGNvZGUgdG8gY29tcGlsZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gQW5kIHdoYXQgYWJvdXQgdGhlIFNFTGludXgsIFNNQUNLLCBhbmQgRVZNIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYCwgYW5kIGBDT05GSUdfRVZNYD8gVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgdGhlbSB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlLCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHNob3VsZCBzdGlsbCB3b3JrLCBldmVuIGlmIHRob3NlIGFyZSAqbm90KiBlbmFibGVkLCBhcyBsb25nIGFzIGBDT05GSUdfQlBGX0xTTWAgaXMgZW5hYmxlZC4KClJpZ2h0LCBzbyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2sgaXMgY2FsbGVkIGJ5IGZpbGVzeXN0ZW0gY29kZSBsaWtlIGBleHQ0YCBvciBgYnRyZnNgIHdoZW4gYSBuZXcgaW5vZGUgaXMgY3JlYXRlZC4gSWYgSSYjMzk7bSBnb2luZyB0byBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIEkmIzM5O20gcHJldHR5IHN1cmUgSSBuZWVkIHRvIGZvY3VzIG9uIGVuYWJsaW5nIGBDT05GSUdfQlBGX0xTTWAuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIHNlZWluZyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIGZ1bmN0aW9ucy4gSSBzZWUgYGxzbV9nZXRfeGF0dHJfc2xvdGAgd2hpY2ggaXMgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQgSSBhbHNvIHNlZSBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YCBhcmUgYXZhaWxhYmxlIGFzIHdlbGwuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgaW1wYWN0IHRoaXMuIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19CUEZfTFNNYCBpcyB0aGUgbWFpbiBvbmUuIEkgKnRoaW5rKiBgQ09ORklHX1NFQ1VSSVRZYCBpcyByZXF1aXJlZCBmb3IgYEJQRl9MU01gLCBzbyB0aGF0IGlzIHByb2JhYmx5IHRoZSBtYWluIGRlcGVuZGVuY3kuCgpMZXQgbWUgZ28gYmFjayB0byB0aGUgcGF0Y2ggYWdhaW4uCgpgYGBjCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZV9fc3RyLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKQpgYGAKYGBgYwomIzQzO2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAomIzQzOwkJCSAgc2l6ZV90IHZhbHVlX2xlbikKYGBgCmBgYGMKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwKIAkJCQkgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKQpgYGAKClRoZSBrZXkgZm9jdXMgaXMgb24gdGhvc2UgbmV3IHNpZ25hdHVyZXMuCgpTbywganVzdCB0byBzdW1tYXJpemU6CgoqICAgKipGb2N1cyBTeW1ib2xzKio6IGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBhbmQgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgLgoqICAgKipDb25maWdzKio6IGBCUEZfTFNNYCAod2l0aCBhbiBpbXBsaWVkIGRlcGVuZGVuY3kgb24gYFNFQ1VSSVRZYCkuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYywgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYWxsb3dpbmcgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIG9uIG5ld2x5IGNyZWF0ZWQgaW5vZGVzIGR1cmluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIEl0IGFsc28gbW9kaWZpZXMgdGhlIExTTSBob29rJiMzOTtzIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBhY3R1YWxseSBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIHRoZSB4YXR0ci4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgYm90aCB0aGUga2VybmVsJiMzOTtzIExTTSBhbmQgQlBGIHN1YnN5c3RlbXMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGEgQlBGIHByb2dyYW0gYW5kIGNyZWF0aW5nIGZpbGVzLCB0aGVyZWZvcmUsIGZ1enppbmcgd2lsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmMsIGFuZCB0aG9zZSBtb2RpZmllZCBzZWN1cml0eSBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSAtLSB5ZXMsIGl0JiMzOTtzIGludm9rZWQgYnkgZmlsZXN5c3RlbXMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLCB3aGljaCBpcyBnb29kLiBJcyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCByZWFjaGFibGU/IFllcywgdGhyb3VnaCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLgoKRG8gSSBuZWVkIG90aGVyIGNvbmZpZ3VyYXRpb25zPyBQZXJoYXBzLCBgQ09ORklHX0VWTWAsIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIG9yIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgPyBUaGV5IGFyZSBtb2RpZmllZCwgeWVzLCBidXQgdGhlICpjb3JlKiBsb2dpYyBJIG5lZWQgdG8gZnV6eiBpcyB0aGUgQlBGIGtmdW5jIGFuZCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgd2hpY2ggbWVhbnMgZW5hYmxpbmcgYEJQRl9MU01gICpzaG91bGQqIGJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGUgbmV3IGZlYXR1cmUgcHJvcGVybHkuCgpBbHJpZ2h0LCB0aW1lIHRvIHVzZSB0aGF0IGBzZXQtcmVzdWx0c2AgdG9vbC4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbml0X2lub2RlX3hhdHRyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2xzbXhhdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjMzLjAzMTA1Njc3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTY0Mjg2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5pdF9pbm9kZV94YXR0clwiLFxuICAgIFwic2VjdXJpdHlfbHNteGF0dHJfYWRkXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pbml0X2lub2RlX3hhdHRyYCB3aGljaCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgeGF0dHJzIG9uIGEgbmV3IGlub2RlIGR1cmluZyB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIEl0IG1vZGlmaWVzIHRoZSBMU00gaG9vayBzaWduYXR1cmUgYW5kIGltcGxlbWVudHMgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgdG8gaGFuZGxlIHRoZSB4YXR0ciBhZGRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgTFNNIGFuZCBCUEYgc3Vic3lzdGVtcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSBhbmQgY3JlYXRpbmcgZmlsZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmMgYW5kIHRoZSBtb2RpZmllZCBzZWN1cml0eSBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjMzLjAzMTA2NTI1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NzY3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2RiOGI0MmZjZjZmNmE1MjI4OTgzOGI0YmVlYTU5N2QzZjc4NmU5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjMyOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbmluZGV4IDc2OGFjYTJkYzBmMDM0Li5hZDAwMjVmMjI2NGE4YiAxMDA2NDRcXG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcXG4rKysgYi9mcy9icGZfZnNfa2Z1bmNzLmNcXG5AQCAtMTEsNyArMTEsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjdXJpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhdHRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2xzbS5oXFx1MDAzZVxcbiBcXG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbiBcXG5AQCAtMzc0LDYgKzM3NiwzOSBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIGRfcmVhbF9pbm9kZShkZW50cnkpO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XFxuKyAqIEB4YXR0cnM6IGlub2RlX2luaXRfc2VjdXJpdHkgeGF0dHIgc3RhdGUgZnJvbSB0aGUgaG9vayBjb250ZXh0XFxuKyAqIEBuYW1lX19zdHI6IHhhdHRyIG5hbWUgKGUuZy4sIFxcXCJicGYuZmlsZV9sYWJlbFxcXCIpXFxuKyAqIEB2YWx1ZV9wOiBkeW5wdHIgY29udGFpbmluZyB0aGUgeGF0dHIgdmFsdWVcXG4rICpcXG4rICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS5cXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICp2YWx1ZV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXZhbHVlX3A7XFxuK1xcdGNvbnN0IHZvaWQgKnZhbHVlO1xcbitcXHR1MzIgdmFsdWVfbGVuO1xcbitcXG4rXFx0aWYgKCFuYW1lX19zdHIpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoc3RybmNtcChuYW1lX19zdHIsIFhBVFRSX0JQRl9MU01fU1VGRklYLFxcbitcXHRcXHQgICAgc2l6ZW9mKFhBVFRSX0JQRl9MU01fU1VGRklYKSAtIDEpKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0dmFsdWVfbGVuID0gX19icGZfZHlucHRyX3NpemUodmFsdWVfcHRyKTtcXG4rXFx0dmFsdWUgPSBfX2JwZl9keW5wdHJfZGF0YSh2YWx1ZV9wdHIsIHZhbHVlX2xlbik7XFxuK1xcdGlmICghdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCh4YXR0cnMsIExTTV9JRF9CUEYsIG5hbWVfX3N0ciwgdmFsdWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdmFsdWVfbGVuKTtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4gXFxuIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXFxuQEAgLTM4NSw2ICs0MjAsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9maWxlX3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWFsX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyKVxcbiBCVEZfS0ZVTkNTX0VORChicGZfZnNfa2Z1bmNfc2V0X2lkcylcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oIGIvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG5pbmRleCBkZGEyNzJkNzhmMDEzZi4uMzc0YzUwODAxYThjNmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxcbkBAIC0yMSw2ICsyMSw5IEBAIGV4dGVybiBib29sIGJwZl9sc21faW5pdGlhbGl6ZWQgX19yb19hZnRlcl9pbml0O1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbHNtX2hvb2tfZGVmcy5oXFx1MDAzZVxcbiAjdW5kZWYgTFNNX0hPT0tcXG4gXFxuKy8qIG1heCBicGYgeGF0dHJzIHBlciBpbm9kZSAqL1xcbisjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxcbitcXG4gc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2Ige1xcbiBcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgX19yY3UgKnN0b3JhZ2U7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuaW5kZXggOTEzZjQ1NzNiMjAzOGUuLjUyOGYzNjBmMzMwOGRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZXZtLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V2bS5oXFxuQEAgLTEyLDYgKzEyLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVncml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgveGF0dHIuaFxcdTAwM2VcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzO1xcbitcXG4gI2lmZGVmIENPTkZJR19FVk1cXG4gZXh0ZXJuIGludCBldm1fc2V0X2tleSh2b2lkICprZXksIHNpemVfdCBrZXlsZW4pO1xcbiBleHRlcm4gZW51bSBpbnRlZ3JpdHlfc3RhdHVzIGV2bV92ZXJpZnl4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuQEAgLTIxLDggKzIzLDggQEAgZXh0ZXJuIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcXG4gXFx0XFx0IGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTtcXG4gaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHQgICAgaW50ICp4YXR0cl9jb3VudCk7XFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpO1xcbiBleHRlcm4gYm9vbCBldm1fcmV2YWxpZGF0ZV9zdGF0dXMoY29uc3QgY2hhciAqeGF0dHJfbmFtZSk7XFxuIGV4dGVybiBpbnQgZXZtX3Byb3RlY3RlZF94YXR0cl9pZl9lbmFibGVkKGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lKTtcXG4gZXh0ZXJuIGludCBldm1fcmVhZF9wcm90ZWN0ZWRfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdTggKmJ1ZmZlcixcXG5AQCAtNjMsOCArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG5pbmRleCA2NWM5NjA5ZWMyMDc3MC4uNWIyZGU3ODY1Y2U4MWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC0xMTYsOCArMTE2LDggQEAgTFNNX0hPT0soaW50LCAwLCBpbm9kZV9hbGxvY19zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1LCB2b2lkICppbm9kZV9zZWN1cml0eSlcXG4gTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdCBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbitcXHQgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcXG5pbmRleCBiNGY4Y2FkNTNkZGIwMy4uN2FmZTA2YThkNGM2YzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcXG5AQCAtMjAwLDIwICsyMDAsMTggQEAgZXh0ZXJuIHN0cnVjdCBsc21fc3RhdGljX2NhbGxzX3RhYmxlIHN0YXRpY19jYWxsc190YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiAvKipcXG4gICogbHNtX2dldF94YXR0cl9zbG90IC0gUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGFuZCBpbmNyZW1lbnQgdGhlIGluZGV4XFxuLSAqIEB4YXR0cnM6IGFycmF5IHN0b3JpbmcgTFNNLXByb3ZpZGVkIHhhdHRyc1xcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEBjdHg6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuICAqXFxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXFxuLSAqIGFuZCBpbmNyZW1lbnQgQHhhdHRyX2NvdW50LlxcbisgKiBSZXRyaWV2ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIEBjdHgtXFx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cXG4rICogeGF0dHIsIGFuZCBpbmNyZW1lbnQgQGN0eC1cXHUwMDNleGF0dHJfY291bnQuXFxuICAqXFxuLSAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAeGF0dHJzIGlmIG5vbi1OVUxMLCBOVUxMIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEBjdHgtXFx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXR0ciAqbHNtX2dldF94YXR0cl9zbG90KHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICp4YXR0cl9jb3VudClcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseSgheGF0dHJzKSlcXG4rXFx0aWYgKHVubGlrZWx5KCFjdHggfHwgIWN0eC1cXHUwMDNleGF0dHJzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdHJldHVybiBcXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xcbitcXHRyZXR1cm4gXFx1MDAyNmN0eC1cXHUwMDNleGF0dHJzW2N0eC1cXHUwMDNleGF0dHJfY291bnQrK107XFxuIH1cXG4gXFxuICNlbmRpZiAvKiAhIF9fTElOVVhfTFNNX0hPT0tTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmODguLjY0N2Y3Yjg4MzU4YjJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbkBAIC02OCw2ICs2OCwxMSBAQCBzdHJ1Y3Qgd2F0Y2g7XFxuIHN0cnVjdCB3YXRjaF9ub3RpZmljYXRpb247XFxuIHN0cnVjdCBsc21fY3R4O1xcbiBcXG4rc3RydWN0IGxzbV94YXR0cnMge1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4rXFx0dW5zaWduZWQgaW50IHhhdHRyX2NvdW50O1xcbit9O1xcbitcXG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXFxuICNkZWZpbmUgQ0FQX09QVF9OT05FIDB4MFxcbiAvKiBJZiBjYXBhYmxlIHNob3VsZCBhdWRpdCB0aGUgc2VjdXJpdHkgcmVxdWVzdCAqL1xcbkBAIC00MDEsNiArNDA2LDkgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxcbiBcXHRcXHRcXHRcXHQgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKTtcXG4raW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxcbitcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbitcXHRcXHRcXHQgIHNpemVfdCB2YWx1ZV9sZW4pO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xcbkBAIC04OTUsNiArOTAzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0c2l6ZV90IHZhbHVlX2xlbilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2JwZi9ob29rcy5jIGIvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG5pbmRleCA3Yjk4ZjVkMWUyYmU4My4uOGY4YzNkZTMwMzVmMDEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9icGYvaG9va3MuY1xcbkBAIC0zMyw2ICszMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9sc21faW5pdCh2b2lkKVxcbiBcXG4gc3RydWN0IGxzbV9ibG9iX3NpemVzIGJwZl9sc21fYmxvYl9zaXplcyBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2IpLFxcbitcXHQubGJzX3hhdHRyX2NvdW50ID0gQlBGX0xTTV9JTk9ERV9JTklUX1hBVFRSUyxcXG4gfTtcXG4gXFxuIERFRklORV9MU00oYnBmKSA9IHtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXFxuaW5kZXggYjU5ZTNmMTIxYjhhODkuLmI3MTU4ZmM2MzU0M2UwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xcbkBAIC0xMDYyLDE0ICsxMDYyLDE2IEBAIHN0YXRpYyBpbnQgZXZtX2lub2RlX2NvcHlfdXBfeGF0dHIoc3RydWN0IGRlbnRyeSAqc3JjLCBjb25zdCBjaGFyICpuYW1lKVxcbiAgKiBldm1faW5vZGVfaW5pdF9zZWN1cml0eSAtIGluaXRpYWxpemVzIHNlY3VyaXR5LmV2bSBITUFDIHZhbHVlXFxuICAqL1xcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IHhhdHRyICp4YXR0cnMsXFxuLVxcdFxcdFxcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqbHNtX3hhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXZtX3hhdHRyICp4YXR0cl9kYXRhO1xcbiBcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyLCAqZXZtX3hhdHRyO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcXG4gXFx0Ym9vbCBldm1fcHJvdGVjdGVkX3hhdHRycyA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR4YXR0cnMgPSBsc21feGF0dHJzID8gbHNtX3hhdHRycy1cXHUwMDNleGF0dHJzIDogTlVMTDtcXG4gXFx0aWYgKCEoZXZtX2luaXRpYWxpemVkIFxcdTAwMjYgRVZNX0lOSVRfSE1BQykgfHwgIXhhdHRycylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMDg3LDcgKzEwODksNyBAQCBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRldm1feGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QobHNtX3hhdHRycyk7XFxuIFxcdC8qXFxuIFxcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXFxuIFxcdCAqIHhhdHRyIHNsb3QuXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggNzFhZWE4ZmRmMDE0MjkuLjI2MWY2OGUxN2NmZGEwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBwcl9mbXQoZm10KSBcXFwiTFNNOiBcXFwiIGZtdFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2xzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGNhY2hlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG5AQCAtMTMzMyw4ICsxMzM0LDggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBpbml0eGF0dHJzIGluaXR4YXR0cnMsIHZvaWQgKmZzX2RhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGxzbV9zdGF0aWNfY2FsbCAqc2NhbGw7XFxuLVxcdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XFxuLVxcdGludCByZXQgPSAtRU9QTk9UU1VQUCwgeGF0dHJfY291bnQgPSAwO1xcbitcXHRzdHJ1Y3QgbHNtX3hhdHRycyB4YXR0cnMgPSB7fTtcXG4rXFx0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTEzNDQsMTUgKzEzNDUsMTUgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcbiBcXHRpZiAoaW5pdHhhdHRycykge1xcbiBcXHRcXHQvKiBBbGxvY2F0ZSArMSBhcyB0ZXJtaW5hdG9yLiAqL1xcbi1cXHRcXHRuZXdfeGF0dHJzID0ga2NhbGxvYyhibG9iX3NpemVzLmxic194YXR0cl9jb3VudCArIDEsXFxuLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAoIW5ld194YXR0cnMpXFxuK1xcdFxcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcXG4rXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xcbitcXHRcXHRpZiAoIXhhdHRycy54YXR0cnMpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbiBcXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xcbi1cXHRcXHRyZXQgPSBzY2FsbC1cXHUwMDNlaGwtXFx1MDAzZWhvb2suaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLCBuZXdfeGF0dHJzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cl9jb3VudCk7XFxuK1xcdFxcdHJldCA9IHNjYWxsLVxcdTAwM2VobC1cXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnhhdHRycyk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0LypcXG5AQCAtMTM2NCwxOCArMTM2NSwxMDEgQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xcbi1cXHRpZiAoIXhhdHRyX2NvdW50KVxcbitcXHRpZiAoIXhhdHRycy54YXR0cl9jb3VudClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRyZXQgPSBpbml0eGF0dHJzKGlub2RlLCBuZXdfeGF0dHJzLCBmc19kYXRhKTtcXG4rXFx0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7XFxuIG91dDpcXG4tXFx0Zm9yICg7IHhhdHRyX2NvdW50IFxcdTAwM2UgMDsgeGF0dHJfY291bnQtLSlcXG4tXFx0XFx0a2ZyZWUobmV3X3hhdHRyc1t4YXR0cl9jb3VudCAtIDFdLnZhbHVlKTtcXG4tXFx0a2ZyZWUobmV3X3hhdHRycyk7XFxuK1xcdGZvciAoOyB4YXR0cnMueGF0dHJfY291bnQgXFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcXG4rXFx0XFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XFxuK1xcdGtmcmVlKHhhdHRycy54YXR0cnMpO1xcbiBcXHRyZXR1cm4gKHJldCA9PSAtRU9QTk9UU1VQUCkgPyAwIDogcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rc3RhdGljIHVuc2lnbmVkIGludCBsc21feGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKnByZWZpeClcXG4re1xcbitcXHRzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpO1xcbitcXHR1bnNpZ25lZCBpbnQgaSwgbiA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgeGF0dHJzLVxcdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtXFx1MDAzZXhhdHRyc1tpXS5uYW1lO1xcbitcXG4rXFx0XFx0aWYgKG5hbWUgXFx1MDAyNlxcdTAwMjYgIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSlcXG4rXFx0XFx0XFx0bisrO1xcbitcXHR9XFxuK1xcdHJldHVybiBuO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitcXG4rLyoqXFxuKyAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5XFxuKyAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuKyAqIEBsc21faWQ6IExTTV9JRF8qIHZhbHVlIGlkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIExTTVxcbisgKiBAbmFtZTogeGF0dHIgbmFtZSBzdWZmaXhcXG4rICogQHZhbHVlOiB4YXR0ciB2YWx1ZVxcbisgKiBAdmFsdWVfbGVuOiBsZW5ndGggb2YgQHZhbHVlXFxuKyAqXFxuKyAqIENsYWltIGFuIHhhdHRyIHNsb3QgaW4gQHhhdHRycyBvbiBiZWhhbGYgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XFxuKyAqIEBsc21faWQgYW5kIGZpbGwgaXQgd2l0aCBhIGNvcHkgb2YgQG5hbWUgYW5kIEB2YWx1ZS4gQ2FsbGVycyBjYW4gaW52b2tlXFxuKyAqIHRoaXMgZnVuY3Rpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHQuXFxuKyAqXFxuKyAqIFJldHVybjogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlIGNhbGxpbmcgTFNNJ3Mgc2xvdCBidWRnZXRcXG4rICogICAgICAgICBpcyBleGhhdXN0ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvbiBvdGhlciBlcnJvcnMuXFxuKyAqL1xcbitpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXFxuK1xcdFxcdFxcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXFxuK1xcdFxcdFxcdCAgc2l6ZV90IHZhbHVlX2xlbilcXG4re1xcbitcXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xcbitcXHR2b2lkICp4YXR0cl92YWx1ZTtcXG4rXFx0c2l6ZV90IG5hbWVfbGVuO1xcbitcXG4rXFx0aWYgKCF4YXR0cnMgfHwgIXhhdHRycy1cXHUwMDNleGF0dHJzIHx8ICFuYW1lIHx8ICF2YWx1ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTtcXG4rXFx0aWYgKG5hbWVfbGVuID09IDAgfHwgbmFtZV9sZW4gXFx1MDAzZSBYQVRUUl9OQU1FX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICh2YWx1ZV9sZW4gPT0gMCB8fCB2YWx1ZV9sZW4gXFx1MDAzZSBYQVRUUl9TSVpFX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzd2l0Y2ggKGxzbV9pZCkge1xcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rXFx0Y2FzZSBMU01fSURfQlBGOlxcbitcXHRcXHRpZiAobHNtX3hhdHRyc191c2VkKHhhdHRycywgWEFUVFJfQlBGX0xTTV9TVUZGSVgpIFxcdTAwM2U9XFxuK1xcdFxcdCAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cXG4rXFx0eGF0dHJfdmFsdWUgPSBrbWFsbG9jKHZhbHVlX2xlbiArIG5hbWVfbGVuICsgMSwgR0ZQX05PV0FJVCk7XFxuK1xcdGlmICgheGF0dHJfdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlLCB2YWx1ZSwgdmFsdWVfbGVuKTtcXG4rXFx0bWVtY3B5KHhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuLCBuYW1lLCBuYW1lX2xlbik7XFxuK1xcdCgoY2hhciAqKXhhdHRyX3ZhbHVlKVt2YWx1ZV9sZW4gKyBuYW1lX2xlbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzKTtcXG4rXFx0aWYgKCF4YXR0cikge1xcbitcXHRcXHRrZnJlZSh4YXR0cl92YWx1ZSk7XFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHR9XFxuK1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWUgPSB4YXR0cl92YWx1ZTtcXG4rXFx0eGF0dHItXFx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuO1xcbitcXHR4YXR0ci1cXHUwMDNldmFsdWVfbGVuID0gdmFsdWVfbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oKSAtIEluaXRpYWxpemUgYW4gYW5vbnltb3VzIGlub2RlXFxuICAqIEBpbm9kZTogdGhlIGlub2RlXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbmluZGV4IDFhNzEzZDk2MjA2ZjU5Li42YmJhNmIyMTJlMTdjNSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjk2Miw3ICsyOTYyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSxcXG4gXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7XFxuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIShzYnNlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQkxBQkVMX01OVCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXHRpZiAoeGF0dHIpIHtcXG4gXFx0XFx0cmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dF9mb3JjZShuZXdzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjb250ZXh0LCBcXHUwMDI2Y2xlbik7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCBmZjExNTA2OGM1YzA2Zi4uNDUwMTA3ODQzMGNhMDUgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbkBAIC05ODEsMTAgKzk4MSwxMCBAQCBzbWtfcnVsZV90cmFuc211dGVzKHN0cnVjdCBzbWFja19rbm93biAqc3ViamVjdCxcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi14YXR0cl9kdXB2YWwoc3RydWN0IHhhdHRyICp4YXR0cnMsIGludCAqeGF0dHJfY291bnQsXFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxcbiBcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xcbitcXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xcbiBcXG4gXFx0aWYgKCF4YXR0cilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTEwMDMsMTQgKzEwMDMsMTMgQEAgeGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXFxuICAqIEBkaXI6IGNvbnRhaW5pbmcgZGlyZWN0b3J5IG9iamVjdFxcbiAgKiBAcXN0cjogdW51c2VkXFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xcbi0gKiBAeGF0dHJfY291bnQ6IGN1cnJlbnQgbnVtYmVyIG9mIExTTS1wcm92aWRlZCB4YXR0cnMgKHVwZGF0ZWQpXFxuKyAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCBhdHRyaWJ1dGVzIGFuZCB1cGRhdGUgY291bnRcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGl0IGFsbCB3b3JrcyBvdXQsIC1FTk9NRU0gaWYgdGhlcmUncyBubyBtZW1vcnlcXG4gICovXFxuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbiB7XFxuIFxcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcXG4gXFx0c3RydWN0IGlub2RlX3NtYWNrICogY29uc3QgaXNzcCA9IHNtYWNrX2lub2RlKGlub2RlKTtcXG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdFxcdHRyYW5zZmxhZyA9IFNNS19JTk9ERV9UUkFOU01VVEU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXFxuLVxcdFxcdFxcdFxcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRSxcXG4tXFx0XFx0XFx0XFx0VFJBTlNfVFJVRV9TSVpFXFxuLVxcdFxcdFxcdCkpXFxuK1xcdFxcdFxcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxcbitcXHRcXHRcXHRcXHRcXHQgVFJBTlNfVFJVRSxcXG4rXFx0XFx0XFx0XFx0XFx0IFRSQU5TX1RSVUVfU0laRSkpXFxuIFxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmMgPT0gMClcXG4tXFx0XFx0aWYgKHhhdHRyX2R1cHZhbCh4YXR0cnMsIHhhdHRyX2NvdW50LFxcbi1cXHRcXHRcXHQgICAgWEFUVFJfU01BQ0tfU1VGRklYLFxcbi1cXHRcXHRcXHQgICAgaXNzcC1cXHUwMDNlc21rX2lub2RlLVxcdTAwM2VzbWtfa25vd24sXFxuLVxcdFxcdCAgICAgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKVxcbi1cXHRcXHQpKVxcbitcXHRcXHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycyxcXG4rXFx0XFx0XFx0XFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcXG4rXFx0XFx0XFx0XFx0IGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duLFxcbitcXHRcXHRcXHRcXHQgc3RybGVuKGlzc3AtXFx1MDAzZXNta19pbm9kZS1cXHUwMDNlc21rX2tub3duKSkpXFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gaW5zdGFudF9pbm9kZTpcXG4gXFx0aXNzcC1cXHUwMDNlc21rX2ZsYWdzIHw9IChTTUtfSU5PREVfSU5TVEFOVCB8IHRyYW5zZmxhZyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oXFxuQEAgLTkyLDQgKzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3AsIGludCBmbGFncykgX19rc3ltIF9fd2VhaztcXG4gZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhaztcXG4gXFxuK3N0cnVjdCBsc21feGF0dHJzO1xcbitleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApIF9fa3N5bSBfX3dlYWs7XFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbmluZGV4IDQzYTI2ZWM2OWE4ZTM2Li4xMGJlMGFiOTFlNzA2MSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInRlc3RfZ2V0X3hhdHRyLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2V0X3JlbW92ZV94YXR0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0ci5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXFxcIi90bXAvdGVzdF9wcm9nc19mc19rZnVuY3NcXFwiO1xcbiBcXG5AQCAtMjY4LDYgKzI2OSwxMjMgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxcbiBcXHRyZW1vdmUodGVzdGZpbGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2luaXRfaW5vZGVfeGF0dHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTEsIGVycjtcXG4rXFx0Y2hhciB2YWx1ZV9vdXRbNjRdO1xcbitcXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9uZXcgPSBcXFwiL3RtcC90ZXN0X3Byb2dzX2ZzX2tmdW5jc19uZXdcXFwiO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gdGVzdF9pbml0X2lub2RlX3hhdHRyX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfaW5pdF9pbm9kZV94YXR0cl9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5ICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZV9maWxlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0LCAwLCBcXFwiaW5pdF9yZXN1bHRcXFwiKTtcXG4rXFxuK1xcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXFxcInNlY3VyaXR5LlxcXCIgdG8gdGhlIG5hbWUuICovXFxuK1xcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXFxcInNlY3VyaXR5LmJwZi50ZXN0X2xhYmVsXFxcIiwgdmFsdWVfb3V0LFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHZhbHVlX291dCkpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDpmaWxlc3lzdGVtIGRpZCBub3QgYXBwbHkgTFNNIHhhdHRyc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRpZiAoIUFTU0VSVF9HRShlcnIsIDAsIFxcXCJnZXR4YXR0clxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9FUShlcnIsIChpbnQpc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXhhdHRyX3ZhbHVlKSwgXFxcInhhdHRyX3NpemVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHN0cm5jbXAodmFsdWVfb3V0LCBcXFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXFxcIixcXG4rXFx0XFx0XFx0ICBzaXplb2YoXFxcInVuY29uZmluZWRfdTpvYmplY3Rfcjp1c2VyX2hvbWVfdDpzMFxcXCIpKSwgMCxcXG4rXFx0XFx0ICBcXFwieGF0dHJfdmFsdWVcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9uZXcpO1xcbit9XFxuK1xcbisvKiBLZWVwIGluIHN5bmMgd2l0aCBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTIGluIGluY2x1ZGUvbGludXgvYnBmX2xzbS5oLiAqL1xcbisjZGVmaW5lIElOSVRfSU5PREVfWEFUVFJfTUFYIDRcXG4rXFxuKy8qXFxuKyAqIFByb2dyYW1zIG1heSBhdHRhY2ggdG8gaW5vZGVfaW5pdF9zZWN1cml0eSB3aXRob3V0IGFuIGF0dGFjaC10aW1lIGxpbWl0LCBidXRcXG4rICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxcbisgKiBDYWxscyBiZXlvbmQgdGhhdCBidWRnZXQgYXJlIHJlamVjdGVkIGF0IHJ1bnRpbWUgd2l0aCAtRU5PU1BDLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcXG4rXFx0Y29uc3QgY2hhciAqdGVzdGZpbGVfc2xvdCA9IFxcXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcXFwiO1xcbitcXHRpbnQgb2sgPSAwLCBub3NwYyA9IDAsIG90aGVyID0gMDtcXG4rXFx0aW50IGksIGZkID0gLTE7XFxuK1xcbitcXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXFxcIm9wZW5cXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRzbnByaW50Zihza2VsW2ldLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZXhhdHRyX25hbWUsXFxuK1xcdFxcdFxcdCBzaXplb2Yoc2tlbFtpXS1cXHUwMDNlcm9kYXRhLVxcdTAwM2V4YXR0cl9uYW1lKSwgXFxcImJwZi5sYWJlbF8lZFxcXCIsXFxuK1xcdFxcdFxcdCBpKTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX09LKHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fbG9hZChza2VsW2ldKSwgXFxcImxvYWRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRza2VsW2ldLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4rXFxuK1xcdFxcdGxpbmtbaV0gPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsW2ldLVxcdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBpbm9kZV9pbml0X3NlY3VyaXR5IG9uY2Ugd2l0aCBhbGwgcHJvZ3JhbXMgYXR0YWNoZWQuICovXFxuK1xcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVfZmlsZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEV4YWN0bHkgSU5JVF9JTk9ERV9YQVRUUl9NQVggcHJvZ3JhbXMgY2xhaW0gYSBzbG90OyB0aGUgcHJvZ3JhbSBwYXN0XFxuK1xcdCAqIHRoZSBidWRnZXQgZ2V0cyAtRU5PU1BDLiBUaGUgb3JkZXIgaW4gd2hpY2ggcHJvZ3JhbXMgcnVuIGlzIG5vdFxcbitcXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcXG4rXFx0XFx0aW50IHJlcyA9IHNrZWxbaV0tXFx1MDAzZWRhdGEtXFx1MDAzZWluaXRfcmVzdWx0O1xcbitcXG4rXFx0XFx0aWYgKHJlcyA9PSAwKVxcbitcXHRcXHRcXHRvaysrO1xcbitcXHRcXHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcXG4rXFx0XFx0XFx0bm9zcGMrKztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvdGhlcisrO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEob2ssIElOSVRfSU5PREVfWEFUVFJfTUFYLCBcXFwic2xvdHNfd2l0aGluX2J1ZGdldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEobm9zcGMsIDEsIFxcXCJzbG90X292ZXJfYnVkZ2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShvdGhlciwgMCwgXFxcInVuZXhwZWN0ZWRfcmVzdWx0XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gSU5JVF9JTk9ERV9YQVRUUl9NQVg7IGkrKykge1xcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShsaW5rW2ldKTtcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWxbaV0pO1xcbitcXHR9XFxuK1xcdHJlbW92ZSh0ZXN0ZmlsZV9zbG90KTtcXG4rfVxcbitcXG4gdm9pZCB0ZXN0X2ZzX2tmdW5jcyh2b2lkKVxcbiB7XFxuIFxcdC8qIE1hdGNoZXMgeGF0dHJfbmFtZXMgaW4gcHJvZ3MvdGVzdF9nZXRfeGF0dHIuYyAqL1xcbkBAIC0yODgsNCArNDA2LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcXG4gXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmc3Zlcml0eVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2ZzdmVyaXR5KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdF9pbm9kZV94YXR0clxcXCIpKVxcbitcXHRcXHR0ZXN0X2luaXRfaW5vZGVfeGF0dHIoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXRcXFwiKSlcXG4rXFx0XFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jYWFkZTUzYjg3ZTNhM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfa2Z1bmNzLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK19fdTMyIG1vbml0b3JlZF9waWQ7XFxuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xcbitcXG4rY29uc3QgY2hhciB4YXR0cl9uYW1lWzE2XSA9IFxcXCJicGYudGVzdF9sYWJlbFxcXCI7XFxuK2NoYXIgeGF0dHJfdmFsdWVbXSA9IFxcXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcXFwiO1xcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfaW5pdF9zZWN1cml0eVxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIHZhbHVlX3B0cjtcXG4rXFx0X191MzIgcGlkO1xcbitcXG4rXFx0cGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fbWVtKHhhdHRyX3ZhbHVlLCBzaXplb2YoeGF0dHJfdmFsdWUpLCAwLCBcXHUwMDI2dmFsdWVfcHRyKTtcXG4rXFx0aW5pdF9yZXN1bHQgPSBicGZfaW5pdF9pbm9kZV94YXR0cih4YXR0cnMsIHhhdHRyX25hbWUsIFxcdTAwMjZ2YWx1ZV9wdHIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6MzMuNTYxNDMyMjc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAzMzkwMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIExTTSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGEgQlBGIHByb2dyYW0gYW5kIGNyZWF0aW5nIGZpbGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jIGFuZCB0aGUgbW9kaWZpZWQgc2VjdXJpdHkgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdkYjhiNDJmY2Y2ZjZhNTIyODk4MzhiNGJlZWE1OTdkM2Y3ODZlOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjMyOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5pbmRleCA3NjhhY2EyZGMwZjAzNC4uYWQwMDI1ZjIyNjRhOGIgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTExLDcgKzExLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbHNtLmhcdTAwM2VcbiBcbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG5AQCAtMzc0LDYgKzM3NiwzOSBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgaW5vZGUgKmJwZl9yZWFsX2lub2RlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBkX3JlYWxfaW5vZGUoZGVudHJ5KTtcbiB9XG4gXG4rLyoqXG4rICogYnBmX2luaXRfaW5vZGVfeGF0dHIgLSBzZXQgYW4geGF0dHIgb24gYSBuZXcgaW5vZGUgZnJvbSBpbm9kZV9pbml0X3NlY3VyaXR5XG4rICogQHhhdHRyczogaW5vZGVfaW5pdF9zZWN1cml0eSB4YXR0ciBzdGF0ZSBmcm9tIHRoZSBob29rIGNvbnRleHRcbisgKiBAbmFtZV9fc3RyOiB4YXR0ciBuYW1lIChlLmcuLCBcImJwZi5maWxlX2xhYmVsXCIpXG4rICogQHZhbHVlX3A6IGR5bnB0ciBjb250YWluaW5nIHRoZSB4YXR0ciB2YWx1ZVxuKyAqXG4rICogT25seSBjYWxsYWJsZSBmcm9tIGxzbS9pbm9kZV9pbml0X3NlY3VyaXR5IHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4rXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnZhbHVlX3ApXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqdmFsdWVfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKil2YWx1ZV9wO1xuK1x0Y29uc3Qgdm9pZCAqdmFsdWU7XG4rXHR1MzIgdmFsdWVfbGVuO1xuK1xuK1x0aWYgKCFuYW1lX19zdHIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHN0cm5jbXAobmFtZV9fc3RyLCBYQVRUUl9CUEZfTFNNX1NVRkZJWCxcbitcdFx0ICAgIHNpemVvZihYQVRUUl9CUEZfTFNNX1NVRkZJWCkgLSAxKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHZhbHVlX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHZhbHVlX3B0cik7XG4rXHR2YWx1ZSA9IF9fYnBmX2R5bnB0cl9kYXRhKHZhbHVlX3B0ciwgdmFsdWVfbGVuKTtcbitcdGlmICghdmFsdWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCh4YXR0cnMsIExTTV9JRF9CUEYsIG5hbWVfX3N0ciwgdmFsdWUsXG4rXHRcdFx0XHQgICAgIHZhbHVlX2xlbik7XG4rfVxuK1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gQlRGX0tGVU5DU19TVEFSVChicGZfZnNfa2Z1bmNfc2V0X2lkcylcbkBAIC0zODUsNiArNDIwLDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZmlsZV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pbml0X2lub2RlX3hhdHRyKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9sc20uaFxuaW5kZXggZGRhMjcyZDc4ZjAxM2YuLjM3NGM1MDgwMWE4YzZkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfbHNtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2xzbS5oXG5AQCAtMjEsNiArMjEsOSBAQCBleHRlcm4gYm9vbCBicGZfbHNtX2luaXRpYWxpemVkIF9fcm9fYWZ0ZXJfaW5pdDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sc21faG9va19kZWZzLmhcdTAwM2VcbiAjdW5kZWYgTFNNX0hPT0tcbiBcbisvKiBtYXggYnBmIHhhdHRycyBwZXIgaW5vZGUgKi9cbisjZGVmaW5lIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgNFxuK1xuIHN0cnVjdCBicGZfc3RvcmFnZV9ibG9iIHtcbiBcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSBfX3JjdSAqc3RvcmFnZTtcbiB9O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZtLmggYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5pbmRleCA5MTNmNDU3M2IyMDM4ZS4uNTI4ZjM2MGYzMzA4ZGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V2bS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V2bS5oXG5AQCAtMTIsNiArMTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVncml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGF0dHIuaFx1MDAzZVxuIFxuK3N0cnVjdCBsc21feGF0dHJzO1xuK1xuICNpZmRlZiBDT05GSUdfRVZNXG4gZXh0ZXJuIGludCBldm1fc2V0X2tleSh2b2lkICprZXksIHNpemVfdCBrZXlsZW4pO1xuIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC0yMSw4ICsyMyw4IEBAIGV4dGVybiBlbnVtIGludGVncml0eV9zdGF0dXMgZXZtX3ZlcmlmeXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBpbnQgZXZtX2ZpeF9obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqeGF0dHJfbmFtZSxcbiBcdFx0IGNvbnN0IGNoYXIgKnhhdHRyX3ZhbHVlLCBzaXplX3QgeGF0dHJfdmFsdWVfbGVuKTtcbiBpbnQgZXZtX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHQgICAgaW50ICp4YXR0cl9jb3VudCk7XG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKTtcbiBleHRlcm4gYm9vbCBldm1fcmV2YWxpZGF0ZV9zdGF0dXMoY29uc3QgY2hhciAqeGF0dHJfbmFtZSk7XG4gZXh0ZXJuIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2lmX2VuYWJsZWQoY29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUpO1xuIGV4dGVybiBpbnQgZXZtX3JlYWRfcHJvdGVjdGVkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU4ICpidWZmZXIsXG5AQCAtNjMsOCArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1fZml4X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICp4YXR0cl9uYW1lLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdFx0XHQgIGludCAqeGF0dHJfY291bnQpXG4rXHRcdFx0XHRcdCAgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3NzAuLjViMmRlNzg2NWNlODFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTE2LDggKzExNiw4IEBAIExTTV9IT09LKGludCwgMCwgaW5vZGVfYWxsb2Nfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9mcmVlX3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UsIHZvaWQgKmlub2RlX3NlY3VyaXR5KVxuIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHQgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdCBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va3MuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbmluZGV4IGI0ZjhjYWQ1M2RkYjAzLi43YWZlMDZhOGQ0YzZjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tzLmhcbkBAIC0yMDAsMjAgKzIwMCwxOCBAQCBleHRlcm4gc3RydWN0IGxzbV9zdGF0aWNfY2FsbHNfdGFibGUgc3RhdGljX2NhbGxzX3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiAvKipcbiAgKiBsc21fZ2V0X3hhdHRyX3Nsb3QgLSBSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgYW5kIGluY3JlbWVudCB0aGUgaW5kZXhcbi0gKiBAeGF0dHJzOiBhcnJheSBzdG9yaW5nIExTTS1wcm92aWRlZCB4YXR0cnNcbi0gKiBAeGF0dHJfY291bnQ6IG51bWJlciBvZiBhbHJlYWR5IHN0b3JlZCB4YXR0cnMgKHVwZGF0ZWQpXG4rICogQGN0eDogeGF0dHIgc3RhdGUgc2hhcmVkIGJ5IGlub2RlX2luaXRfc2VjdXJpdHkgaG9va3NcbiAgKlxuLSAqIFJldHJpZXZlIHRoZSBmaXJzdCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgQHhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW4geGF0dHIsXG4tICogYW5kIGluY3JlbWVudCBAeGF0dHJfY291bnQuXG4rICogUmV0cmlldmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBAY3R4LVx1MDAzZXhhdHRycyBhcnJheSB0byBmaWxsIHdpdGggYW5cbisgKiB4YXR0ciwgYW5kIGluY3JlbWVudCBAY3R4LVx1MDAzZXhhdHRyX2NvdW50LlxuICAqXG4tICogUmV0dXJuOiBUaGUgc2xvdCB0byBmaWxsIGluIEB4YXR0cnMgaWYgbm9uLU5VTEwsIE5VTEwgb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogVGhlIHNsb3QgdG8gZmlsbCBpbiBAY3R4LVx1MDAzZXhhdHRycyBpZiBub24tTlVMTCwgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcbi1cdFx0XHRcdFx0ICAgICAgIGludCAqeGF0dHJfY291bnQpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHIgKmxzbV9nZXRfeGF0dHJfc2xvdChzdHJ1Y3QgbHNtX3hhdHRycyAqY3R4KVxuIHtcbi1cdGlmICh1bmxpa2VseSgheGF0dHJzKSlcbitcdGlmICh1bmxpa2VseSghY3R4IHx8ICFjdHgtXHUwMDNleGF0dHJzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gXHUwMDI2eGF0dHJzWygqeGF0dHJfY291bnQpKytdO1xuK1x0cmV0dXJuIFx1MDAyNmN0eC1cdTAwM2V4YXR0cnNbY3R4LVx1MDAzZXhhdHRyX2NvdW50KytdO1xuIH1cbiBcbiAjZW5kaWYgLyogISBfX0xJTlVYX0xTTV9IT09LU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4OC4uNjQ3ZjdiODgzNThiMmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTY4LDYgKzY4LDExIEBAIHN0cnVjdCB3YXRjaDtcbiBzdHJ1Y3Qgd2F0Y2hfbm90aWZpY2F0aW9uO1xuIHN0cnVjdCBsc21fY3R4O1xuIFxuK3N0cnVjdCBsc21feGF0dHJzIHtcbitcdHN0cnVjdCB4YXR0ciAqeGF0dHJzO1xuK1x0dW5zaWduZWQgaW50IHhhdHRyX2NvdW50O1xuK307XG4rXG4gLyogRGVmYXVsdCAobm8pIG9wdGlvbnMgZm9yIHRoZSBjYXBhYmxlIGZ1bmN0aW9uICovXG4gI2RlZmluZSBDQVBfT1BUX05PTkUgMHgwXG4gLyogSWYgY2FwYWJsZSBzaG91bGQgYXVkaXQgdGhlIHNlY3VyaXR5IHJlcXVlc3QgKi9cbkBAIC00MDEsNiArNDA2LDkgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuIFx0XHRcdFx0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSk7XG4raW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuK1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4rXHRcdFx0ICBzaXplX3QgdmFsdWVfbGVuKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XG5AQCAtODk1LDYgKzkwMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbHNteGF0dHJfYWRkKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsIHU2NCBsc21faWQsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuK1x0XHRcdFx0XHRzaXplX3QgdmFsdWVfbGVuKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYnBmL2hvb2tzLmMgYi9zZWN1cml0eS9icGYvaG9va3MuY1xuaW5kZXggN2I5OGY1ZDFlMmJlODMuLjhmOGMzZGUzMDM1ZjAxIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvYnBmL2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L2JwZi9ob29rcy5jXG5AQCAtMzMsNiArMzMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfbHNtX2luaXQodm9pZClcbiBcbiBzdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgYnBmX2xzbV9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2Jsb2IpLFxuK1x0Lmxic194YXR0cl9jb3VudCA9IEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMsXG4gfTtcbiBcbiBERUZJTkVfTFNNKGJwZikgPSB7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jXG5pbmRleCBiNTllM2YxMjFiOGE4OS4uYjcxNThmYzYzNTQzZTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmNcbisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uY1xuQEAgLTEwNjIsMTQgKzEwNjIsMTYgQEAgc3RhdGljIGludCBldm1faW5vZGVfY29weV91cF94YXR0cihzdHJ1Y3QgZGVudHJ5ICpzcmMsIGNvbnN0IGNoYXIgKm5hbWUpXG4gICogZXZtX2lub2RlX2luaXRfc2VjdXJpdHkgLSBpbml0aWFsaXplcyBzZWN1cml0eS5ldm0gSE1BQyB2YWx1ZVxuICAqL1xuIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsIHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLVx0XHRcdCAgICBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbitcdFx0XHQgICAgc3RydWN0IGxzbV94YXR0cnMgKmxzbV94YXR0cnMpXG4ge1xuIFx0c3RydWN0IGV2bV94YXR0ciAqeGF0dHJfZGF0YTtcbiBcdHN0cnVjdCB4YXR0ciAqeGF0dHIsICpldm1feGF0dHI7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRycztcbiBcdGJvb2wgZXZtX3Byb3RlY3RlZF94YXR0cnMgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbitcdHhhdHRycyA9IGxzbV94YXR0cnMgPyBsc21feGF0dHJzLVx1MDAzZXhhdHRycyA6IE5VTEw7XG4gXHRpZiAoIShldm1faW5pdGlhbGl6ZWQgXHUwMDI2IEVWTV9JTklUX0hNQUMpIHx8ICF4YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTEwODcsNyArMTA4OSw3IEBAIGludCBldm1faW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZXZtX3Byb3RlY3RlZF94YXR0cnMpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycywgeGF0dHJfY291bnQpO1xuK1x0ZXZtX3hhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KGxzbV94YXR0cnMpO1xuIFx0LypcbiBcdCAqIEFycmF5IHRlcm1pbmF0b3IgKHhhdHRyIG5hbWUgPSBOVUxMKSBtdXN0IGJlIHRoZSBmaXJzdCBub24tZmlsbGVkXG4gXHQgKiB4YXR0ciBzbG90LlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCA3MWFlYThmZGYwMTQyOS4uMjYxZjY4ZTE3Y2ZkYTAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNkZWZpbmUgcHJfZm10KGZtdCkgXCJMU006IFwiIGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2xzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGNhY2hlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEzMzMsOCArMTMzNCw4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0IGNvbnN0IGluaXR4YXR0cnMgaW5pdHhhdHRycywgdm9pZCAqZnNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgbHNtX3N0YXRpY19jYWxsICpzY2FsbDtcbi1cdHN0cnVjdCB4YXR0ciAqbmV3X3hhdHRycyA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gLUVPUE5PVFNVUFAsIHhhdHRyX2NvdW50ID0gMDtcbitcdHN0cnVjdCBsc21feGF0dHJzIHhhdHRycyA9IHt9O1xuK1x0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTM0NCwxNSArMTM0NSwxNSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBcdGlmIChpbml0eGF0dHJzKSB7XG4gXHRcdC8qIEFsbG9jYXRlICsxIGFzIHRlcm1pbmF0b3IuICovXG4tXHRcdG5ld194YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKCpuZXdfeGF0dHJzKSwgR0ZQX05PRlMpO1xuLVx0XHRpZiAoIW5ld194YXR0cnMpXG4rXHRcdHhhdHRycy54YXR0cnMgPSBrY2FsbG9jKGJsb2Jfc2l6ZXMubGJzX3hhdHRyX2NvdW50ICsgMSxcbitcdFx0XHRcdFx0c2l6ZW9mKCp4YXR0cnMueGF0dHJzKSwgR0ZQX05PRlMpO1xuK1x0XHRpZiAoIXhhdHRycy54YXR0cnMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRsc21fZm9yX2VhY2hfaG9vayhzY2FsbCwgaW5vZGVfaW5pdF9zZWN1cml0eSkge1xuLVx0XHRyZXQgPSBzY2FsbC1cdTAwM2VobC1cdTAwM2Vob29rLmlub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgcXN0ciwgbmV3X3hhdHRycyxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRyX2NvdW50KTtcbitcdFx0cmV0ID0gc2NhbGwtXHUwMDNlaGwtXHUwMDNlaG9vay5pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIHFzdHIsXG4rXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnhhdHRycyk7XG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0LypcbkBAIC0xMzY0LDE4ICsxMzY1LDEwMSBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdH1cbiBcbiBcdC8qIElmIGluaXR4YXR0cnMoKSBpcyBOVUxMLCB4YXR0cl9jb3VudCBpcyB6ZXJvLCBza2lwIHRoZSBjYWxsLiAqL1xuLVx0aWYgKCF4YXR0cl9jb3VudClcbitcdGlmICgheGF0dHJzLnhhdHRyX2NvdW50KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IGluaXR4YXR0cnMoaW5vZGUsIG5ld194YXR0cnMsIGZzX2RhdGEpO1xuK1x0cmV0ID0gaW5pdHhhdHRycyhpbm9kZSwgeGF0dHJzLnhhdHRycywgZnNfZGF0YSk7XG4gb3V0OlxuLVx0Zm9yICg7IHhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cl9jb3VudC0tKVxuLVx0XHRrZnJlZShuZXdfeGF0dHJzW3hhdHRyX2NvdW50IC0gMV0udmFsdWUpO1xuLVx0a2ZyZWUobmV3X3hhdHRycyk7XG4rXHRmb3IgKDsgeGF0dHJzLnhhdHRyX2NvdW50IFx1MDAzZSAwOyB4YXR0cnMueGF0dHJfY291bnQtLSlcbitcdFx0a2ZyZWUoeGF0dHJzLnhhdHRyc1t4YXR0cnMueGF0dHJfY291bnQgLSAxXS52YWx1ZSk7XG4rXHRrZnJlZSh4YXR0cnMueGF0dHJzKTtcbiBcdHJldHVybiAocmV0ID09IC1FT1BOT1RTVVBQKSA/IDAgOiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSk7XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXG4rc3RhdGljIHVuc2lnbmVkIGludCBsc21feGF0dHJzX3VzZWQoY29uc3Qgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycyxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpwcmVmaXgpXG4re1xuK1x0c2l6ZV90IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTtcbitcdHVuc2lnbmVkIGludCBpLCBuID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHhhdHRycy1cdTAwM2V4YXR0cl9jb3VudDsgaSsrKSB7XG4rXHRcdGNvbnN0IGNoYXIgKm5hbWUgPSB4YXR0cnMtXHUwMDNleGF0dHJzW2ldLm5hbWU7XG4rXG4rXHRcdGlmIChuYW1lIFx1MDAyNlx1MDAyNiAhc3RybmNtcChuYW1lLCBwcmVmaXgsIHByZWZpeF9sZW4pKVxuK1x0XHRcdG4rKztcbitcdH1cbitcdHJldHVybiBuO1xuK31cbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbitcbisvKipcbisgKiBzZWN1cml0eV9sc214YXR0cl9hZGQoKSAtIEFkZCBhbiB4YXR0ciBkdXJpbmcgaW5vZGVfaW5pdF9zZWN1cml0eVxuKyAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXG4rICogQGxzbV9pZDogTFNNX0lEXyogdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgTFNNXG4rICogQG5hbWU6IHhhdHRyIG5hbWUgc3VmZml4XG4rICogQHZhbHVlOiB4YXR0ciB2YWx1ZVxuKyAqIEB2YWx1ZV9sZW46IGxlbmd0aCBvZiBAdmFsdWVcbisgKlxuKyAqIENsYWltIGFuIHhhdHRyIHNsb3QgaW4gQHhhdHRycyBvbiBiZWhhbGYgb2YgdGhlIExTTSBpZGVudGlmaWVkIGJ5XG4rICogQGxzbV9pZCBhbmQgZmlsbCBpdCB3aXRoIGEgY29weSBvZiBAbmFtZSBhbmQgQHZhbHVlLiBDYWxsZXJzIGNhbiBpbnZva2VcbisgKiB0aGlzIGZ1bmN0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0LlxuKyAqXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGUgY2FsbGluZyBMU00ncyBzbG90IGJ1ZGdldFxuKyAqICAgICAgICAgaXMgZXhoYXVzdGVkLCBuZWdhdGl2ZSB2YWx1ZXMgb24gb3RoZXIgZXJyb3JzLlxuKyAqL1xuK2ludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcbitcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuK1x0XHRcdCAgc2l6ZV90IHZhbHVlX2xlbilcbit7XG4rXHRzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xuK1x0dm9pZCAqeGF0dHJfdmFsdWU7XG4rXHRzaXplX3QgbmFtZV9sZW47XG4rXG4rXHRpZiAoIXhhdHRycyB8fCAheGF0dHJzLVx1MDAzZXhhdHRycyB8fCAhbmFtZSB8fCAhdmFsdWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7XG4rXHRpZiAobmFtZV9sZW4gPT0gMCB8fCBuYW1lX2xlbiBcdTAwM2UgWEFUVFJfTkFNRV9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHZhbHVlX2xlbiA9PSAwIHx8IHZhbHVlX2xlbiBcdTAwM2UgWEFUVFJfU0laRV9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3dpdGNoIChsc21faWQpIHtcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitcdGNhc2UgTFNNX0lEX0JQRjpcbitcdFx0aWYgKGxzbV94YXR0cnNfdXNlZCh4YXR0cnMsIFhBVFRSX0JQRl9MU01fU1VGRklYKSBcdTAwM2U9XG4rXHRcdCAgICBCUEZfTFNNX0lOT0RFX0lOSVRfWEFUVFJTKVxuK1x0XHRcdHJldHVybiAtRU5PU1BDO1xuK1x0XHRicmVhaztcbisjZW5kaWYgLyogQ09ORklHX0JQRl9MU00gKi9cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQ29tYmluZSB4YXR0ciB2YWx1ZSArIG5hbWUgaW50byBvbmUgYWxsb2NhdGlvbi4gKi9cbitcdHhhdHRyX3ZhbHVlID0ga21hbGxvYyh2YWx1ZV9sZW4gKyBuYW1lX2xlbiArIDEsIEdGUF9OT1dBSVQpO1xuK1x0aWYgKCF4YXR0cl92YWx1ZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtZW1jcHkoeGF0dHJfdmFsdWUsIHZhbHVlLCB2YWx1ZV9sZW4pO1xuK1x0bWVtY3B5KHhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuLCBuYW1lLCBuYW1lX2xlbik7XG4rXHQoKGNoYXIgKil4YXR0cl92YWx1ZSlbdmFsdWVfbGVuICsgbmFtZV9sZW5dID0gJ1xcMCc7XG4rXG4rXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuK1x0aWYgKCF4YXR0cikge1xuK1x0XHRrZnJlZSh4YXR0cl92YWx1ZSk7XG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0fVxuK1xuK1x0eGF0dHItXHUwMDNldmFsdWUgPSB4YXR0cl92YWx1ZTtcbitcdHhhdHRyLVx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXhhdHRyX3ZhbHVlICsgdmFsdWVfbGVuO1xuK1x0eGF0dHItXHUwMDNldmFsdWVfbGVuID0gdmFsdWVfbGVuO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbigpIC0gSW5pdGlhbGl6ZSBhbiBhbm9ueW1vdXMgaW5vZGVcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMWE3MTNkOTYyMDZmNTkuLjZiYmE2YjIxMmUxN2M1IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yOTYyLDcgKzI5NjIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZGVudHJ5X2NyZWF0ZV9maWxlc19hcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLFxuIFxuIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGNyZWRfc2VjdXJpdHlfc3RydWN0ICpjcnNlYyA9IHNlbGludXhfY3JlZChjdXJyZW50X2NyZWQoKSk7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjO1xuQEAgLTI5OTIsNyArMjk5Miw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0ICAgICEoc2JzZWMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNCTEFCRUxfTU5UKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0eGF0dHIgPSBsc21fZ2V0X3hhdHRyX3Nsb3QoeGF0dHJzLCB4YXR0cl9jb3VudCk7XG4rXHR4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMpO1xuIFx0aWYgKHhhdHRyKSB7XG4gXHRcdHJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHRfZm9yY2UobmV3c2lkLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNmNvbnRleHQsIFx1MDAyNmNsZW4pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IGZmMTE1MDY4YzVjMDZmLi40NTAxMDc4NDMwY2EwNSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTk4MSwxMCArOTgxLDEwIEBAIHNta19ydWxlX3RyYW5zbXV0ZXMoc3RydWN0IHNtYWNrX2tub3duICpzdWJqZWN0LFxuIH1cbiBcbiBzdGF0aWMgaW50XG4teGF0dHJfZHVwdmFsKHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50LFxuK3hhdHRyX2R1cHZhbChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuIFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbGxlbilcbiB7XG4tXHRzdHJ1Y3QgeGF0dHIgKiBjb25zdCB4YXR0ciA9IGxzbV9nZXRfeGF0dHJfc2xvdCh4YXR0cnMsIHhhdHRyX2NvdW50KTtcbitcdHN0cnVjdCB4YXR0ciAqIGNvbnN0IHhhdHRyID0gbHNtX2dldF94YXR0cl9zbG90KHhhdHRycyk7XG4gXG4gXHRpZiAoIXhhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMDAzLDE0ICsxMDAzLDEzIEBAIHhhdHRyX2R1cHZhbChzdHJ1Y3QgeGF0dHIgKnhhdHRycywgaW50ICp4YXR0cl9jb3VudCxcbiAgKiBAaW5vZGU6IHRoZSBuZXdseSBjcmVhdGVkIGlub2RlXG4gICogQGRpcjogY29udGFpbmluZyBkaXJlY3Rvcnkgb2JqZWN0XG4gICogQHFzdHI6IHVudXNlZFxuLSAqIEB4YXR0cnM6IHdoZXJlIHRvIHB1dCB0aGUgYXR0cmlidXRlc1xuLSAqIEB4YXR0cl9jb3VudDogY3VycmVudCBudW1iZXIgb2YgTFNNLXByb3ZpZGVkIHhhdHRycyAodXBkYXRlZClcbisgKiBAeGF0dHJzOiB3aGVyZSB0byBwdXQgYXR0cmlidXRlcyBhbmQgdXBkYXRlIGNvdW50XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgaXQgYWxsIHdvcmtzIG91dCwgLUVOT01FTSBpZiB0aGVyZSdzIG5vIG1lbW9yeVxuICAqL1xuIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCB4YXR0ciAqeGF0dHJzLCBpbnQgKnhhdHRyX2NvdW50KVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBzbWFja19jcmVkKGN1cnJlbnRfY3JlZCgpKTtcbiBcdHN0cnVjdCBpbm9kZV9zbWFjayAqIGNvbnN0IGlzc3AgPSBzbWFja19pbm9kZShpbm9kZSk7XG5AQCAtMTA1NywyMSArMTA1NiwxOSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHR0cmFuc2ZsYWcgPSBTTUtfSU5PREVfVFJBTlNNVVRFO1xuIFxuLVx0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLCB4YXR0cl9jb3VudCxcbi1cdFx0XHRcdFhBVFRSX1NNQUNLX1RSQU5TTVVURSxcbi1cdFx0XHRcdFRSQU5TX1RSVUUsXG4tXHRcdFx0XHRUUkFOU19UUlVFX1NJWkVcbi1cdFx0XHQpKVxuK1x0XHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0XHQgWEFUVFJfU01BQ0tfVFJBTlNNVVRFLFxuK1x0XHRcdFx0XHQgVFJBTlNfVFJVRSxcbitcdFx0XHRcdFx0IFRSQU5TX1RSVUVfU0laRSkpXG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChyYyA9PSAwKVxuLVx0XHRpZiAoeGF0dHJfZHVwdmFsKHhhdHRycywgeGF0dHJfY291bnQsXG4tXHRcdFx0ICAgIFhBVFRSX1NNQUNLX1NVRkZJWCxcbi1cdFx0XHQgICAgaXNzcC1cdTAwM2VzbWtfaW5vZGUtXHUwMDNlc21rX2tub3duLFxuLVx0XHQgICAgIHN0cmxlbihpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24pXG4tXHRcdCkpXG4rXHRcdGlmICh4YXR0cl9kdXB2YWwoeGF0dHJzLFxuK1x0XHRcdFx0IFhBVFRSX1NNQUNLX1NVRkZJWCxcbitcdFx0XHRcdCBpc3NwLVx1MDAzZXNta19pbm9kZS1cdTAwM2VzbWtfa25vd24sXG4rXHRcdFx0XHQgc3RybGVuKGlzc3AtXHUwMDNlc21rX2lub2RlLVx1MDAzZXNta19rbm93bikpKVxuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBpbnN0YW50X2lub2RlOlxuIFx0aXNzcC1cdTAwM2VzbWtfZmxhZ3MgfD0gKFNNS19JTk9ERV9JTlNUQU5UIHwgdHJhbnNmbGFnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuaW5kZXggYWU3MWU5YjY5MDUxODYuLjI2MzlmOWY5NDE5NTViIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaFxuQEAgLTkyLDQgKzkyLDkgQEAgZXh0ZXJuIGludCBicGZfc2V0X2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cixcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wLCBpbnQgZmxhZ3MpIF9fa3N5bSBfX3dlYWs7XG4gZXh0ZXJuIGludCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWVfX3N0cikgX19rc3ltIF9fd2VhaztcbiBcbitzdHJ1Y3QgbHNtX3hhdHRycztcbitleHRlcm4gaW50IGJwZl9pbml0X2lub2RlX3hhdHRyKHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXG4rXHRcdFx0XHRjb25zdCBjaGFyICpuYW1lX19zdHIsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqdmFsdWVfcCkgX19rc3ltIF9fd2VhaztcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZzX2tmdW5jcy5jXG5pbmRleCA0M2EyNmVjNjlhOGUzNi4uMTBiZTBhYjkxZTcwNjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mc19rZnVuY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnNfa2Z1bmNzLmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXCJ0ZXN0X2dldF94YXR0ci5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9zZXRfcmVtb3ZlX3hhdHRyLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X2ZzdmVyaXR5LnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X2luaXRfaW5vZGVfeGF0dHIuc2tlbC5oXCJcbiBcbiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0ZmlsZVtdID0gXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzXCI7XG4gXG5AQCAtMjY4LDYgKzI2OSwxMjMgQEAgc3RhdGljIHZvaWQgdGVzdF9mc3Zlcml0eSh2b2lkKVxuIFx0cmVtb3ZlKHRlc3RmaWxlKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfaW5pdF9pbm9kZV94YXR0ciAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgZmQgPSAtMSwgZXJyO1xuK1x0Y2hhciB2YWx1ZV9vdXRbNjRdO1xuK1x0Y29uc3QgY2hhciAqdGVzdGZpbGVfbmV3ID0gXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX25ld1wiO1xuK1xuK1x0c2tlbCA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwidGVzdF9pbml0X2lub2RlX3hhdHRyX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXHRlcnIgPSB0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgKi9cbitcdGZkID0gb3Blbih0ZXN0ZmlsZV9uZXcsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NDQpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiY3JlYXRlX2ZpbGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vpbml0X3Jlc3VsdCwgMCwgXCJpbml0X3Jlc3VsdFwiKTtcbitcbitcdC8qIGluaXR4YXR0cnMgcHJlcGVuZHMgXCJzZWN1cml0eS5cIiB0byB0aGUgbmFtZS4gKi9cbitcdGVyciA9IGdldHhhdHRyKHRlc3RmaWxlX25ldywgXCJzZWN1cml0eS5icGYudGVzdF9sYWJlbFwiLCB2YWx1ZV9vdXQsXG4rXHRcdCAgICAgICBzaXplb2YodmFsdWVfb3V0KSk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9EQVRBKSB7XG4rXHRcdHByaW50ZihcIiVzOlNLSVA6ZmlsZXN5c3RlbSBkaWQgbm90IGFwcGx5IExTTSB4YXR0cnNcXG5cIixcbitcdFx0ICAgICAgIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmICghQVNTRVJUX0dFKGVyciwgMCwgXCJnZXR4YXR0clwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfRVEoZXJyLCAoaW50KXNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNleGF0dHJfdmFsdWUpLCBcInhhdHRyX3NpemVcIik7XG4rXHRBU1NFUlRfRVEoc3RybmNtcCh2YWx1ZV9vdXQsIFwidW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwXCIsXG4rXHRcdFx0ICBzaXplb2YoXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcIikpLCAwLFxuK1x0XHQgIFwieGF0dHJfdmFsdWVcIik7XG4rXG4rb3V0OlxuK1x0Y2xvc2UoZmQpO1xuK1x0dGVzdF9pbml0X2lub2RlX3hhdHRyX19kZXN0cm95KHNrZWwpO1xuK1x0cmVtb3ZlKHRlc3RmaWxlX25ldyk7XG4rfVxuK1xuKy8qIEtlZXAgaW4gc3luYyB3aXRoIEJQRl9MU01fSU5PREVfSU5JVF9YQVRUUlMgaW4gaW5jbHVkZS9saW51eC9icGZfbHNtLmguICovXG4rI2RlZmluZSBJTklUX0lOT0RFX1hBVFRSX01BWCA0XG4rXG4rLypcbisgKiBQcm9ncmFtcyBtYXkgYXR0YWNoIHRvIGlub2RlX2luaXRfc2VjdXJpdHkgd2l0aG91dCBhbiBhdHRhY2gtdGltZSBsaW1pdCwgYnV0XG4rICogdGhlIGtmdW5jIG9ubHkgbGV0cyBCUEYgY2xhaW0gSU5JVF9JTk9ERV9YQVRUUl9NQVggeGF0dHIgc2xvdHMgcGVyIGlub2RlLlxuKyAqIENhbGxzIGJleW9uZCB0aGF0IGJ1ZGdldCBhcmUgcmVqZWN0ZWQgYXQgcnVudGltZSB3aXRoIC1FTk9TUEMuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9pbml0X2lub2RlX3hhdHRyICpza2VsW0lOSVRfSU5PREVfWEFUVFJfTUFYICsgMV0gPSB7fTtcbitcdHN0cnVjdCBicGZfbGluayAqbGlua1tJTklUX0lOT0RFX1hBVFRSX01BWCArIDFdID0ge307XG4rXHRjb25zdCBjaGFyICp0ZXN0ZmlsZV9zbG90ID0gXCIvdG1wL3Rlc3RfcHJvZ3NfZnNfa2Z1bmNzX3Nsb3RcIjtcbitcdGludCBvayA9IDAsIG5vc3BjID0gMCwgb3RoZXIgPSAwO1xuK1x0aW50IGksIGZkID0gLTE7XG4rXG4rXHQvKiBBbGwgcHJvZ3JhbXMgYXR0YWNoIHN1Y2Nlc3NmdWxseTsgdGhlcmUgaXMgbm8gYXR0YWNoLXRpbWUgY2FwLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IElOSVRfSU5PREVfWEFUVFJfTUFYOyBpKyspIHtcbitcdFx0c2tlbFtpXSA9IHRlc3RfaW5pdF9pbm9kZV94YXR0cl9fb3BlbigpO1xuK1x0XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbFtpXSwgXCJvcGVuXCIpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRzbnByaW50Zihza2VsW2ldLVx1MDAzZXJvZGF0YS1cdTAwM2V4YXR0cl9uYW1lLFxuK1x0XHRcdCBzaXplb2Yoc2tlbFtpXS1cdTAwM2Vyb2RhdGEtXHUwMDNleGF0dHJfbmFtZSksIFwiYnBmLmxhYmVsXyVkXCIsXG4rXHRcdFx0IGkpO1xuK1xuK1x0XHRpZiAoIUFTU0VSVF9PSyh0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2xvYWQoc2tlbFtpXSksIFwibG9hZFwiKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0c2tlbFtpXS1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1xuK1x0XHRsaW5rW2ldID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbFtpXS1cdTAwM2Vwcm9ncy50ZXN0X2luaXRfaW5vZGVfeGF0dHIpO1xuK1x0XHRpZiAoIUFTU0VSVF9PS19QVFIobGlua1tpXSwgXCJhdHRhY2hcIikpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBUcmlnZ2VyIGlub2RlX2luaXRfc2VjdXJpdHkgb25jZSB3aXRoIGFsbCBwcm9ncmFtcyBhdHRhY2hlZC4gKi9cbitcdGZkID0gb3Blbih0ZXN0ZmlsZV9zbG90LCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZV9maWxlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBFeGFjdGx5IElOSVRfSU5PREVfWEFUVFJfTUFYIHByb2dyYW1zIGNsYWltIGEgc2xvdDsgdGhlIHByb2dyYW0gcGFzdFxuK1x0ICogdGhlIGJ1ZGdldCBnZXRzIC1FTk9TUEMuIFRoZSBvcmRlciBpbiB3aGljaCBwcm9ncmFtcyBydW4gaXMgbm90XG4rXHQgKiBndWFyYW50ZWVkLCBzbyBjb3VudCByZXN1bHRzIGluc3RlYWQgb2YgaW5kZXhpbmcuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGludCByZXMgPSBza2VsW2ldLVx1MDAzZWRhdGEtXHUwMDNlaW5pdF9yZXN1bHQ7XG4rXG4rXHRcdGlmIChyZXMgPT0gMClcbitcdFx0XHRvaysrO1xuK1x0XHRlbHNlIGlmIChyZXMgPT0gLUVOT1NQQylcbitcdFx0XHRub3NwYysrO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3RoZXIrKztcbitcdH1cbitcbitcdEFTU0VSVF9FUShvaywgSU5JVF9JTk9ERV9YQVRUUl9NQVgsIFwic2xvdHNfd2l0aGluX2J1ZGdldFwiKTtcbitcdEFTU0VSVF9FUShub3NwYywgMSwgXCJzbG90X292ZXJfYnVkZ2V0XCIpO1xuK1x0QVNTRVJUX0VRKG90aGVyLCAwLCBcInVuZXhwZWN0ZWRfcmVzdWx0XCIpO1xuK1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJTklUX0lOT0RFX1hBVFRSX01BWDsgaSsrKSB7XG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmtbaV0pO1xuK1x0XHR0ZXN0X2luaXRfaW5vZGVfeGF0dHJfX2Rlc3Ryb3koc2tlbFtpXSk7XG4rXHR9XG4rXHRyZW1vdmUodGVzdGZpbGVfc2xvdCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiB7XG4gXHQvKiBNYXRjaGVzIHhhdHRyX25hbWVzIGluIHByb2dzL3Rlc3RfZ2V0X3hhdHRyLmMgKi9cbkBAIC0yODgsNCArNDA2LDEwIEBAIHZvaWQgdGVzdF9mc19rZnVuY3Modm9pZClcbiBcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnN2ZXJpdHlcIikpXG4gXHRcdHRlc3RfZnN2ZXJpdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdF9pbm9kZV94YXR0clwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImluaXRfaW5vZGVfeGF0dHJfc2xvdF9saW1pdFwiKSlcbitcdFx0dGVzdF9pbml0X2lub2RlX3hhdHRyX3Nsb3RfbGltaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfaW5pdF9pbm9kZV94YXR0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNhYWRlNTNiODdlM2EzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9pbml0X2lub2RlX3hhdHRyLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitfX3UzMiBtb25pdG9yZWRfcGlkO1xuK2ludCBpbml0X3Jlc3VsdCA9IC0xO1xuK1xuK2NvbnN0IGNoYXIgeGF0dHJfbmFtZVsxNl0gPSBcImJwZi50ZXN0X2xhYmVsXCI7XG4rY2hhciB4YXR0cl92YWx1ZVtdID0gXCJ1bmNvbmZpbmVkX3U6b2JqZWN0X3I6dXNlcl9ob21lX3Q6czBcIjtcbitcbitTRUMoXCJsc20vaW5vZGVfaW5pdF9zZWN1cml0eVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2luaXRfaW5vZGVfeGF0dHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0ciwgc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycylcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciB2YWx1ZV9wdHI7XG4rXHRfX3UzMiBwaWQ7XG4rXG4rXHRwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX21lbSh4YXR0cl92YWx1ZSwgc2l6ZW9mKHhhdHRyX3ZhbHVlKSwgMCwgXHUwMDI2dmFsdWVfcHRyKTtcbitcdGluaXRfcmVzdWx0ID0gYnBmX2luaXRfaW5vZGVfeGF0dHIoeGF0dHJzLCB4YXR0cl9uYW1lLCBcdTAwMjZ2YWx1ZV9wdHIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6MzMuNTYxNDMzNzQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyOTIyNDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgQlBGIHhhdHRyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IGludGVyZXN0aW5nIGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCBpdCBhbGxvd3MgQlBGIExTTSBwcm9ncmFtcyB0byBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgb24gYSBuZXdseSBjcmVhdGVkIGlub2RlLCBhbGwgdGhyb3VnaCB0aGUgYGlub2RlX2luaXRfc2VjdXJpdHlgIGhvb2suIFRoaXMgc2VlbXMgbGlrZSBhIHBvd2VyZnVsIHRvb2wgZm9yIGVuaGFuY2VkIHNlY3VyaXR5IGVuZm9yY2VtZW50IGF0IGlub2RlIGNyZWF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHBhdGNoIHJld3JpdGVzIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgTFNNIGhvb2sgc2lnbmF0dXJlIHRvIGRlYWwgd2l0aCBgc3RydWN0IGxzbV94YXR0cnNgIGluc3RlYWQgb2YgdGhlIG9sZCBgc3RydWN0IHhhdHRyYCBzZXR1cCwgYW5kIHVwZGF0ZXMgdmFyaW91cyBzZWN1cml0eSBtb2R1bGVzIGxpa2UgYGV2bWAsIGBzZWxpbnV4YCwgYW5kIGBzbWFja2AgdG8gd29yayB3aXRoIHRoZSB1cGRhdGVkIHNpZ25hdHVyZS4gSXQgYWxzbyBsb29rcyBsaWtlIGEgbmV3IGZ1bmN0aW9uIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIGhhcyBiZWVuIGFkZGVkIGZvciBhZGRpbmcgdGhlIHhhdHRyIHRvIHRoaXMgbmV3IHN0cnVjdC4gVGhpcyBjaGFuZ2UgYWxzbyBpbmNsdWRlcyB0aGUgYGJwZl9pbml0X2lub2RlX3hhdHRyYCBCUEYga2Z1bmMuXG5cblRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIHRoZSBrZXkgYXNwZWN0LCByZWFsbHkuIEEgQlBGIHByb2dyYW0gbG9hZGVkIGludG8gdGhlIGtlcm5lbCwgYXR0YWNoaW5nIHRvIHRoZSBgbHNtL2lub2RlX2luaXRfc2VjdXJpdHlgIGhvb2ssIGNvdWxkIHRoZW4gbGV2ZXJhZ2UgdGhpcyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIGtmdW5jLiBUaGlzIG1ha2VzIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBlYXNpbHkgYWNjZXNzaWJsZS5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gQ2xlYXJseSwgYENPTkZJR19CUEZfTFNNYCBpcyBhIG11c3QtaGF2ZSwgYW5kIGBDT05GSUdfU0VDVVJJVFlgIGlzIGVzc2VudGlhbCwgc2luY2UgaXQgaW52b2x2ZXMgTFNNIGhvb2tzLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBmaWxlcyByZWxhdGVkIHRvIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgLCBhbmQgYENPTkZJR19FVk1gLiBUaGUgY29yZSBsb2dpYyBpcyBsaWtlbHkgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFuZCBgZnMvYnBmX2ZzX2tmdW5jcy5jYC4gSXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBgZnMvYnBmX2ZzX2tmdW5jcy5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBhcyB0aGF0IG1ha2VzIHNlbnNlLlxuXG5JJ2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSB1bml0IHRlc3RzIHByb3ZpZGVkIGluIHRoZSBgc2VsZnRlc3RzYCBkaXJlY3Rvcnkg4oCTIHNwZWNpZmljYWxseSBgZnNfa2Z1bmNzLmNgIGFuZCBgdGVzdF9pbml0X2lub2RlX3hhdHRyLmNgIOKAkyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgd29ya3MgYW5kIHdoYXQgc29ydCBvZiBzY2VuYXJpb3MgYXJlIGJlaW5nIHRlc3RlZC4gVGhhdCdsbCBiZSBhIGtleSBkYXRhIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjQxLjk5MDY2MDgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzQ0NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9mc19rZnVuY3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTI5PW9iai0kKENPTkZJR19aT05FRlNfRlMpXFx0XFx0Kz0gem9uZWZzL1xcbmZzL01ha2VmaWxlOjEzMDpvYmotJChDT05GSUdfQlBGX0xTTSlcXHRcXHQrPSBicGZfZnNfa2Z1bmNzLm9cXG5mcy9NYWtlZmlsZS0xMzEtb2JqLSQoQ09ORklHX1JFU0NUUkxfRlMpXFx0Kz0gcmVzY3RybC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6NDIuMDc3NDEwODMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0Mzk1NDc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQlBGIExTTSBJbnRlZ3JhdGlvbioqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9MU01gIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBicm9hZGVyIHNlY3VyaXR5IGxhbmRzY2FwZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgc2VjdXJpdHkvc2VjdXJpdHkuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYW5kIHRoZSBMU00gaW50ZWdyYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIEJQRiBob29rIHNob3VsZCBiZS4gSSdsbCBhbmFseXplIGhvdyB0aGUgQlBGIGxvZ2ljIGlzIGJlaW5nIGludm9rZWQgaW4gdGhlIHhhdHRyIGFkZGl0aW9uIHBhdGguIEknbSBsb29raW5nIGZvciB0aGUgaW50ZWdyYXRpb24gcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6NDUuMzIxMzY4MjQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzc4MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbHNtX3hhdHRyc191c2VkKGNvbnN0IHN0cnVjdCBsc21feGF0dHJzICp4YXR0cnMsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTEzOTctLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMzk4OiAqIHNlY3VyaXR5X2xzbXhhdHRyX2FkZCgpIC0gQWRkIGFuIHhhdHRyIGR1cmluZyBpbm9kZV9pbml0X3NlY3VyaXR5XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMzk5LSAqIEB4YXR0cnM6IHhhdHRyIHN0YXRlIHNoYXJlZCBieSBpbm9kZV9pbml0X3NlY3VyaXR5IGhvb2tzXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE0MTEtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNDEyOmludCBzZWN1cml0eV9sc214YXR0cl9hZGQoc3RydWN0IGxzbV94YXR0cnMgKnhhdHRycywgdTY0IGxzbV9pZCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE0MTMtXFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzI6NDUuMzgyMTUyMjI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NjQ2ODA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbnRlcmFjdGlvbiBCZXR3ZWVuIExTTSBhbmQgQlBGIEV4dGVuZGVkIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVyYWN0IHdpdGggQlBGLWV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAgZnVuY3Rpb24uIEkga25vdyB0aGF0IGxpdmVzIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC4gVGhlIHJlbGF0ZWQga2Z1bmMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIHJlc2lkZXMgaW4gYGZzL2JwZl9mc19rZnVuY3MuY2AuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGNvbWUgaW50byBwbGF5IGhlcmUuIE9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFueSBCUEYgdXNhZ2UsIGJ1dCBpZiBJJ20gZGVhbGluZyB3aXRoIExTTSBhbmQgQlBGIHRvZ2V0aGVyLCBgQ09ORklHX0JQRl9MU01gIGlzIHRoZSBrZXkuIFNpbmNlIGBDT05GSUdfQlBGX0xTTWAgcHJvYmFibHkgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBpbXBsaWVzIGl0KSwgSSdsbCBkb3VibGUtY2hlY2sgYENPTkZJR19CUEZfTFNNYCdzIGRlZmluaXRpb24gaW4gdGhlIEtjb25maWcgZmlsZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBwYXJhbW91bnQgdG8gZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjQ5Ljc3ODYyMzMyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUwODk4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozMjo0OS44NDAxMzg0NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU4MjM1MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIExTTSBJbnRlZ3JhdGlvbiB3aXRoIEJQRioqXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIEJQRiBhbmQgTFNNIGludGVncmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBCUEZfTFNNYCBhcmUgZGVmaW5lZC4gVGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHN0ZXAgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgYSBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsLiBLY29uZmlnIGZpbGVzIGFyZSB0aGUgcGxhY2UgdG8gc3RhcnQg4oCTIHRoZXkncmUgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZ2V0IHRvIHNlYXJjaGluZyBmb3IgYEJQRl9MU01gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIGZpbGVzIGRlZmluZSBpdCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjUzLjY5ODM3NTYyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzE0NTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0xTTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjU2LjAyNTUyNjg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTM4MDQzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIEJQRl9MU00qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX0xTTWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3Mgbm90IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUsIGJ1dCBpbnN0ZWFkLCBsZXQncyB0cmFjZSB0aGlzIGxpa2UgYSBwcm9wZXIgaW52ZXN0aWdhdGlvbi4gV2hlcmUgZG9lcyB0aGlzIGxpdmU/IFdoYXQgb3RoZXIgc3Vic3lzdGVtcyBkb2VzIGl0IHJlbHkgdXBvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyB0aGlzOyBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBib3R0bGVuZWNrcy4gQSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVncmF0ZSBpdC4gTGV0J3Mgc3RhcnQgYnkgbWFwcGluZyBpdCBhbGwgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjU5LjMzOTMzMzIxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIEJQRl9MU01cXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbiAgOTU6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgOTY6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbiAgOTc6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuICA5ODpcXHRcXHRoZWxwXFxuICA5OTpcXHRcXHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3JcXG4gMTAwOlxcdFxcdCAgaW1wbGVtZW50aW5nIGR5bmFtaWMgTUFDIGFuZCBBdWRpdCBQb2xpY2llcy5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRlbmRtZW51ICMgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjMyOjU5LjMzOTM5NzQwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE3NTEzOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBMU00geGF0dHIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQlBGX0xTTWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZ29pbmcgdG8gYWZmZWN0IHRoaW5ncywgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQgYWJvdXQgYENPTkZJR19TRUNVUklUWWA/IEknbSBwcmV0dHkgc3VyZSB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGNvZGUgdG8gY29tcGlsZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBBbmQgd2hhdCBhYm91dCB0aGUgU0VMaW51eCwgU01BQ0ssIGFuZCBFVk0gY29uZmlndXJhdGlvbnM6IGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgLCBhbmQgYENPTkZJR19FVk1gPyBUaGUgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aGVtIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUsIGJ1dCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgc2hvdWxkIHN0aWxsIHdvcmssIGV2ZW4gaWYgdGhvc2UgYXJlICpub3QqIGVuYWJsZWQsIGFzIGxvbmcgYXMgYENPTkZJR19CUEZfTFNNYCBpcyBlbmFibGVkLlxuXG5SaWdodCwgc28gdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rIGlzIGNhbGxlZCBieSBmaWxlc3lzdGVtIGNvZGUgbGlrZSBgZXh0NGAgb3IgYGJ0cmZzYCB3aGVuIGEgbmV3IGlub2RlIGlzIGNyZWF0ZWQuIElmIEknbSBnb2luZyB0byBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIEknbSBwcmV0dHkgc3VyZSBJIG5lZWQgdG8gZm9jdXMgb24gZW5hYmxpbmcgYENPTkZJR19CUEZfTFNNYC4gVGhhdCdzIHRoZSBwcmlvcml0eS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEknbSBzZWVpbmcgYGJwZl9pbml0X2lub2RlX3hhdHRyYCwgYHNlY3VyaXR5X2xzbXhhdHRyX2FkZGAsIGFuZCBgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIGZ1bmN0aW9ucy4gSSBzZWUgYGxzbV9nZXRfeGF0dHJfc2xvdGAgd2hpY2ggaXMgYW4gaW5saW5lIGZ1bmN0aW9uLiBBbmQgSSBhbHNvIHNlZSBgZXZtX2lub2RlX2luaXRfc2VjdXJpdHlgLCBgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5YCwgYW5kIGBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5YCBhcmUgYXZhaWxhYmxlIGFzIHdlbGwuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzLiBJJ20gcHJldHR5IHN1cmUgYENPTkZJR19CUEZfTFNNYCBpcyB0aGUgbWFpbiBvbmUuIEkgKnRoaW5rKiBgQ09ORklHX1NFQ1VSSVRZYCBpcyByZXF1aXJlZCBmb3IgYEJQRl9MU01gLCBzbyB0aGF0IGlzIHByb2JhYmx5IHRoZSBtYWluIGRlcGVuZGVuY3kuXG5cbkxldCBtZSBnbyBiYWNrIHRvIHRoZSBwYXRjaCBhZ2Fpbi5cblxuYGBgY1xuK19fYnBmX2tmdW5jIGludCBicGZfaW5pdF9pbm9kZV94YXR0cihzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lX19zdHIsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wKVxuYGBgXG5gYGBjXG4raW50IHNlY3VyaXR5X2xzbXhhdHRyX2FkZChzdHJ1Y3QgbHNtX3hhdHRycyAqeGF0dHJzLCB1NjQgbHNtX2lkLFxuK1x0XHRcdCAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4rXHRcdFx0ICBzaXplX3QgdmFsdWVfbGVuKVxuYGBgXG5gYGBjXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIsXG4gXHRcdFx0XHQgY29uc3QgaW5pdHhhdHRycyBpbml0eGF0dHJzLCB2b2lkICpmc19kYXRhKVxuYGBgXG5cblRoZSBrZXkgZm9jdXMgaXMgb24gdGhvc2UgbmV3IHNpZ25hdHVyZXMuXG5cblNvLCBqdXN0IHRvIHN1bW1hcml6ZTpcblxuKiAgICoqRm9jdXMgU3ltYm9scyoqOiBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLCBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YC5cbiogICAqKkNvbmZpZ3MqKjogYEJQRl9MU01gICh3aXRoIGFuIGltcGxpZWQgZGVwZW5kZW5jeSBvbiBgU0VDVVJJVFlgKS5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMsIGBicGZfaW5pdF9pbm9kZV94YXR0cmAsIGFsbG93aW5nIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBuZXdseSBjcmVhdGVkIGlub2RlcyBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBMU00gaG9vaydzIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBhY3R1YWxseSBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIHRoZSB4YXR0ci4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgYm90aCB0aGUga2VybmVsJ3MgTFNNIGFuZCBCUEYgc3Vic3lzdGVtcyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSBhbmQgY3JlYXRpbmcgZmlsZXMsIHRoZXJlZm9yZSwgZnV6emluZyB3aWxsIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5ldyBrZnVuYywgYW5kIHRob3NlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5YCBpcyBhY3R1YWxseSByZWFjaGFibGUgLS0geWVzLCBpdCdzIGludm9rZWQgYnkgZmlsZXN5c3RlbXMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLCB3aGljaCBpcyBnb29kLiBJcyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCByZWFjaGFibGU/IFllcywgdGhyb3VnaCBgYnBmX2luaXRfaW5vZGVfeGF0dHJgLlxuXG5EbyBJIG5lZWQgb3RoZXIgY29uZmlndXJhdGlvbnM/IFBlcmhhcHMsIGBDT05GSUdfRVZNYCwgYENPTkZJR19TRUNVUklUWV9TRUxJTlVYYCwgb3IgYENPTkZJR19TRUNVUklUWV9TTUFDS2A/IFRoZXkgYXJlIG1vZGlmaWVkLCB5ZXMsIGJ1dCB0aGUgKmNvcmUqIGxvZ2ljIEkgbmVlZCB0byBmdXp6IGlzIHRoZSBCUEYga2Z1bmMgYW5kIGBzZWN1cml0eV9sc214YXR0cl9hZGRgLCB3aGljaCBtZWFucyBlbmFibGluZyBgQlBGX0xTTWAgKnNob3VsZCogYmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZSBuZXcgZmVhdHVyZSBwcm9wZXJseS5cblxuQWxyaWdodCwgdGltZSB0byB1c2UgdGhhdCBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzMCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozMzoxNC41MTQ1NDAzNzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4OTkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbml0X2lub2RlX3hhdHRyXCIsXG4gICAgXCJzZWN1cml0eV9sc214YXR0cl9hZGRcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2luaXRfaW5vZGVfeGF0dHJgIHdoaWNoIGFsbG93cyBCUEYgTFNNIHByb2dyYW1zIHRvIHNldCB4YXR0cnMgb24gYSBuZXcgaW5vZGUgZHVyaW5nIHRoZSBgaW5vZGVfaW5pdF9zZWN1cml0eWAgaG9vay4gSXQgbW9kaWZpZXMgdGhlIExTTSBob29rIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50cyBgc2VjdXJpdHlfbHNteGF0dHJfYWRkYCB0byBoYW5kbGUgdGhlIHhhdHRyIGFkZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBMU00gYW5kIEJQRiBzdWJzeXN0ZW1zIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBhIEJQRiBwcm9ncmFtIGFuZCBjcmVhdGluZyBmaWxlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuYyBhbmQgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luaXRfaW5vZGVfeGF0dHJcIixcbiAgICBcInNlY3VyaXR5X2xzbXhhdHRyX2FkZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaW5pdF9pbm9kZV94YXR0cmAgd2hpY2ggYWxsb3dzIEJQRiBMU00gcHJvZ3JhbXMgdG8gc2V0IHhhdHRycyBvbiBhIG5ldyBpbm9kZSBkdXJpbmcgdGhlIGBpbm9kZV9pbml0X3NlY3VyaXR5YCBob29rLiBJdCBtb2RpZmllcyB0aGUgTFNNIGhvb2sgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRzIGBzZWN1cml0eV9sc214YXR0cl9hZGRgIHRvIGhhbmRsZSB0aGUgeGF0dHIgYWRkaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIExTTSBhbmQgQlBGIHN1YnN5c3RlbXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIGEgQlBGIHByb2dyYW0gYW5kIGNyZWF0aW5nIGZpbGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jIGFuZCB0aGUgbW9kaWZpZWQgc2VjdXJpdHkgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmms5s[1] Phase: Succeeded StartedAt: 2026-07-08 10:33:26 +0000 UTC FinishedAt: 2026-07-08 10:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 10:33:26 +0000 UTC FinishedAt: 2026-07-08 10:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2] Phase: Succeeded StartedAt: 2026-07-08 10:33:26 +0000 UTC FinishedAt: 2026-07-08 15:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 10:33:26 +0000 UTC FinishedAt: 2026-07-08 15:26:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 10:33:26 +0000 UTC FinishedAt: 2026-07-08 10:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 10:33:26 +0000 UTC FinishedAt: 2026-07-08 10:33:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"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-workflowmms5s/series-workflowmms5s-convert-artifact-3525493426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 10:33:46 +0000 UTC FinishedAt: 2026-07-08 11:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 10:33:46 +0000 UTC FinishedAt: 2026-07-08 11:20:41 +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:*65f1d026-a527-436b-8ada-9ee377dbe8b4,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-workflowmms5s/series-workflowmms5s-convert-artifact-3525493426/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": "ce9daf1c-de3e-4df8-b1ef-3b06d2b59091", "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-workflowmms5s/series-workflowmms5s-build-action-1704924208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 10:33:46 +0000 UTC FinishedAt: 2026-07-08 11:20:31 +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:*65f1d026-a527-436b-8ada-9ee377dbe8b4,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-workflowmms5s/series-workflowmms5s-convert-artifact-3525493426/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": "ce9daf1c-de3e-4df8-b1ef-3b06d2b59091", "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-workflowmms5s/series-workflowmms5s-build-action-1704924208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:20:41 +0000 UTC FinishedAt: 2026-07-08 11:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:20:41 +0000 UTC FinishedAt: 2026-07-08 11:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:20:41 +0000 UTC FinishedAt: 2026-07-08 11:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:20:41 +0000 UTC FinishedAt: 2026-07-08 11:20:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-workflowmms5s/series-workflowmms5s-convert-artifact-3015424461/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:21:01 +0000 UTC FinishedAt: 2026-07-08 11:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:21:01 +0000 UTC FinishedAt: 2026-07-08 11:23:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce9daf1c-de3e-4df8-b1ef-3b06d2b59091,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-workflowmms5s/series-workflowmms5s-build-action-1704924208/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-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:23:33 +0000 UTC FinishedAt: 2026-07-08 11:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:23:33 +0000 UTC FinishedAt: 2026-07-08 11:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:23:33 +0000 UTC FinishedAt: 2026-07-08 12:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:23:33 +0000 UTC FinishedAt: 2026-07-08 12:19:34 +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:*65f1d026-a527-436b-8ada-9ee377dbe8b4,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-workflowmms5s/series-workflowmms5s-convert-artifact-3015424461/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": "d3141cda-c41f-42db-9b4a-93bbb1aafea6", "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-workflowmms5s/series-workflowmms5s-build-action-3167938473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 11:23:33 +0000 UTC FinishedAt: 2026-07-08 12:19:10 +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:*65f1d026-a527-436b-8ada-9ee377dbe8b4,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-workflowmms5s/series-workflowmms5s-convert-artifact-3015424461/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": "d3141cda-c41f-42db-9b4a-93bbb1aafea6", "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-workflowmms5s/series-workflowmms5s-build-action-3167938473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:19:34 +0000 UTC FinishedAt: 2026-07-08 12:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:19:34 +0000 UTC FinishedAt: 2026-07-08 12:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:19:34 +0000 UTC FinishedAt: 2026-07-08 12:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:19:34 +0000 UTC FinishedAt: 2026-07-08 12:21:36 +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:*d3141cda-c41f-42db-9b4a-93bbb1aafea6,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-workflowmms5s/series-workflowmms5s-build-action-3167938473/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-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 15:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 15:26:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"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:*ce9daf1c-de3e-4df8-b1ef-3b06d2b59091,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3141cda-c41f-42db-9b4a-93bbb1aafea6,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-workflowmms5s/series-workflowmms5s-build-action-1704924208/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-workflowmms5s/series-workflowmms5s-build-action-3167938473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 12:21:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 12:21:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"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-workflowmms5s/series-workflowmms5s-convert-artifact-2359479986/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 12:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 12:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:46 +0000 UTC FinishedAt: 2026-07-08 12:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:56 +0000 UTC FinishedAt: 2026-07-08 15:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmms5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_init_inode_xattr","security_lsmxattr_add","security_inode_init_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_LSM"],"series_id":"7623a9c1-3c40-4631-9d76-507be97a724e","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-08 12:21:56 +0000 UTC FinishedAt: 2026-07-08 15:26:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce9daf1c-de3e-4df8-b1ef-3b06d2b59091,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3141cda-c41f-42db-9b4a-93bbb1aafea6,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-workflowmms5s/series-workflowmms5s-build-action-1704924208/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-workflowmms5s/series-workflowmms5s-build-action-3167938473/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-workflowmms5s/series-workflowmms5s-convert-artifact-2359479986/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,}