Name: series-workflowwgxsx Phase: Succeeded StartedAt: 2026-08-04 16:57:44 +0000 UTC FinishedAt: 2026-08-04 21:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[0] Phase: Succeeded StartedAt: 2026-08-04 16:57:44 +0000 UTC FinishedAt: 2026-08-04 17:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 16:57:44 +0000 UTC FinishedAt: 2026-08-04 17:43:21 +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": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "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": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ksock_create", "bpf_ksock_connect", "bpf_ksock_acquire", "bpf_ksock_release", "bpf_ksock_send", "__sys_connect_socket" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7X19zeXNfY29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDdmODJmYTJlMDYwNTU3ZDAzMTY5YzVmNjc3NjhiNGQ4NDAzMDM2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTc6NDI6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5AQCAtMCwwICYjNDM7MSwzNiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0JQRl9LU09DS19IXG4mIzQzOyNkZWZpbmUgX0JQRl9LU09DS19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuJiM0MzsgKiBAZmFtaWx5Olx0QWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuXG4mIzQzOyAqIEB0eXBlOlx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cbiYjNDM7ICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbiYjNDM7ICpcdFx0b2YgdGhlIGdpdmVuIHR5cGUuXG4mIzQzOyAqIEByZXNlcnZlZDpcdE11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcbiYjNDM7XHRfX3U4IGZhbWlseTtcbiYjNDM7XHRfX3U4IHR5cGU7XG4mIzQzO1x0X191OCBwcm90b2NvbDtcbiYjNDM7XHRfX3U4IHJlc2VydmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4mIzQzOyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuXG4mIzQzOyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKi9cbiYjNDM7dW5pb24gYnBmX2tzb2NrX2FkZHIge1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMC4uMzM0ODQ2ZGY5MjM4MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTA1MCw2ICYjNDM7MTA1MCwxMCBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGV2ZW50ZmRfc2lnbmFsKCkgKi9cbiBcdHVuc2lnbmVkXHRcdFx0aW5fZXZlbnRmZDoxO1xuICNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JTkVUKVxuJiM0MztcdC8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBicGZfa3NvY2tfc2VuZCgpICovXG4mIzQzO1x0dW5zaWduZWRcdFx0XHRpbl9icGZfa3NvY2tfc2VuZDoxO1xuJiM0MzsjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NQVV9QQVNJRFxuIFx0dW5zaWduZWRcdFx0XHRwYXNpZF9hY3RpdmF0ZWQ6MTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uNDhmMWViODE5M2RlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdFx0ICAgICBpbnQgYWRkcmxlbik7XG4mIzQzO2V4dGVybiBpbnQgX19zeXNfY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4mIzQzO1x0XHRcdFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uMTE1NGI1YjBiNmEwNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3MCw2ICYjNDM7NDQ3MCw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuICNpZmRlZiBDT05GSUdfQ1JZUFRPXG4gQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfSU5FVFxuJiM0MztCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4mIzQzOyNlbmRpZlxuIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG4gXG4gc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGIzZmRjYjRlMzU1ZmEuLmE5Mjk1Yjc4NTkwMTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGVcbkBAIC00NCw2ICYjNDM7NDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICYjNDM7PSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xuJiM0MztpZm5lcSAoJChDT05GSUdfSU5FVCksKVxuJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2sub1xuJiM0MztlbmRpZlxuIG9iai0kKENPTkZJR19PRilcdCYjNDM7PSBvZl9uZXQub1xuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjMTk5ODg4NzE5NjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5AQCAtMCwwICYjNDM7MSwzMjkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfa3NvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbiYjNDM7ICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAdXNhZ2U6XHRSZWZlcmVuY2UgY291bnRlci5cbiYjNDM7ICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29jayB7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqc29jaztcbiYjNDM7XHRyZWZjb3VudF90IHVzYWdlO1xuJiM0MztcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbiYjNDM7XG4mIzQzO1x0c29ja19yZWxlYXNlKGtzLVx1MDAzZXNvY2spO1xuJiM0MztcdGtmcmVlKGtzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4mIzQzO1x0ICogY2xlYXJlZCBjdXJyZW50LVx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbiYjNDM7ICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxuJiM0MzsgKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbiYjNDM7ICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxuJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbiYjNDM7XHRcdCBpbnQgKmVycl9fdW5pbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxuJiM0MztcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbiYjNDM7XHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuJiM0MztcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xuJiM0MztcdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4mIzQzO1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuJiM0MztcdFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcHJvdG9jb2wpLFxuJiM0MztcdFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xuJiM0MztcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzID0ga3phbGxvY19vYmooKmtzKTtcbiYjNDM7XHRpZiAoIWtzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXG4mIzQzO1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4mIzQzO1x0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXG4mIzQzO1x0XHRcdCAgXHUwMDI2a3MtXHUwMDNlc29jayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XG4mIzQzO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0a2ZyZWUoa3MpO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4mIzQzOyAqIEBhZGRyOlx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXG4mIzQzOyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4mIzQzOyAqXG4mIzQzOyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4mIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbiYjNDM7XHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xuJiM0MztcdGludCBhZGRybGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xuJiM0MztcdG1lbWNweShcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUOlxuJiM0MztcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChrcy1cdTAwM2Vzb2NrLCBcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGFcbiYjNDM7ICpcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbiYjNDM7ICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4mIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbiYjNDM7e1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a3MtXHUwMDNldXNhZ2UpKSB7XG4mIzQzO1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuJiM0MztcdFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2a3MtXHUwMDNlcndvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0Mzt9XG4mIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxuJiM0MzsgKiBAZGF0YTpcdFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC5cbiYjNDM7ICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIChtYXggNjU1MzUgYnl0ZXMpLlxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxuJiM0MzsgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGt2ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxuJiM0MztcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cbiYjNDM7XHRpZiAoZGF0YV9fc3ogXHUwMDNlIElQX01BWF9NVFUpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9icGZfa3NvY2tfc2VuZClcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSB0cnVlO1xuJiM0MztcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4mIzQzO1x0Y3VycmVudC1cdTAwM2Vpbl9icGZfa3NvY2tfc2VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxuJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fFxuJiM0MztcdCAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMIHx8XG4mIzQzO1x0ICAgIHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7XHQuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcylcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbiYjNDM7XHRcdHtcbiYjNDM7XHRcdFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcbiYjNDM7XHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbiYjNDM7XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxuJiM0MztcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5jNzQyN2RkNGRkNTIzIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTE1LDI3ICYjNDM7MjExNSwzMSBAQCBTWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxuICAqXHRpbmNsdWRlIHRoZSAtRUlOUFJPR1JFU1Mgc3RhdHVzIGZvciBzdWNoIHNvY2tldHMuXG4gICovXG4gXG4mIzQzO2ludCBfX3N5c19jb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiYjNDM7XHRcdFx0IGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jayxcbiYjNDM7XHRcdFx0XHQgICAgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHQgICAgYWRkcmxlbiwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHQgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tXHRpbnQgZXJyO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpO1xuLVx0aWYgKCFzb2NrKSB7XG4tXHRcdGVyciA9IC1FTk9UU09DSztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRlcnIgPVxuLVx0ICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghc29jaylcbiYjNDM7XHRcdHJldHVybiAtRU5PVFNPQ0s7XG4gXG4tXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi1cdFx0XHRcdFx0ICAgIGFkZHJsZW4sIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tb3V0OlxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gX19zeXNfY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbiYjNDM7XHRcdFx0XHQgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMmRiODllOWMwMTg2ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCAmIzQzOzEsMjMxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0d29ya19oZWxwZXJzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfYmFzaWMuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX3JlY3Vyc2lvbi5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNfVEVTVCBcJiMzNDtrc29ja19iYXNpY19uc1wmIzM0O1xuJiM0MzsjZGVmaW5lIE5TX0xTTV9SRUNVUlNJT05fVEVTVCBcJiMzNDtrc29ja19sc21fcmVjdXJzaW9uX25zXCYjMzQ7XG4mIzQzOyNkZWZpbmUgTE9PUEJBQ0tfSVAgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcbiYjNDM7I2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc29ja190ZXN0X2VudiB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmV0bnM7XG4mIzQzO1x0Ym9vbCBuZXRuc19jcmVhdGVkO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuJiM0MztcdGludCByZmQ7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYsIGNvbnN0IGNoYXIgKm5ldG5zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbiYjNDM7XHRlbnYtXHUwMDNlbmV0bnMgPSBuZXRucztcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gLTE7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIG5ldG5zKTtcbiYjNDM7XHRlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIC1uZXQgJXMgbGluayBzZXQgbG8gdXBcJiMzNDssIG5ldG5zKTtcbiYjNDM7XG4mIzQzO1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKG5ldG5zKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZW52LVx1MDAzZW5zdG9rZW4sIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXHUwMDNlcmZkLCBcJiMzNDtyZWNlaXZlciBzb2NrZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlbnYtXHUwMDNlYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRlbnYtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xuJiM0MztcdGVudi1cdTAwM2VhZGRyLnNpbl9wb3J0ID0gaHRvbnMoUkVDVl9QT1JUKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYmluZChlbnYtXHUwMDNlcmZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2ZW52LVx1MDAzZWFkZHIsIHNpemVvZihlbnYtXHUwMDNlYWRkcikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YmluZCByZWNlaXZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHR2LnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUM7XG4mIzQzO1x0dHYudHZfdXNlYyA9IDA7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0IHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmIChlbnYtXHUwMDNlcmZkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0Y2xvc2UoZW52LVx1MDAzZXJmZCk7XG4mIzQzO1x0XHRlbnYtXHUwMDNlcmZkID0gLTE7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlbnYtXHUwMDNlbnN0b2tlbikge1xuJiM0MztcdFx0Y2xvc2VfbmV0bnMoZW52LVx1MDAzZW5zdG9rZW4pO1xuJiM0MztcdFx0ZW52LVx1MDAzZW5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZW52LVx1MDAzZW5ldG5zX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwmIzM0OywgbmV0bnMpO1xuJiM0MztcdFx0ZW52LVx1MDAzZW5ldG5zX2NyZWF0ZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrc29ja190ZXN0X2Vudl9jbGVhbnVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi1cdTAwM2VyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZW52LVx1MDAzZXJmZCk7XG4mIzQzO1x0aWYgKGVudi1cdTAwM2Vuc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMoZW52LVx1MDAzZW5zdG9rZW4pO1xuJiM0MztcdGlmIChlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCkge1xuJiM0MztcdFx0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXMgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXCYjMzQ7LCBlbnYtXHUwMDNlbmV0bnMpO1xuJiM0MztcdFx0ZW52LVx1MDAzZW5ldG5zX2NyZWF0ZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzb2NrX2Fzc2VydF9yZWN2KHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52LCBjb25zdCBjaGFyICpkYXRhLFxuJiM0MztcdFx0XHQgICAgICBzaXplX3QgZGF0YV9zeilcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGVudi1cdTAwM2VidWYsIDAsIHNpemVvZihlbnYtXHUwMDNlYnVmKSk7XG4mIzQzO1x0biA9IHJlY3Zmcm9tKGVudi1cdTAwM2VyZmQsIGVudi1cdTAwM2VidWYsIHNpemVvZihlbnYtXHUwMDNlYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEobiwgZGF0YV9zeiwgXCYjMzQ7cmVjdmZyb20gbGVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRBU1NFUlRfTUVNRVEoZW52LVx1MDAzZWJ1ZiwgZGF0YSwgZGF0YV9zeiwgXCYjMzQ7cGF5bG9hZCBtYXRjaFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGtzb2NrX3NldHVwX2N0eChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fYmUzMiAqaXB2NF9yZW1vdGUsXG4mIzQzO1x0XHRcdCAgICBfX3UxNiAqcmVtb3RlX3BvcnQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4mIzQzO1x0aW50IGVyciwgcGZkO1xuJiM0MztcbiYjNDM7XHQqaXB2NF9yZW1vdGUgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xuJiM0MztcdCpyZW1vdGVfcG9ydCA9IFJFQ1ZfUE9SVDtcbiYjNDM7XG4mIzQzO1x0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHByb2cpO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2tzb2NrX3NldHVwIHJ1blwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O2tzb2NrX3NldHVwIHJldHZhbFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuJiM0MztcdHN0cnVjdCBrc29ja19iYXNpYyAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyLCBwZmQ7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBrc29ja19iYXNpY19fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBrc29ja19iYXNpY19fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NrZWwgbG9hZFwmIzM0OykpIHtcbiYjNDM7XHRcdGtzb2NrX2Jhc2ljX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcdTAwMjZlbnYsIE5TX1RFU1QpKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSBrc29jayAqL1xuJiM0MztcdGlmICgha3NvY2tfc2V0dXBfY3R4KHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2V0dXAsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWlwdjRfcmVtb3RlLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAyOiBSdW4gdGhlIHNlbmQgU1lTQ0FMTCBwcm9nICovXG4mIzQzO1x0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2VuZCk7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwZmQsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7a3NvY2tfc2VuZCBydW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7c2VuZG1zZyBieXRlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovXG4mIzQzO1x0a3NvY2tfYXNzZXJ0X3JlY3YoXHUwMDI2ZW52LCBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhLFxuJiM0MztcdFx0XHQgIHNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhKSk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoXHUwMDI2ZW52KTtcbiYjNDM7XHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4mIzQzO1x0c3RydWN0IGtzb2NrX3JlY3Vyc2lvbiAqc2tlbDtcbiYjNDM7XHRjaGFyIHRyaWdnZXIgPSAmIzM5O3gmIzM5OztcbiYjNDM7XHRpbnQgdGZkID0gLTE7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRzc2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBrc29ja19yZWN1cnNpb25fX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbCBvcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0ga3NvY2tfcmVjdXJzaW9uX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2tlbCBsb2FkXCYjMzQ7KSkge1xuJiM0MztcdFx0a3NvY2tfcmVjdXJzaW9uX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcdTAwMjZlbnYsIE5TX0xTTV9SRUNVUlNJT05fVEVTVCkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuJiM0MztcdGlmICgha3NvY2tfc2V0dXBfY3R4KHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2V0dXAsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWlwdjRfcmVtb3RlLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAyOiBBdHRhY2ggTFNNIHByb2cgYW5kIHRyaWdnZXIgc29ja2V0X3NlbmRtc2cgZnJvbSB1c2Vyc3BhY2UgKi9cbiYjNDM7XHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnID1cbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc29ja2V0X3NlbmRtc2cpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDthdHRhY2ggc29ja2V0X3NlbmRtc2cgbHNtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0dGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwmIzM0O3RyaWdnZXIgc29ja2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRyaWdnZXJfc2VuZCA9IDE7XG4mIzQzO1x0biA9IHNlbmR0byh0ZmQsIFx1MDAyNnRyaWdnZXIsIHNpemVvZih0cmlnZ2VyKSwgMCxcbiYjNDM7XHRcdCAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZlbnYuYWRkciwgc2l6ZW9mKGVudi5hZGRyKSk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHJpZ2dlcl9zZW5kID0gMDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShuLCBzaXplb2YodHJpZ2dlciksIFwmIzM0O3RyaWdnZXIgc2VuZHRvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqL1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlY19jb3VudCwgMixcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtzb2NrZXRfc2VuZG1zZyByZWN1cnNpb24gY291bnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3JlY3Vyc2l2ZSBzZW5kIHN0YXR1c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXJlY19rZnVuY19yZXRzWzFdLFxuJiM0MztcdFx0ICAgICAgIHNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhKSwgXCYjMzQ7b3V0ZXIgc2VuZCBieXRlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGtzb2NrX2Fzc2VydF9yZWN2KFx1MDAyNmVudiwgc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSxcbiYjNDM7XHRcdFx0ICBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSkpO1xuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAodGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHRmZCk7XG4mIzQzO1x0a3NvY2tfdGVzdF9lbnZfY2xlYW51cChcdTAwMjZlbnYpO1xuJiM0MztcdGtzb2NrX3JlY3Vyc2lvbl9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja193cS5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja193cV9zdGFydCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuJiM0MztcdFx0dXNsZWVwKDEwMDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHQgIFwmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE4OWIwZmMxNTc3MDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jXG5AQCAtMCwwICYjNDM7MSwzNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG9fa3NvY2tfc2V0dXAoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBrc29ja19zZW5kKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgc2VuZCA9IC0xO1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdilcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIE5VTEwpO1xuJiM0MztcdGlmICgha3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1x0cmV0dXJuIHNlbmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmMzMjAzMjIwYTJkMGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCAmIzQzOzEsOTkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcbiYjNDM7I2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Vycm5vLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU09DS19TVFJFQU1cdDFcbiYjNDM7I2RlZmluZSBTT0NLX0RHUkFNXHQyXG4mIzQzOyNkZWZpbmUgSVBQUk9UT19UQ1BcdDZcbiYjNDM7I2RlZmluZSBJUFBST1RPX1VEUFx0MTdcbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgb3B0c19fc3osIGludCAqZXJyX191bmluaXQpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbiYjNDM7XHRcdCAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltO1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4mIzQzO2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07XG4mIzQzO1xuJiM0MztzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgX19rcHRyICogY3R4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IF9fa3NvY2tfY3R4X21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKmtzb2NrX2N0eF92YWx1ZV9sb29rdXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHUzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcbiYjNDM7XG4mIzQzO1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbiYjNDM7XHRpZiAoIXYpIHtcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIGN0eCk7XG4mIzQzO1x0aWYgKG9sZCkge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEdsb2JhbHMgZm9yIHBhc3NpbmcgY29uZmlnIGZyb20gdXNlcnNwYWNlICovXG4mIzQzO19fYmUzMiBpcHY0X3JlbW90ZTtcbiYjNDM7X191MTYgcmVtb3RlX3BvcnQ7XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSBcJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29ja1wmIzM0OztcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRvX2tzb2NrX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIGNyZWF0ZV9vcHRzID0ge307XG4mIzQzO1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfb3B0cy5mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNO1xuJiM0MztcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4mIzQzO1xuJiM0MztcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgXHUwMDI2ZXJyKTtcbiYjNDM7XHRpZiAoIWtzKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0YWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpO1xuJiM0MztcdGFkZHIuc2luLnNpbl9hZGRyLnNfYWRkciA9IGlwdjRfcmVtb3RlO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTJmNTIwMDk0M2UzNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jXG5AQCAtMCwwICYjNDM7MSw2OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO1xuJiM0MztpbnQgdGFyZ2V0X3BpZDtcbiYjNDM7aW50IHRyaWdnZXJfc2VuZDtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCByZWNfY291bnQ7XG4mIzQzO2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZ1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4mIzQzO1x0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDtcbiYjNDM7XHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdGludCBrZnVuY19yZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgfHwgIXRyaWdnZXJfc2VuZCB8fCBwaWQgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4mIzQzO1x0aWYgKCF2KSB7XG4mIzQzO1x0XHRrZnVuY19yZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrcyA9IE5VTEw7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR0bXAgPSB2LVx1MDAzZWN0eDtcbiYjNDM7XHRpZiAodG1wKVxuJiM0MztcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrcykge1xuJiM0MztcdFx0a2Z1bmNfcmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2Z1bmNfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xuJiM0MztcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0ga2Z1bmNfcmV0O1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnJlY19jb3VudCwgMSk7XG4mIzQzO1xuJiM0MztcdGlmIChrZnVuY19yZXQgIT0gLUVCVVNZKVxuJiM0MztcdFx0dHJpZ2dlcl9zZW5kID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2YTE4NzNkMTMyZWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5AQCAtMCwwICYjNDM7MSw2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Vycm5vLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc29ja193cV92YWx1ZSB7XG4mIzQzO1x0c3RydWN0IGJwZl93cSB3b3JrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIHUzMik7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpO1xuJiM0Mzt9IHdvcmtfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztpbnQgY3JlYXRlX2VycjtcbiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xuJiM0MztcdFx0LmZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHQudHlwZSA9IFNPQ0tfREdSQU0sXG4mIzQzO1x0XHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2b3B0cywgc2l6ZW9mKG9wdHMpLCBcdTAwMjZlcnIpO1xuJiM0MztcdGlmIChrcylcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbiYjNDM7XHRjcmVhdGVfZXJyID0gZXJyO1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XG4mIzQzO1x0dTMyIGtleSA9IDA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndvcmtfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsdWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHRlcnIgPSBicGZfd3FfaW5pdChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBcdTAwMjZ3b3JrX21hcCwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0cmV0dXJuIGJwZl93cV9zdGFydChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7X19zeXNfY29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDdmODJmYTJlMDYwNTU3ZDAzMTY5YzVmNjc3NjhiNGQ4NDAzMDM2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMTc6NDI6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApAQCAtMCwwICYjNDM7MSwzNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfQlBGX0tTT0NLX0gKJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVycwomIzQzOyAqIEBmYW1pbHk6CUFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LgomIzQzOyAqIEB0eXBlOglTb2NrZXQgdHlwZTogb25seSBTT0NLX0RHUkFNIHN1cHBvcnRlZCBmb3Igbm93LgomIzQzOyAqIEBwcm90b2NvbDoJUHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2wKJiM0MzsgKgkJb2YgdGhlIGdpdmVuIHR5cGUuCiYjNDM7ICogQHJlc2VydmVkOglNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgewomIzQzOwlfX3U4IGZhbWlseTsKJiM0MzsJX191OCB0eXBlOwomIzQzOwlfX3U4IHByb3RvY29sOwomIzQzOwlfX3U4IHJlc2VydmVkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MKJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqLwomIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM3M2JjYzA1OThkMTAuLjMzNDg0NmRmOTIzODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEwNTAsNiAmIzQzOzEwNTAsMTAgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsKIAkvKiBSZWN1cnNpb24gcHJldmVudGlvbiBmb3IgZXZlbnRmZF9zaWduYWwoKSAqLwogCXVuc2lnbmVkCQkJaW5fZXZlbnRmZDoxOwogI2VuZGlmCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0lORVQpCiYjNDM7CS8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBicGZfa3NvY2tfc2VuZCgpICovCiYjNDM7CXVuc2lnbmVkCQkJaW5fYnBmX2tzb2NrX3NlbmQ6MTsKJiM0MzsjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ1BVX1BBU0lECiAJdW5zaWduZWQJCQlwYXNpZF9hY3RpdmF0ZWQ6MTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMmE4ZDdiMTRmMWQxMS4uNDhmMWViODE5M2RlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7CiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7CiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAogCQkJICAgICBpbnQgYWRkcmxlbik7CiYjNDM7ZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKJiM0MzsJCQkJaW50IGFkZHJsZW4sIGludCBmbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiAJCQkgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpOwogZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGIyNzQwMDRmY2NmZDkuLjExNTRiNWIwYjZhMDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTQ0NzAsNiAmIzQzOzQ0NzAsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdCkKICNpZmRlZiBDT05GSUdfQ1JZUFRPCiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eCkKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSU5FVAomIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaykKJiM0MzsjZW5kaWYKIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpCiAKIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGUKQEAgLTQ0LDYgJiM0Mzs0NCw5IEBAIG9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm8KIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vCiYjNDM7aWZuZXEgKCQoQ09ORklHX0lORVQpLCkKJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2subwomIzQzO2VuZGlmCiBvYmotJChDT05GSUdfT0YpCSYjNDM7PSBvZl9uZXQubwogb2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qubwogb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mYzE5OTg4ODcxOTYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvYnBmX2tzb2NrLmMKQEAgLTAsMCAmIzQzOzEsMzI5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9rc29jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrIC0gcmVmY291bnRlZCBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0CiYjNDM7ICogQHNvY2s6CVRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQHVzYWdlOglSZWZlcmVuY2UgY291bnRlci4KJiM0MzsgKiBAcndvcms6CVJDVSB3b3JrIGZvciBkZWZlcnJlZCBjbGVhbnVwIChzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYnBmX2tzb2NrIHsKJiM0MzsJc3RydWN0IHNvY2tldCAqc29jazsKJiM0MzsJcmVmY291bnRfdCB1c2FnZTsKJiM0MzsJc3RydWN0IHJjdV93b3JrIHJ3b3JrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0KJiM0MzsJCWNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspOwomIzQzOwomIzQzOwlzb2NrX3JlbGVhc2Uoa3MtJmd0O3NvY2spOwomIzQzOwlrZnJlZShrcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKCkKJiM0MzsJICogY2xlYXJlZCBjdXJyZW50LSZndDtuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7IGN1cnJlbnQtJmd0O25zcHJveHk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFjawomIzQzOyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzayYjMzk7cyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIEBvcHRzOglQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy4KJiM0MzsgKiBAb3B0c19fc3o6CVNpemUgb2YgdGhlIG9wdHMgc3RydWN0LgomIzQzOyAqIEBlcnJfX3VuaW5pdDoJSW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICoKJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeiwKJiM0MzsJCSBpbnQgKmVycl9fdW5pbml0KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cAomIzQzOwkgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvCiYjNDM7CSAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpewomIzQzOwkJLmZhbWlseSA9IFJFQURfT05DRShvcHRzLSZndDtmYW1pbHkpLAomIzQzOwkJLnR5cGUgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7dHlwZSksCiYjNDM7CQkucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cHJvdG9jb2wpLAomIzQzOwkJLnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKG9wdHNfY29weS5yZXNlcnZlZCkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUICZhbXA7JmFtcDsgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikgewomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQICZhbXA7JmFtcDsgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3MgPSBremFsbG9jX29iaigqa3MpOwomIzQzOwlpZiAoIWtzKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSwKJiM0MzsJICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpCiYjNDM7CSAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGNhbGxlci4KJiM0MzsJICovCiYjNDM7CWVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsCiYjNDM7CQkJICAmYW1wO2tzLSZndDtzb2NrKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGOwomIzQzOwlrcy0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLOwomIzQzOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtrcy0mZ3Q7dXNhZ2UsIDEpOwomIzQzOwlwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIGtzOwomIzQzOwomIzQzO2Vycl9mcmVlOgomIzQzOwlrZnJlZShrcyk7CiYjNDM7ZXJyX291dDoKJiM0MzsJcHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4KJiM0MzsgKiBAYWRkcjoJUG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQGFkZHJfX3N6OglTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLgomIzQzOyAqCiYjNDM7ICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkCiYjNDM7ICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLAomIzQzOwkJCQkgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLAomIzQzOwkJCQkgIHUzMiBhZGRyX19zeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhOwomIzQzOwlpbnQgYWRkcmxlbjsKJiM0MzsKJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi8KJiM0MzsJbWVtY3B5KCZhbXA7c2EsIGFkZHIsIHNpemVvZigqYWRkcikpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNhLnNzX2ZhbWlseSkgewomIzQzOwljYXNlIEFGX0lORVQ6CiYjNDM7CQlhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiYjNDM7CQlicmVhazsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKJiM0MzsJY2FzZSBBRl9JTkVUNjoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChrcy0mZ3Q7c29jaywgJmFtcDtzYSwgYWRkcmxlbiwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGEKJiM0MzsgKgl0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IKJiM0MzsgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2tzLSZndDt1c2FnZSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIGtzOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqIEBrczoJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS4KJiM0MzsgKgomIzQzOyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYQomIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3MtJmd0O3VzYWdlKSkgewomIzQzOwkJSU5JVF9SQ1VfV09SSygmYW1wO2tzLSZndDtyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTsKJiM0MzsJCXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsICZhbXA7a3MtJmd0O3J3b3JrKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpCiYjNDM7ewomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7fQomIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOgkJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLgomIzQzOyAqIEBkYXRhOglQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuCiYjNDM7ICogQGRhdGFfX3N6OglTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuCiYjNDM7ICoKJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcAomIzQzOyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwKJiM0MzsJCQkgICAgICAgdTMyIGRhdGFfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsCiYjNDM7CQkuaW92X2xlbiA9IGRhdGFfX3N6LAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogRWFybHkgY2hlY2sgZm9yIFVEUC4gRXhhY3QgbGltaXRzIGVuZm9yY2VkIGJ5IGtlcm5lbF9zZW5kbXNnKCkuICovCiYjNDM7CWlmIChkYXRhX19zeiAmZ3Q7IElQX01BWF9NVFUpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZiAoY3VycmVudC0mZ3Q7aW5fYnBmX2tzb2NrX3NlbmQpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwljdXJyZW50LSZndDtpbl9icGZfa3NvY2tfc2VuZCA9IHRydWU7CiYjNDM7CXJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLSZndDtzb2NrLCAmYW1wO21zZywgJmFtcDtpb3YsIDEsIGRhdGFfX3N6KTsKJiM0MzsJY3VycmVudC0mZ3Q7aW5fYnBmX2tzb2NrX3NlbmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmNfZW5kX2RlZnMoKTsKJiM0MzsKJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcykKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7CiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzOwkuc2V0ID0gJmFtcDtrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfc2VuZCwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQomIzQzO3sKJiM0MzsJaWYgKCFidGZfaWRfc2V0OF9jb250YWlucygmYW1wO2tzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fAomIzQzOwkgICAgcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwgfHwKJiM0MzsJICAgIHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FQUNDRVM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7CiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzOwkuc2V0ID0gJmFtcDtrc29ja19rZnVuY19idGZfaWRzLAomIzQzOwkuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlciwKJiM0Mzt9OwomIzQzOwomIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcykKJiM0MztCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spCiYjNDM7QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpCiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYnBmX2tzb2NrX2tmdW5jX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHsKJiM0MzsJCXsKJiM0MzsJCQkuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLAomIzQzOwkJCS5rZnVuY19idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMV0sCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwKJiM0MzsJCQkJCSZhbXA7a3NvY2tfaW5pdF9rZnVuY19zZXQpOwomIzQzOwlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO2tzb2NrX2tmdW5jX3NldCk7CiYjNDM7CXJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycywKJiM0MzsJCQkJCQkgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSwKJiM0MzsJCQkJCQkgIFRISVNfTU9EVUxFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggNjNjNjlhMGZhNzRlMS4uYzc0MjdkZDRkZDUyMyAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuYwpAQCAtMjExNSwyNyAmIzQzOzIxMTUsMzEgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKICAqCWluY2x1ZGUgdGhlIC1FSU5QUk9HUkVTUyBzdGF0dXMgZm9yIHN1Y2ggc29ja2V0cy4KICAqLwogCiYjNDM7aW50IF9fc3lzX2Nvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJCSBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtjb25uZWN0KHNvY2ssCiYjNDM7CQkJCSAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgYWRkcmxlbiwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAogCQkgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JaW50IGVycjsKIAogCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTsKLQlpZiAoIXNvY2spIHsKLQkJZXJyID0gLUVOT1RTT0NLOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPQotCSAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CiYjNDM7CWlmICghc29jaykKJiM0MzsJCXJldHVybiAtRU5PVFNPQ0s7CiAKLQllcnIgPSBSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAotCQkJCQkgICAgYWRkcmxlbiwgc29jay0mZ3Q7ZmlsZS0mZ3Q7Zl9mbGFncyB8IGZpbGVfZmxhZ3MpOwotb3V0OgotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLAomIzQzOwkJCQkgICAgc29jay0mZ3Q7ZmlsZS0mZ3Q7Zl9mbGFncyB8IGZpbGVfZmxhZ3MpOwogfQogCiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yZGI4OWU5YzAxODZmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYwpAQCAtMCwwICYjNDM7MSwyMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3Byb2dzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0d29ya19oZWxwZXJzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfYmFzaWMuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX3JlY3Vyc2lvbi5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2Jhc2ljX25zJiMzNDsKJiM0MzsjZGVmaW5lIE5TX0xTTV9SRUNVUlNJT05fVEVTVCAmIzM0O2tzb2NrX2xzbV9yZWN1cnNpb25fbnMmIzM0OwomIzQzOyNkZWZpbmUgTE9PUEJBQ0tfSVAgJiMzNDsxMjcuMC4wLjEmIzM0OwomIzQzOyNkZWZpbmUgUkVDVl9QT1JUIDc3NzcKJiM0MzsjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNQomIzQzOwomIzQzO3N0cnVjdCBrc29ja190ZXN0X2VudiB7CiYjNDM7CWNvbnN0IGNoYXIgKm5ldG5zOwomIzQzOwlib29sIG5ldG5zX2NyZWF0ZWQ7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJaW50IHJmZDsKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYsIGNvbnN0IGNoYXIgKm5ldG5zKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWV2YWwgdHY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7CiYjNDM7CWVudi0mZ3Q7bmV0bnMgPSBuZXRuczsKJiM0MzsJZW52LSZndDtyZmQgPSAtMTsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIG5ldG5zKTsKJiM0MzsJZW52LSZndDtuZXRuc19jcmVhdGVkID0gdHJ1ZTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLW5ldCAlcyBsaW5rIHNldCBsbyB1cCYjMzQ7LCBuZXRucyk7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7bnN0b2tlbiA9IG9wZW5fbmV0bnMobmV0bnMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZW52LSZndDtuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoZW52LSZndDtyZmQsICYjMzQ7cmVjZWl2ZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllbnYtJmd0O2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWVudi0mZ3Q7YWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApOwomIzQzOwllbnYtJmd0O2FkZHIuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpOwomIzQzOwomIzQzOwllcnIgPSBiaW5kKGVudi0mZ3Q7cmZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtlbnYtJmd0O2FkZHIsIHNpemVvZihlbnYtJmd0O2FkZHIpKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JpbmQgcmVjZWl2ZXImIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXR2LnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUM7CiYjNDM7CXR2LnR2X3VzZWMgPSAwOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGVudi0mZ3Q7cmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwgc2l6ZW9mKHR2KSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXQgcmN2dGltZW8mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChlbnYtJmd0O3JmZCAmZ3Q7PSAwKSB7CiYjNDM7CQljbG9zZShlbnYtJmd0O3JmZCk7CiYjNDM7CQllbnYtJmd0O3JmZCA9IC0xOwomIzQzOwl9CiYjNDM7CWlmIChlbnYtJmd0O25zdG9rZW4pIHsKJiM0MzsJCWNsb3NlX25ldG5zKGVudi0mZ3Q7bnN0b2tlbik7CiYjNDM7CQllbnYtJmd0O25zdG9rZW4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChlbnYtJmd0O25ldG5zX2NyZWF0ZWQpIHsKJiM0MzsJCVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSYjMzQ7LCBuZXRucyk7CiYjNDM7CQllbnYtJmd0O25ldG5zX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpCiYjNDM7ewomIzQzOwlpZiAoZW52LSZndDtyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGVudi0mZ3Q7cmZkKTsKJiM0MzsJaWYgKGVudi0mZ3Q7bnN0b2tlbikKJiM0MzsJCWNsb3NlX25ldG5zKGVudi0mZ3Q7bnN0b2tlbik7CiYjNDM7CWlmIChlbnYtJmd0O25ldG5zX2NyZWF0ZWQpIHsKJiM0MzsJCVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSYjMzQ7LCBlbnYtJmd0O25ldG5zKTsKJiM0MzsJCWVudi0mZ3Q7bmV0bnNfY3JlYXRlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzb2NrX2Fzc2VydF9yZWN2KHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52LCBjb25zdCBjaGFyICpkYXRhLAomIzQzOwkJCSAgICAgIHNpemVfdCBkYXRhX3N6KQomIzQzO3sKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwltZW1zZXQoZW52LSZndDtidWYsIDAsIHNpemVvZihlbnYtJmd0O2J1ZikpOwomIzQzOwluID0gcmVjdmZyb20oZW52LSZndDtyZmQsIGVudi0mZ3Q7YnVmLCBzaXplb2YoZW52LSZndDtidWYpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEobiwgZGF0YV9zeiwgJiMzNDtyZWN2ZnJvbSBsZW4mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CUFTU0VSVF9NRU1FUShlbnYtJmd0O2J1ZiwgZGF0YSwgZGF0YV9zeiwgJiMzNDtwYXlsb2FkIG1hdGNoJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrc29ja19zZXR1cF9jdHgoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX2JlMzIgKmlwdjRfcmVtb3RlLAomIzQzOwkJCSAgICBfX3UxNiAqcmVtb3RlX3BvcnQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7CiYjNDM7CWludCBlcnIsIHBmZDsKJiM0MzsKJiM0MzsJKmlwdjRfcmVtb3RlID0gaW5ldF9hZGRyKExPT1BCQUNLX0lQKTsKJiM0MzsJKnJlbW90ZV9wb3J0ID0gUkVDVl9QT1JUOwomIzQzOwomIzQzOwlwZmQgPSBicGZfcHJvZ3JhbV9fZmQocHJvZyk7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7a3NvY2tfc2V0dXAgcnVuJiMzNDspKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtrc29ja19zZXR1cCByZXR2YWwmIzM0OykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IGtzb2NrX2Jhc2ljICpza2VsOwomIzQzOwlpbnQgZXJyLCBwZmQ7CiYjNDM7CiYjNDM7CXNrZWwgPSBrc29ja19iYXNpY19fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW4mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGtzb2NrX2Jhc2ljX19sb2FkKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbCBsb2FkJiMzNDspKSB7CiYjNDM7CQlrc29ja19iYXNpY19fZGVzdHJveShza2VsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKCZhbXA7ZW52LCBOU19URVNUKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUga3NvY2sgKi8KJiM0MzsJaWYgKCFrc29ja19zZXR1cF9jdHgoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfc2V0dXAsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtpcHY0X3JlbW90ZSwKJiM0MzsJCQkgICAgICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtyZW1vdGVfcG9ydCkpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogUnVuIHRoZSBzZW5kIFNZU0NBTEwgcHJvZyAqLwomIzQzOwlwZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfc2VuZCk7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7a3NvY2tfc2VuZCBydW4mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CWlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKSwKJiM0MzsJCSAgICAgICAmIzM0O3NlbmRtc2cgYnl0ZXMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovCiYjNDM7CWtzb2NrX2Fzc2VydF9yZWN2KCZhbXA7ZW52LCBza2VsLSZndDtkYXRhLSZndDtzZW5kX2RhdGEsCiYjNDM7CQkJICBzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKSk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJa3NvY2tfdGVzdF9lbnZfY2xlYW51cCgmYW1wO2Vudik7CiYjNDM7CWtzb2NrX2Jhc2ljX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3JlY3Vyc2lvbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IGtzb2NrX3JlY3Vyc2lvbiAqc2tlbDsKJiM0MzsJY2hhciB0cmlnZ2VyID0gJiMzOTt4JiMzOTs7CiYjNDM7CWludCB0ZmQgPSAtMTsKJiM0MzsJaW50IGVycjsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlza2VsID0ga3NvY2tfcmVjdXJzaW9uX19vcGVuKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3BlbiYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0ga3NvY2tfcmVjdXJzaW9uX19sb2FkKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbCBsb2FkJiMzNDspKSB7CiYjNDM7CQlrc29ja19yZWN1cnNpb25fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cCgmYW1wO2VudiwgTlNfTFNNX1JFQ1VSU0lPTl9URVNUKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovCiYjNDM7CWlmICgha3NvY2tfc2V0dXBfY3R4KHNrZWwtJmd0O3Byb2dzLmtzb2NrX3NldHVwLCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7aXB2NF9yZW1vdGUsCiYjNDM7CQkJICAgICAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7cmVtb3RlX3BvcnQpKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfc2VuZG1zZyBmcm9tIHVzZXJzcGFjZSAqLwomIzQzOwlza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfc2VuZG1zZyA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLSZndDtwcm9ncy5rc29ja19zb2NrZXRfc2VuZG1zZyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfc2VuZG1zZywKJiM0MzsJCQkgICAmIzM0O2F0dGFjaCBzb2NrZXRfc2VuZG1zZyBsc20mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHRmZCwgJiMzNDt0cmlnZ2VyIHNvY2tldCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHJpZ2dlcl9zZW5kID0gMTsKJiM0MzsJbiA9IHNlbmR0byh0ZmQsICZhbXA7dHJpZ2dlciwgc2l6ZW9mKHRyaWdnZXIpLCAwLAomIzQzOwkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7ZW52LmFkZHIsIHNpemVvZihlbnYuYWRkcikpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RhcmdldF9waWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RyaWdnZXJfc2VuZCA9IDA7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIHNpemVvZih0cmlnZ2VyKSwgJiMzNDt0cmlnZ2VyIHNlbmR0byYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqLwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlY19jb3VudCwgMiwKJiM0MzsJCSAgICAgICAmIzM0O3NvY2tldF9zZW5kbXNnIHJlY3Vyc2lvbiBjb3VudCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7cmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSwKJiM0MzsJCSAgICAgICAmIzM0O3JlY3Vyc2l2ZSBzZW5kIHN0YXR1cyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7cmVjX2tmdW5jX3JldHNbMV0sCiYjNDM7CQkgICAgICAgc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSksICYjMzQ7b3V0ZXIgc2VuZCBieXRlcyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJa3NvY2tfYXNzZXJ0X3JlY3YoJmFtcDtlbnYsIHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSwKJiM0MzsJCQkgIHNpemVvZihza2VsLSZndDtkYXRhLSZndDtzZW5kX2RhdGEpKTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlpZiAodGZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0ZmQpOwomIzQzOwlrc29ja190ZXN0X2Vudl9jbGVhbnVwKCZhbXA7ZW52KTsKJiM0MzsJa3NvY2tfcmVjdXJzaW9uX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjViOWM2Y2MzMDM5MjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9wcm9ncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX3dxLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCBrc29ja193cSAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2tzb2NrX3dxIG9wZW4gYW5kIGxvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O2tzb2NrX3dxX3N0YXJ0IHJldHZhbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3aGlsZSAoIV9fYXRvbWljX2xvYWRfbigmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpCiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLAomIzQzOwkJICAmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrc29ja193cV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE4OWIwZmMxNTc3MDEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYwpAQCAtMCwwICYjNDM7MSwzNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2VuZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgc2VuZCA9IC0xOwomIzQzOwomIzQzOwl2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpOwomIzQzOwlpZiAoIXYpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3B0cl94Y2hnKCZhbXA7di0mZ3Q7Y3R4LCBOVUxMKTsKJiM0MzsJaWYgKCFrcykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlzZW5kID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpOwomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7CXJldHVybiBzZW5kOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmMzMjAzMjIwYTJkMGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKQEAgLTAsMCAmIzQzOzEsOTkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSAomIzQzOyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgU09DS19TVFJFQU0JMQomIzQzOyNkZWZpbmUgU09DS19ER1JBTQkyCiYjNDM7I2RlZmluZSBJUFBST1RPX1RDUAk2CiYjNDM7I2RlZmluZSBJUFBST1RPX1VEUAkxNwomIzQzOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywKJiM0MzsJCQkJICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07CiYjNDM7aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkciwKJiM0MzsJCSAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3NvY2tfY3R4X2luc2VydChzdHJ1Y3QgYnBmX2tzb2NrICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKm9sZDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KSB7CiYjNDM7CQlicGZfa3NvY2tfcmVsZWFzZShjdHgpOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgY3R4KTsKJiM0MzsJaWYgKG9sZCkgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uob2xkKTsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHbG9iYWxzIGZvciBwYXNzaW5nIGNvbmZpZyBmcm9tIHVzZXJzcGFjZSAqLwomIzQzO19fYmUzMiBpcHY0X3JlbW90ZTsKJiM0MztfX3UxNiByZW1vdGVfcG9ydDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSAmIzM0O2hlbGxvIGZyb20gYnBmIGtzb2NrJiMzNDs7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG9fa3NvY2tfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTsKJiM0MzsJdW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNOwomIzQzOwljcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQOwomIzQzOwomIzQzOwlrcyA9IGJwZl9rc29ja19jcmVhdGUoJmFtcDtjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgJmFtcDtlcnIpOwomIzQzOwlpZiAoIWtzKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTsKJiM0MzsJYWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCAmYW1wO2FkZHIsIHNpemVvZihhZGRyKSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVFWElTVCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTJmNTIwMDk0M2UzNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYwpAQCAtMCwwICYjNDM7MSw2OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7aW50IHRhcmdldF9waWQ7CiYjNDM7aW50IHRyaWdnZXJfc2VuZDsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50OwomIzQzO2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19rc29ja19zZXR1cCgpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhrc29ja19zb2NrZXRfc2VuZG1zZywgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAomIzQzOwkgICAgIGludCBzaXplLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwlpbnQga2Z1bmNfcmV0OwomIzQzOwomIzQzOwlpZiAocmV0IHx8ICF0cmlnZ2VyX3NlbmQgfHwgcGlkICE9IHRhcmdldF9waWQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpOwomIzQzOwlpZiAoIXYpIHsKJiM0MzsJCWtmdW5jX3JldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrcyA9IE5VTEw7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXRtcCA9IHYtJmd0O2N0eDsKJiM0MzsJaWYgKHRtcCkKJiM0MzsJCWtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIWtzKSB7CiYjNDM7CQlrZnVuY19yZXQgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2Z1bmNfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpOwomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgJmFtcDsgMV0gPSBrZnVuY19yZXQ7CiYjNDM7CV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7cmVjX2NvdW50LCAxKTsKJiM0MzsKJiM0MzsJaWYgKGtmdW5jX3JldCAhPSAtRUJVU1kpCiYjNDM7CQl0cmlnZ2VyX3NlbmQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKQEAgLTAsMCAmIzQzOzEsNjIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2Vycm5vLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBrc29ja193cV92YWx1ZSB7CiYjNDM7CXN0cnVjdCBicGZfd3Egd29yazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCB1MzIpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7CiYjNDM7fSB3b3JrX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztpbnQgY3JlYXRlX2VycjsKJiM0Mzt1MzIgY2FsbGJhY2tfZG9uZTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0gewomIzQzOwkJLmZhbWlseSA9IEFGX0lORVQsCiYjNDM7CQkudHlwZSA9IFNPQ0tfREdSQU0sCiYjNDM7CQkucHJvdG9jb2wgPSBJUFBST1RPX1VEUCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlrcyA9IGJwZl9rc29ja19jcmVhdGUoJmFtcDtvcHRzLCBzaXplb2Yob3B0cyksICZhbXA7ZXJyKTsKJiM0MzsJaWYgKGtzKQomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uoa3MpOwomIzQzOwljcmVhdGVfZXJyID0gZXJyOwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2NhbGxiYWNrX2RvbmUsIDEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBrc29ja193cV9zdGFydCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlOwomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJdmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d29ya19tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwllcnIgPSBicGZfd3FfaW5pdCgmYW1wO3ZhbHVlLSZndDt3b3JrLCAmYW1wO3dvcmtfbWFwLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CWVyciA9IGJwZl93cV9zZXRfY2FsbGJhY2soJmFtcDt2YWx1ZS0mZ3Q7d29yaywga3NvY2tfd3FfY2FsbGJhY2ssIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIGJwZl93cV9zdGFydCgmYW1wO3ZhbHVlLSZndDt3b3JrLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgS2VybmVsIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgYGJwZl9rc29ja2AgZmVhdHVyZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlIGFuZCBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzIGRpcmVjdGx5LiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBuZXcgc2V0IG9mIEJQRiBrZnVuY3M6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYW5kIGBicGZfa3NvY2tfc2VuZGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdG8gd2F0Y2guCgpUaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBhbmQgYG5ldC9zb2NrZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuZXR3b3JraW5nIGNvbnRleHQuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIGFueSBCUEYtcmVsYXRlZCBjaGFuZ2UuIGBDT05GSUdfSU5FVGAgaXMgYWxzbyBleHBlY3RlZCwgYXMgdGhpcyBkZWFscyB3aXRoIGludGVybmV0IHByb3RvY29scy4gV2Ugc2hvdWxkIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCB0aGUgbWFrZWZpbGUsIGl0IHNlZW1zIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LiBgYnBmX2tzb2NrLm9gIGlzIG9ubHkgY29tcGlsZWQgaWYgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgZW5hYmxlZC4gR29vZC4KCkkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmIG5vdy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgYG5ldC9jb3JlL2JwZl9rc29jay5jYCBob2xkcy4gQXNpZGUgZnJvbSB0aGUga2Z1bmNzLCBpdCBhbHNvIGhhcyBga3NvY2tfcmVsZWFzZV93b3JrX2ZuYCBhbmQgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgdGhlc2Uga2VybmVsIHNvY2tldHMuCgpUaGUgYG5ldC9zb2NrZXQuY2AgZmlsZSBpcyBpbnRlcmVzdGluZy4gVGhlIGFkZGl0aW9uIG9mIGBfX3N5c19jb25uZWN0X3NvY2tldGAgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGEgbmV3LCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaW4gdGhlIGtlcm5lbCBpbnRlcmZhY2U7IHRoaXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBsb2dpYy4KCkZpbmFsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgdGhlIGRlcGVuZGVuY2llcyBhZ2FpbiwgYW5kIGNvbmZpcm0gSSYjMzk7bSBub3QgbWlzc2luZyBhbnkuIGBDT05GSUdfSVBWNmAgaXMgYWxzbyB1c2VkIGluIGBicGZfa3NvY2tfY29ubmVjdGAsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbmV4dCBjb25maWcgdG8gY29uc2lkZXIuIEFuZCBJIGFtIGdvaW5nIHRvIHJ1biBhIGBncmVwYCB0byBjaGVjayBpZiBgQ09ORklHX0lORVRgIGlzIHRoZSBvbmx5IG5ldHdvcmsgZGVwZW5kZW5jeS4KCkFscmlnaHQsIHdpdGggdGhpcyBvdmVydmlldywgSSBoYXZlIGEgZ29vZCBmcmFtZXdvcmsgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gVGhpcyBzZWVtcyB0byBiZSBhIHBvd2VyZnVsIGZlYXR1cmUsIG9wZW5pbmcgdXAgbmV3IHBvc3NpYmlsaXRpZXMgZm9yIEJQRi1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTExLS8qKlxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxMjogKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0xMy0gKiBAZmFtaWx5Olx0QWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuXG4tLVxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0xOC0gKi9cbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmg6MTk6c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTIwLVx0X191OCBmYW1pbHk7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0yNi0vKipcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmg6Mjc6ICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMjgtICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTMwLSAqL1xuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDozMTp1bmlvbiBicGZfa3NvY2tfYWRkciB7XG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTMyLVx0c3RydWN0IHNvY2thZGRyX2luIHNpbjtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwNTMtI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfSU5FVClcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDU0Olx0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGJwZl9rc29ja19zZW5kKCkgKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDU1Olx0dW5zaWduZWRcdFx0XHRpbl9icGZfa3NvY2tfc2VuZDoxO1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwNTYtI2VuZGlmXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ0NzE9QlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NzMtI2lmZGVmIENPTkZJR19JTkVUXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ3NDpCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ3NS0jZW5kaWZcbi0tXG5uZXQvY29yZS9NYWtlZmlsZT00Nz1pZm5lcSAoJChDT05GSUdfSU5FVCksKVxubmV0L2NvcmUvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ5LWVuZGlmXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NTojaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfa3NvY2suaFx1MDAzZVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwLS8qKlxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjE6ICogc3RydWN0IGJwZl9rc29jayAtIHJlZmNvdW50ZWQgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjItICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI1LSAqL1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjY6c3RydWN0IGJwZl9rc29jayB7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yNy1cdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzI9c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMzLXtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjM0Olx0c3RydWN0IGJwZl9rc29jayAqa3MgPVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzU6XHRcdGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzYtXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNDAtXG5uZXQvY29yZS9icGZfa3NvY2suYzo0MTpzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXG5uZXQvY29yZS9icGZfa3NvY2suYy00Mi17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9NTA9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTUyLS8qKlxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NTM6ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG5uZXQvY29yZS9icGZfa3NvY2suYy01NC0gKlxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTU3LSAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG5uZXQvY29yZS9icGZfa3NvY2suYzo1ODogKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG5uZXQvY29yZS9icGZfa3NvY2suYy01OS0gKlxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTY0LSAqXG5uZXQvY29yZS9icGZfa3NvY2suYzo2NTogKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjYtICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjgtICovXG5uZXQvY29yZS9icGZfa3NvY2suYzo2OTpfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbm5ldC9jb3JlL2JwZl9rc29jay5jOjcwOmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEtXHRcdCBpbnQgKmVycl9fdW5pbml0KVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzIte1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6NzM6XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjc0Olx0c3RydWN0IGJwZl9rc29jayAqa3M7XG5uZXQvY29yZS9icGZfa3NvY2suYy03NS1cdGludCBlcnI7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODEtXHQgKi9cbm5ldC9jb3JlL2JwZl9rc29jay5jOjgyOlx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTgzLVx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy04Ni1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjg3Olx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtODgtXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtOTEtXG5uZXQvY29yZS9icGZfa3NvY2suYzo5MjpcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTkzLVx0XHQuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlZmFtaWx5KSxcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNDktLyoqXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNTA6ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTUxLSAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTYxLSAqL1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTYyOl9fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE2MzpcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNjQtXHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNjgtXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNjk6XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE3MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTE5NC0vKipcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE5NTogKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTk2LSAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTE5OS0gKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjAwOiAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwMS0gKi9cbm5ldC9jb3JlL2JwZl9rc29jay5jOjIwMjpfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwMy17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjA5LS8qKlxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjEwOiAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMTEtICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMTUtICovXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMTY6X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIxNy17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIzLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI0Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIyNS17XG5uZXQvY29yZS9icGZfa3NvY2suYzoyMjY6XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjctfVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI4OkNGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjktXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMzAtLyoqXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMzE6ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMzItICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjQwLSAqL1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjQxOl9fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI0Mi1cdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI1Mi1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI1MzpcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjU0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjU5LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjYwOlx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjEtXHRcdHJldHVybiAtRUJVU1k7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjItXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNjM6XHRjdXJyZW50LVx1MDAzZWluX2JwZl9rc29ja19zZW5kID0gdHJ1ZTtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI2NC1cdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG5uZXQvY29yZS9icGZfa3NvY2suYzoyNjU6XHRjdXJyZW50LVx1MDAzZWluX2JwZl9rc29ja19zZW5kID0gZmFsc2U7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjYtXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjcyPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjczOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNzQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTI4Mj1CVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjg0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjg1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfc2VuZCwgS0ZfU0xFRVBBQkxFKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg2LUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODctXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODg6c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg5LXtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz0yOTg9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMDAtXHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwMTpcdC5maWx0ZXIgPSBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyLFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAyLX07XG5uZXQvY29yZS9icGZfa3NvY2suYy0zMDMtXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDQ6QlRGX0lEX0xJU1QoYnBmX2tzb2NrX2R0b3JfaWRzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzA1OkJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNjpCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwNy1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwODpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA5LXtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMxMC1cdGludCByZXQ7XG5uZXQvY29yZS9icGZfa3NvY2suYzozMTE6XHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7XG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTItXHRcdHtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxMzpcdFx0XHQuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE0Olx0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMV0sXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTUtXHRcdH0sXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIzLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMyNDpcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMyNTpcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyNi1cdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMjgtXG5uZXQvY29yZS9icGZfa3NvY2suYzozMjk6bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYz0xNjU9dm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jLTIxMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmM6MjEyOlx0LyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYy0yMTMtXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWNfY291bnQsIDIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmM9MTg9aW50IGtzb2NrX3NlbmQodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jLTIwLVx0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmM6MjE6XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jLTIyLVx0aW50IHNlbmQgPSAtMTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYy0zMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jOjMyOlx0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jOjMzOlx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMtMzQtXHRyZXR1cm4gc2VuZDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MTY6c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTE3LVx0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MTg6aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xOS1cdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MjA6c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyMTp2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MjI6aW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0yMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD0yND1zdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjI1Olx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMjYtfTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg9MzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKmtzb2NrX2N0eF92YWx1ZV9sb29rdXAodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NDI6c3RhdGljIGlubGluZSBpbnQga3NvY2tfY3R4X2luc2VydChzdHJ1Y3QgYnBmX2tzb2NrICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDMte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTQ0LVx0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ1Olx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTQ2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC00OC1cdGlmICghdikge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ5Olx0XHRicGZfa3NvY2tfcmVsZWFzZShjdHgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTUwLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNTQtXHRpZiAob2xkKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NTU6XHRcdGJwZl9rc29ja19yZWxlYXNlKG9sZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNTYtXHRcdHJldHVybiAtRUVYSVNUO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD02OD1zdGF0aWMgaW5saW5lIGludCBkb19rc29ja19zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTY5LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MDpcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MTpcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MjpcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTczLVx0aW50IGVyciA9IDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTc4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjc5Olx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcdTAwMjZlcnIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTgwLVx0aWYgKCFrcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6ODc6XHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC04OC1cdGlmIChlcnIpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo4OTpcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTkwLVx0XHRyZXR1cm4gZXJyO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYz0yNz1pbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMtMzAtXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmM6MzE6XHRzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy0zMi1cdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jLTQ3LVx0aWYgKHRtcClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYzo0ODpcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jLTQ5LVx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy01NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYzo1NjpcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYzo1NzpcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy01OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYz0yNT1zdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMjYte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6Mjc6XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHMgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yOC1cdFx0LmZhbWlseSA9IEFGX0lORVQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzEtXHR9O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6MzI6XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTMzLVx0aW50IGVyciA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0zNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjM1Olx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM2LVx0aWYgKGtzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6Mzc6XHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM4LVx0Y3JlYXRlX2VyciA9IGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkyMwoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA3MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBLc29jayBGZWF0dXJlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIHRoZSBgYnBmX2tzb2NrYCBmZWF0dXJlLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb24gb2YgQlBGIHByb2dyYW1zIHdpdGgga2VybmVsIHNvY2tldHMsIHdoaWNoIHJlcHJlc2VudHMgYSBzaWduaWZpY2FudCBhZGRpdGlvbiBpbiB0ZXJtcyBvZiBhdHRhY2sgc3VyZmFjZSBhbmQga2VybmVsIGZ1bmN0aW9uYWxpdHkgZXhwb3N1cmUuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYCBmbGFnZ2VkLiBUaGVzZSBhcmUgb2J2aW91c2x5IGVzc2VudGlhbC4gSSBicmllZmx5IGNvbnNpZGVyZWQgb3RoZXIgY29uZmlncyBsaWtlIGBDT05GSUdfQ1JZUFRPYCwgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl0IGFzIHVucmVsYXRlZCB0byB0aGUga3NvY2sgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19JUFY2YCBpcyBhbHNvIHJlbGV2YW50IGJlY2F1c2UgaXQmIzM5O3MgdXNlZCBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBzbyBpdCBzaG91bGQgZGVmaW5pdGVseSBiZSBpbmNsdWRlZCBpbiBvdXIgZnV6emluZyBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGUgbWF4aW11bSBjb3ZlcmFnZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdHMgdXNlIGluIGBuZXQvY29yZS9icGZfa3NvY2suY2A6IElQdjYgaXMgZW5hYmxlZCB2aWEgdGhlIGBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgbWFjcm8uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQuIEkmIzM5O3ZlIGdvdDoKCiogICBgYnBmX2tzb2NrX2NyZWF0ZWAKKiAgIGBicGZfa3NvY2tfY29ubmVjdGAKKiAgIGBicGZfa3NvY2tfYWNxdWlyZWAKKiAgIGBicGZfa3NvY2tfcmVsZWFzZWAKKiAgIGBicGZfa3NvY2tfc2VuZGAKKiAgIGBfX3N5c19jb25uZWN0X3NvY2tldGAKCkkgY29uc2lkZXJlZCB3aGV0aGVyIGBrc29ja19yZWxlYXNlX3dvcmtfZm5gIHdhcnJhbnRzIGZ1enppbmcsIGJ1dCBpdCBzZWVtcyB0byBiZSBqdXN0IGEgd3JhcHBlciBhcm91bmQgYHNvY2tfcmVsZWFzZWAgYW5kIGBrZnJlZWAsIG1vc3RseSBqdXN0IGNhbGxpbmcgZXhpc3RpbmcgZnVuY3Rpb25zLiBJdHMgcHJpbWFyeSBmdW5jdGlvbiBpcyBhIFJDVSB3b3JrIGZ1bmN0aW9uLCBzbyB3aGlsZSBpbnRlcmVzdGluZywgdGhlIHByaW1hcnkgbG9naWMgaXMgbGlrZWx5IHRvIGJlIGVsc2V3aGVyZSBpbiBleGlzdGluZyBrZnVuY3MsIHNvIEkmIzM5O20gbGVzcyBpbmNsaW5lZCB0byBoZWF2aWx5IGZvY3VzIG9uIGl0LiBBZGRpdGlvbmFsbHksIEkgY29uZmlybWVkIHRoYXQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBpc24mIzM5O3Qgc3RhdGljLCBzbyBpdCYjMzk7cyBkaXJlY3RseSBhY2Nlc3NpYmxlLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlLgoKRXNzZW50aWFsbHksIEkgc2VlIGBfX3N5c19jb25uZWN0X3NvY2tldGAgYXMgYSBjZW50cmFsIHBvaW50LCBnaXZlbiBpdHMgY3JpdGljYWwgcm9sZSBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgIGFuZCBgX19zeXNfY29ubmVjdF9maWxlYC4KClRoZXJlZm9yZSwgdGhlIHVwZGF0ZWQgbGlzdCBvZiB0YXJnZXRzIGFuZCBjb25maWdzIGFyZToKCioqRm9jdXMgU3ltYm9sczoqKgoKKiAgIGBicGZfa3NvY2tfY3JlYXRlYAoqICAgYGJwZl9rc29ja19jb25uZWN0YAoqICAgYGJwZl9rc29ja19hY3F1aXJlYAoqICAgYGJwZl9rc29ja19yZWxlYXNlYAoqICAgYGJwZl9rc29ja19zZW5kYAoqICAgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YAoKKipDb25maWdzOioqCgoqICAgYENPTkZJR19CUEZfU1lTQ0FMTGAKKiAgIGBDT05GSUdfSU5FVGAKKiAgIGBDT05GSUdfSVBWNmAKClRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IGBicGZfa3NvY2tgIGFkZHMgYnJhbmQgbmV3IGtmdW5jcyBhbmQgbmV3IGVudHJ5cG9pbnRzIHdpdGhpbiB0aGUga2VybmVsIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLiBUaGV5IGFyZSwgaW4gZWZmZWN0LCBuZXcgd2F5cyB0byBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzIHRocm91Z2ggQlBGIHByb2dyYW1zLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIG5ldyBmZWF0dXJlLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7X19zeXNfY29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O19fc3lzX2Nvbm5lY3Rfc29ja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGZlYXR1cmUgYGJwZl9rc29ja2AgdGhhdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cyBmb3IgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jcyBhbmQgdGhlIG5ld2x5IGV4dHJhY3RlZCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGhlbHBlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQyOjI0LjcyNDYwMjg2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjE0MzMzMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcIl9fc3lzX2Nvbm5lY3Rfc29ja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNzo0MjoyNC43MjQ2MTE1ODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjUzOTE3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkN2Y4MmZhMmUwNjA1NTdkMDMxNjljNWY2Nzc2OGI0ZDg0MDMwMzYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTc6NDI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2JcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxcbkBAIC0wLDAgKzEsMzYgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaWZuZGVmIF9CUEZfS1NPQ0tfSFxcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW42LmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcXG4rICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4rICogQHR5cGU6XFx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cXG4rICogQHByb3RvY29sOlxcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXFxuKyAqXFx0XFx0b2YgdGhlIGdpdmVuIHR5cGUuXFxuKyAqIEByZXNlcnZlZDpcXHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XFxuK1xcdF9fdTggZmFtaWx5O1xcbitcXHRfX3U4IHR5cGU7XFxuK1xcdF9fdTggcHJvdG9jb2w7XFxuK1xcdF9fdTggcmVzZXJ2ZWQ7XFxuK307XFxuK1xcbisvKipcXG4rICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cXG4rICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuXFxuKyAqL1xcbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuaW5kZXggMzczYmNjMDU5OGQxMC4uMzM0ODQ2ZGY5MjM4MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG5AQCAtMTA1MCw2ICsxMDUwLDEwIEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuIFxcdC8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBldmVudGZkX3NpZ25hbCgpICovXFxuIFxcdHVuc2lnbmVkXFx0XFx0XFx0aW5fZXZlbnRmZDoxO1xcbiAjZW5kaWZcXG4rI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19JTkVUKVxcbitcXHQvKiBSZWN1cnNpb24gcHJldmVudGlvbiBmb3IgYnBmX2tzb2NrX3NlbmQoKSAqL1xcbitcXHR1bnNpZ25lZFxcdFxcdFxcdGluX2JwZl9rc29ja19zZW5kOjE7XFxuKyNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NQVV9QQVNJRFxcbiBcXHR1bnNpZ25lZFxcdFxcdFxcdHBhc2lkX2FjdGl2YXRlZDoxO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG5pbmRleCAyYThkN2IxNGYxZDExLi40OGYxZWI4MTkzZGVhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xcbiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7XFxuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdFxcdCAgICAgaW50IGFkZHJsZW4pO1xcbitleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxcbitcXHRcXHRcXHRcXHRpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTtcXG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxcbiBcXHRcXHRcXHQgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpO1xcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGIyNzQwMDRmY2NmZDkuLjExNTRiNWIwYjZhMDUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTQ0NzAsNiArNDQ3MCw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbiAjaWZkZWYgQ09ORklHX0NSWVBUT1xcbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcXG4gI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfSU5FVFxcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXFxuKyNlbmRpZlxcbiBCVEZfU0VUX0VORChyY3VfcHJvdGVjdGVkX3R5cGVzKVxcbiBcXG4gc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlXFxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9NYWtlZmlsZVxcbisrKyBiL25ldC9jb3JlL01ha2VmaWxlXFxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXFxuIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcbitpZm5lcSAoJChDT05GSUdfSU5FVCksKVxcbitvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vXFxuK2VuZGlmXFxuIG9iai0kKENPTkZJR19PRilcXHQrPSBvZl9uZXQub1xcbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cXG4gb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICs9IGRldm1lbS5vXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9rc29jay5jIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjMTk5ODg4NzE5NjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcXG5AQCAtMCwwICsxLDMyOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW42LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IGJwZl9rc29jayAtIHJlZmNvdW50ZWQgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dFxcbisgKiBAc29jazpcXHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxcbisgKiBAdXNhZ2U6XFx0UmVmZXJlbmNlIGNvdW50ZXIuXFxuKyAqIEByd29yazpcXHRSQ1Ugd29yayBmb3IgZGVmZXJyZWQgY2xlYW51cCAoc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXFxuKyAqL1xcbitzdHJ1Y3QgYnBmX2tzb2NrIHtcXG4rXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4rXFx0cmVmY291bnRfdCB1c2FnZTtcXG4rXFx0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xcbitcXG4rXFx0c29ja19yZWxlYXNlKGtzLVxcdTAwM2Vzb2NrKTtcXG4rXFx0a2ZyZWUoa3MpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKVxcbitcXHQgKiBjbGVhcmVkIGN1cnJlbnQtXFx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRCkgXFx1MDAyNlxcdTAwMjYgY3VycmVudC1cXHUwMDNlbnNwcm94eTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKlxcbisgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxcbisgKlxcbisgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXFxuKyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrXFxuKyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzaydzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxcbisgKlxcbisgKiBAb3B0czpcXHRQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy5cXG4rICogQG9wdHNfX3N6OlxcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0LlxcbisgKiBAZXJyX191bmluaXQ6XFx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cXG4rICovXFxuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxcbiticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcXG4rXFx0XFx0IGludCAqZXJyX191bmluaXQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LypcXG4rXFx0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcXG4rXFx0ICogZnJvbSBjdXJyZW50LiBLZXJuZWwgdGhyZWFkcywgaW5jbHVkaW5nIEJQRiB3b3JrcXVldWUgY2FsbGJhY2tzLCBkb1xcbitcXHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cXG4rXFx0ICovXFxuK1xcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKSB7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XFxuK1xcdFxcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlZmFtaWx5KSxcXG4rXFx0XFx0LnR5cGUgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNldHlwZSksXFxuK1xcdFxcdC5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2Vwcm90b2NvbCksXFxuK1xcdFxcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VyZXNlcnZlZCksXFxuK1xcdH07XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuK1xcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2IG9wdHNfY29weS5wcm90b2NvbCAhPSAwKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0a3MgPSBremFsbG9jX29iaigqa3MpO1xcbitcXHRpZiAoIWtzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxcbitcXHQgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMilcXG4rXFx0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0ncyBjYWxsZXIuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBzb2NrX2NyZWF0ZShvcHRzX2NvcHkuZmFtaWx5LCBvcHRzX2NvcHkudHlwZSwgb3B0c19jb3B5LnByb3RvY29sLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZrcy1cXHUwMDNlc29jayk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcbitcXHRrcy1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjtcXG4rXFx0a3MtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza191c2VybG9ja3MgfD0gU09DS19SQ1ZCVUZfTE9DSztcXG4rXFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2a3MtXFx1MDAzZXVzYWdlLCAxKTtcXG4rXFx0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XFxuK1xcdHJldHVybiBrcztcXG4rXFxuK2Vycl9mcmVlOlxcbitcXHRrZnJlZShrcyk7XFxuK2Vycl9vdXQ6XFxuK1xcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxcbisgKiBAa3M6XFx0XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXFxuKyAqIEBhZGRyOlxcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxcbisgKiBAYWRkcl9fc3o6XFx0U2l6ZSBvZiB0aGUgYWRkcmVzcyB1bmlvbi5cXG4rICpcXG4rICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcXG4rXFx0XFx0XFx0XFx0ICB1MzIgYWRkcl9fc3opXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7XFxuK1xcdGludCBhZGRybGVuO1xcbitcXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi9cXG4rXFx0bWVtY3B5KFxcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XFxuK1xcbitcXHRzd2l0Y2ggKHNhLnNzX2ZhbWlseSkge1xcbitcXHRjYXNlIEFGX0lORVQ6XFxuK1xcdFxcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbitcXHRjYXNlIEFGX0lORVQ2OlxcbitcXHRcXHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gX19zeXNfY29ubmVjdF9zb2NrZXQoa3MtXFx1MDAzZXNvY2ssIFxcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gYWNxdWlyZS4gTXVzdCBiZSBhXFxuKyAqXFx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cXG4rICpcXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXFxuK3tcXG4rXFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmtzLVxcdTAwM2V1c2FnZSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4ga3M7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cXG4rICpcXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXFxuKyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcXG4re1xcbitcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UpKSB7XFxuK1xcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNmtzLVxcdTAwM2Vyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTtcXG4rXFx0XFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNmtzLVxcdTAwM2Vyd29yayk7XFxuK1xcdH1cXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxcbit7XFxuK1xcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rfVxcbitDRklfTk9TRUFMKGJwZl9rc29ja19yZWxlYXNlX2R0b3IpO1xcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19zZW5kKCkgLSBTZW5kIGRhdGEgdGhyb3VnaCBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxcbisgKiBAZGF0YTpcXHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXFxuKyAqIEBkYXRhX19zejpcXHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuXFxuKyAqXFxuKyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXFxuKyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuKyAqXFxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICB1MzIgZGF0YV9fc3opXFxuK3tcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBrdmVjIGlvdiA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxcbitcXHRcXHQuaW92X2xlbiA9IGRhdGFfX3N6LFxcbitcXHR9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIEVhcmx5IGNoZWNrIGZvciBVRFAuIEV4YWN0IGxpbWl0cyBlbmZvcmNlZCBieSBrZXJuZWxfc2VuZG1zZygpLiAqL1xcbitcXHRpZiAoZGF0YV9fc3ogXFx1MDAzZSBJUF9NQVhfTVRVKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWYgKGN1cnJlbnQtXFx1MDAzZWluX2JwZl9rc29ja19zZW5kKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0Y3VycmVudC1cXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSB0cnVlO1xcbitcXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy1cXHUwMDNlc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNmlvdiwgMSwgZGF0YV9fc3opO1xcbitcXHRjdXJyZW50LVxcdTAwM2Vpbl9icGZfa3NvY2tfc2VuZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4rXFxuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0ge1xcbitcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4rXFx0LnNldCA9IFxcdTAwMjZrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMsXFxuK307XFxuK1xcbitCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfc2VuZCwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKVxcbitcXG4rc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbit7XFxuK1xcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fFxcbitcXHQgICAgcHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwgfHxcXG4rXFx0ICAgIHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIC1FQUNDRVM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsXFxuK1xcdC5maWx0ZXIgPSBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyLFxcbit9O1xcbitcXG4rQlRGX0lEX0xJU1QoYnBmX2tzb2NrX2R0b3JfaWRzKVxcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXFxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgYnBmX2tzb2NrX2tmdW5jX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7XFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcXG4rXFx0XFx0XFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2tzb2NrX2R0b3JzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuK31cXG4rXFxuK2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpO1xcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5jNzQyN2RkNGRkNTIzIDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC0yMTE1LDI3ICsyMTE1LDMxIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXFxuICAqXFx0aW5jbHVkZSB0aGUgLUVJTlBST0dSRVNTIHN0YXR1cyBmb3Igc3VjaCBzb2NrZXRzLlxcbiAgKi9cXG4gXFxuK2ludCBfX3N5c19jb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcXG4rXFx0XFx0XFx0IGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLFxcbitcXHRcXHRcXHRcXHQgICAgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0ICAgIGFkZHJsZW4sIGZsYWdzKTtcXG4rfVxcbitcXG4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tXFx0aW50IGVycjtcXG4gXFxuIFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4tXFx0aWYgKCFzb2NrKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9UU09DSztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9XFxuLVxcdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIXNvY2spXFxuK1xcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuIFxcbi1cXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWRkcmxlbiwgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbitcXHRcXHRcXHRcXHQgICAgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGI4OWU5YzAxODZmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcXG5AQCAtMCwwICsxLDIzMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF9wcm9ncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwibmV0d29ya19oZWxwZXJzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19iYXNpYy5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19yZWN1cnNpb24uc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBOU19URVNUIFxcXCJrc29ja19iYXNpY19uc1xcXCJcXG4rI2RlZmluZSBOU19MU01fUkVDVVJTSU9OX1RFU1QgXFxcImtzb2NrX2xzbV9yZWN1cnNpb25fbnNcXFwiXFxuKyNkZWZpbmUgTE9PUEJBQ0tfSVAgXFxcIjEyNy4wLjAuMVxcXCJcXG4rI2RlZmluZSBSRUNWX1BPUlQgNzc3N1xcbisjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNVxcbitcXG4rc3RydWN0IGtzb2NrX3Rlc3RfZW52IHtcXG4rXFx0Y29uc3QgY2hhciAqbmV0bnM7XFxuK1xcdGJvb2wgbmV0bnNfY3JlYXRlZDtcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW47XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xcbitcXHRpbnQgcmZkO1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK307XFxuK1xcbitzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudiwgY29uc3QgY2hhciAqbmV0bnMpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRtZW1zZXQoZW52LCAwLCBzaXplb2YoKmVudikpO1xcbitcXHRlbnYtXFx1MDAzZW5ldG5zID0gbmV0bnM7XFxuK1xcdGVudi1cXHUwMDNlcmZkID0gLTE7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIG5ldG5zKTtcXG4rXFx0ZW52LVxcdTAwM2VuZXRuc19jcmVhdGVkID0gdHJ1ZTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtbmV0ICVzIGxpbmsgc2V0IGxvIHVwXFxcIiwgbmV0bnMpO1xcbitcXG4rXFx0ZW52LVxcdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhuZXRucyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihlbnYtXFx1MDAzZW5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVudi1cXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVxcdTAwM2VyZmQsIFxcXCJyZWNlaXZlciBzb2NrZXRcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZW52LVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRlbnYtXFx1MDAzZWFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKExPT1BCQUNLX0lQKTtcXG4rXFx0ZW52LVxcdTAwM2VhZGRyLnNpbl9wb3J0ID0gaHRvbnMoUkVDVl9QT1JUKTtcXG4rXFxuK1xcdGVyciA9IGJpbmQoZW52LVxcdTAwM2VyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2ZW52LVxcdTAwM2VhZGRyLCBzaXplb2YoZW52LVxcdTAwM2VhZGRyKSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJpbmQgcmVjZWl2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dHYudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQztcXG4rXFx0dHYudHZfdXNlYyA9IDA7XFxuK1xcdGVyciA9IHNldHNvY2tvcHQoZW52LVxcdTAwM2VyZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dHYsIHNpemVvZih0dikpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXQgcmN2dGltZW9cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAoZW52LVxcdTAwM2VyZmQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRjbG9zZShlbnYtXFx1MDAzZXJmZCk7XFxuK1xcdFxcdGVudi1cXHUwMDNlcmZkID0gLTE7XFxuK1xcdH1cXG4rXFx0aWYgKGVudi1cXHUwMDNlbnN0b2tlbikge1xcbitcXHRcXHRjbG9zZV9uZXRucyhlbnYtXFx1MDAzZW5zdG9rZW4pO1xcbitcXHRcXHRlbnYtXFx1MDAzZW5zdG9rZW4gPSBOVUxMO1xcbitcXHR9XFxuK1xcdGlmIChlbnYtXFx1MDAzZW5ldG5zX2NyZWF0ZWQpIHtcXG4rXFx0XFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MVxcXCIsIG5ldG5zKTtcXG4rXFx0XFx0ZW52LVxcdTAwM2VuZXRuc19jcmVhdGVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrc29ja190ZXN0X2Vudl9jbGVhbnVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KVxcbit7XFxuK1xcdGlmIChlbnYtXFx1MDAzZXJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShlbnYtXFx1MDAzZXJmZCk7XFxuK1xcdGlmIChlbnYtXFx1MDAzZW5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKGVudi1cXHUwMDNlbnN0b2tlbik7XFxuK1xcdGlmIChlbnYtXFx1MDAzZW5ldG5zX2NyZWF0ZWQpIHtcXG4rXFx0XFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MVxcXCIsIGVudi1cXHUwMDNlbmV0bnMpO1xcbitcXHRcXHRlbnYtXFx1MDAzZW5ldG5zX2NyZWF0ZWQgPSBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrc29ja19hc3NlcnRfcmVjdihzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudiwgY29uc3QgY2hhciAqZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgc2l6ZV90IGRhdGFfc3opXFxuK3tcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0bWVtc2V0KGVudi1cXHUwMDNlYnVmLCAwLCBzaXplb2YoZW52LVxcdTAwM2VidWYpKTtcXG4rXFx0biA9IHJlY3Zmcm9tKGVudi1cXHUwMDNlcmZkLCBlbnYtXFx1MDAzZWJ1Ziwgc2l6ZW9mKGVudi1cXHUwMDNlYnVmKSwgMCwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKG4sIGRhdGFfc3osIFxcXCJyZWN2ZnJvbSBsZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRBU1NFUlRfTUVNRVEoZW52LVxcdTAwM2VidWYsIGRhdGEsIGRhdGFfc3osIFxcXCJwYXlsb2FkIG1hdGNoXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGtzb2NrX3NldHVwX2N0eChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fYmUzMiAqaXB2NF9yZW1vdGUsXFxuK1xcdFxcdFxcdCAgICBfX3UxNiAqcmVtb3RlX3BvcnQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRpbnQgZXJyLCBwZmQ7XFxuK1xcbitcXHQqaXB2NF9yZW1vdGUgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xcbitcXHQqcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XFxuK1xcbitcXHRwZmQgPSBicGZfcHJvZ3JhbV9fZmQocHJvZyk7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImtzb2NrX3NldHVwIHJ1blxcXCIpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwia3NvY2tfc2V0dXAgcmV0dmFsXFxcIikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbit2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XFxuK1xcdHN0cnVjdCBrc29ja19iYXNpYyAqc2tlbDtcXG4rXFx0aW50IGVyciwgcGZkO1xcbitcXG4rXFx0c2tlbCA9IGtzb2NrX2Jhc2ljX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGtzb2NrX2Jhc2ljX19sb2FkKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJza2VsIGxvYWRcXFwiKSkge1xcbitcXHRcXHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFxcdTAwMjZlbnYsIE5TX1RFU1QpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSBrc29jayAqL1xcbitcXHRpZiAoIWtzb2NrX3NldHVwX2N0eChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja19zZXR1cCwgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaXB2NF9yZW1vdGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDI6IFJ1biB0aGUgc2VuZCBTWVNDQUxMIHByb2cgKi9cXG4rXFx0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NlbmQpO1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHBmZCwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJrc29ja19zZW5kIHJ1blxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdGlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJzZW5kbXNnIGJ5dGVzXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovXFxuK1xcdGtzb2NrX2Fzc2VydF9yZWN2KFxcdTAwMjZlbnYsIHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSxcXG4rXFx0XFx0XFx0ICBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSk7XFxuK1xcbitmYWlsOlxcbitcXHRrc29ja190ZXN0X2Vudl9jbGVhbnVwKFxcdTAwMjZlbnYpO1xcbitcXHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xcbitcXHRzdHJ1Y3Qga3NvY2tfcmVjdXJzaW9uICpza2VsO1xcbitcXHRjaGFyIHRyaWdnZXIgPSAneCc7XFxuK1xcdGludCB0ZmQgPSAtMTtcXG4rXFx0aW50IGVycjtcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0c2tlbCA9IGtzb2NrX3JlY3Vyc2lvbl9fb3BlbigpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWwgb3BlblxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBrc29ja19yZWN1cnNpb25fX2xvYWQoc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWwgbG9hZFxcXCIpKSB7XFxuK1xcdFxcdGtzb2NrX3JlY3Vyc2lvbl9fZGVzdHJveShza2VsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFxcdTAwMjZlbnYsIE5TX0xTTV9SRUNVUlNJT05fVEVTVCkpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xcbitcXHRpZiAoIWtzb2NrX3NldHVwX2N0eChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja19zZXR1cCwgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaXB2NF9yZW1vdGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfc2VuZG1zZyBmcm9tIHVzZXJzcGFjZSAqL1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfc2VuZG1zZyA9XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NvY2tldF9zZW5kbXNnKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiYXR0YWNoIHNvY2tldF9zZW5kbXNnIGxzbVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHR0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFxcXCJ0cmlnZ2VyIHNvY2tldFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0cmlnZ2VyX3NlbmQgPSAxO1xcbitcXHRuID0gc2VuZHRvKHRmZCwgXFx1MDAyNnRyaWdnZXIsIHNpemVvZih0cmlnZ2VyKSwgMCxcXG4rXFx0XFx0ICAgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZlbnYuYWRkciwgc2l6ZW9mKGVudi5hZGRyKSk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHJpZ2dlcl9zZW5kID0gMDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEobiwgc2l6ZW9mKHRyaWdnZXIpLCBcXFwidHJpZ2dlciBzZW5kdG9cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqL1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlY19jb3VudCwgMixcXG4rXFx0XFx0ICAgICAgIFxcXCJzb2NrZXRfc2VuZG1zZyByZWN1cnNpb24gY291bnRcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLFxcbitcXHRcXHQgICAgICAgXFxcInJlY3Vyc2l2ZSBzZW5kIHN0YXR1c1xcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXJlY19rZnVuY19yZXRzWzFdLFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSksIFxcXCJvdXRlciBzZW5kIGJ5dGVzXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGtzb2NrX2Fzc2VydF9yZWN2KFxcdTAwMjZlbnYsIHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSxcXG4rXFx0XFx0XFx0ICBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSk7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAodGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHRmZCk7XFxuK1xcdGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoXFx1MDAyNmVudik7XFxuK1xcdGtzb2NrX3JlY3Vyc2lvbl9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXFxuQEAgLTAsMCArMSwzNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF9wcm9ncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfd3Euc2tlbC5oXFxcIlxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXFxuK1xcdFxcdGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwicnVuIGtzb2NrX3dxX3N0YXJ0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHdoaWxlICghX19hdG9taWNfbG9hZF9uKFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxcbitcXHRcXHR1c2xlZXAoMTAwMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0ICBcXFwid29ya3F1ZXVlIGNyZWF0ZSByZWplY3RlZFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRrc29ja193cV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xODliMGZjMTU3NzAxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jXFxuQEAgLTAsMCArMSwzNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gZG9fa3NvY2tfc2V0dXAoKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3NlbmQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBzZW5kID0gLTE7XFxuK1xcbitcXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xcbitcXHRpZiAoIXYpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0a3MgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIE5VTEwpO1xcbitcXHRpZiAoIWtzKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdHNlbmQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XFxuK1xcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rXFx0cmV0dXJuIHNlbmQ7XFxuK31cXG4rXFxuK2NoYXIgX19saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jMzIwMzIyMGEyZDBiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxcbkBAIC0wLDAgKzEsOTkgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcXG4rXFxuKyNpbmNsdWRlIFxcXCJlcnJuby5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgU09DS19TVFJFQU1cXHQxXFxuKyNkZWZpbmUgU09DS19ER1JBTVxcdDJcXG4rI2RlZmluZSBJUFBST1RPX1RDUFxcdDZcXG4rI2RlZmluZSBJUFBST1RPX1VEUFxcdDE3XFxuK1xcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbitcXHRcXHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcXG4rdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xcbitcXG4rc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbit7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXFx1MDAyNmtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIGN0eCk7XFxuK1xcdGlmIChvbGQpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBHbG9iYWxzIGZvciBwYXNzaW5nIGNvbmZpZyBmcm9tIHVzZXJzcGFjZSAqL1xcbitfX2JlMzIgaXB2NF9yZW1vdGU7XFxuK19fdTE2IHJlbW90ZV9wb3J0O1xcbitcXG4rY2hhciBzZW5kX2RhdGFbMzJdID0gXFxcImhlbGxvIGZyb20gYnBmIGtzb2NrXFxcIjtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGRvX2tzb2NrX3NldHVwKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xcbitcXHR1bmlvbiBicGZfa3NvY2tfYWRkciBhZGRyID0ge307XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNO1xcbitcXHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xcbitcXG4rXFx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFxcdTAwMjZjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgXFx1MDAyNmVycik7XFxuK1xcdGlmICgha3MpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRhZGRyLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0YWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpO1xcbitcXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcXG4rXFxuK1xcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGtzb2NrX2N0eF9pbnNlcnQoa3MpO1xcbitcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUVYSVNUKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyZjUyMDA5NDNlMzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jXFxuQEAgLTAsMCArMSw2OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuK3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XFxuK1xcbitpbnQgdGFyZ2V0X3BpZDtcXG4raW50IHRyaWdnZXJfc2VuZDtcXG4rXFxuK3Vuc2lnbmVkIGludCByZWNfY291bnQ7XFxuK2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtLnMvc29ja2V0X3NlbmRtc2dcXFwiKVxcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4rXFx0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xcbitcXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGludCBrZnVuY19yZXQ7XFxuK1xcbitcXHRpZiAocmV0IHx8ICF0cmlnZ2VyX3NlbmQgfHwgcGlkICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xcbitcXHRpZiAoIXYpIHtcXG4rXFx0XFx0a2Z1bmNfcmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtzID0gTlVMTDtcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0dG1wID0gdi1cXHUwMDNlY3R4O1xcbitcXHRpZiAodG1wKVxcbitcXHRcXHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICgha3MpIHtcXG4rXFx0XFx0a2Z1bmNfcmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG4rXFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXG4rb3V0OlxcbitcXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXFx1MDAyNiAxXSA9IGtmdW5jX3JldDtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnJlY19jb3VudCwgMSk7XFxuK1xcbitcXHRpZiAoa2Z1bmNfcmV0ICE9IC1FQlVTWSlcXG4rXFx0XFx0dHJpZ2dlcl9zZW5kID0gMDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2NoYXIgX19saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xcbkBAIC0wLDAgKzEsNjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2luY2x1ZGUgXFxcInZtbGludXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX3RyYWNpbmdfbmV0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlcnJuby5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbitzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xcbitcXHRzdHJ1Y3QgYnBmX3dxIHdvcms7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgdTMyKTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpO1xcbit9IHdvcmtfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2ludCBjcmVhdGVfZXJyO1xcbit1MzIgY2FsbGJhY2tfZG9uZTtcXG4rXFxuK3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xcbitcXHRcXHQuZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxcbitcXHRcXHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFxcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFxcdTAwMjZlcnIpO1xcbitcXHRpZiAoa3MpXFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rXFx0Y3JlYXRlX2VyciA9IGVycjtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xcbitcXHR1MzIga2V5ID0gMDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2d29ya19tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0ZXJyID0gYnBmX3dxX2luaXQoXFx1MDAyNnZhbHVlLVxcdTAwM2V3b3JrLCBcXHUwMDI2d29ya19tYXAsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFxcdTAwMjZ2YWx1ZS1cXHUwMDNld29yaywga3NvY2tfd3FfY2FsbGJhY2ssIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFxcdTAwMjZ2YWx1ZS1cXHUwMDNld29yaywgMCk7XFxuK31cXG4rXFxuK2NoYXIgX19saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDI6MjYuMDkwOTU5MzQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQyNDc5NjcyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX2FjcXVpcmVcIixcbiAgICBcImJwZl9rc29ja19yZWxlYXNlXCIsXG4gICAgXCJicGZfa3NvY2tfc2VuZFwiLFxuICAgIFwiX19zeXNfY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBmZWF0dXJlIGBicGZfa3NvY2tgIHRoYXQgYWxsb3dzIEJQRiBwcm9ncmFtcyB0byBjcmVhdGUsIGNvbm5lY3QsIGFuZCBzZW5kIGRhdGEgdGhyb3VnaCBrZXJuZWwgc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBBUEkgZW50cnlwb2ludHMgZm9yIEJQRiBwcm9ncmFtcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuY3MgYW5kIHRoZSBuZXdseSBleHRyYWN0ZWQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ3ZjgyZmEyZTA2MDU1N2QwMzE2OWM1ZjY3NzY4YjRkODQwMzAzNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5AQCAtMCwwICsxLDM2IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaWZuZGVmIF9CUEZfS1NPQ0tfSFxuKyNkZWZpbmUgX0JQRl9LU09DS19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzXG4rICogQGZhbWlseTpcdEFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuKyAqIEB0eXBlOlx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cbisgKiBAcHJvdG9jb2w6XHRQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbFxuKyAqXHRcdG9mIHRoZSBnaXZlbiB0eXBlLlxuKyAqIEByZXNlcnZlZDpcdE11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4rICovXG4rc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG4rXHRfX3U4IGZhbWlseTtcbitcdF9fdTggdHlwZTtcbitcdF9fdTggcHJvdG9jb2w7XG4rXHRfX3U4IHJlc2VydmVkO1xuK307XG4rXG4rLyoqXG4rICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcbisgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxuKyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLlxuKyAqL1xuK3VuaW9uIGJwZl9rc29ja19hZGRyIHtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7XG4rfTtcbitcbisjZW5kaWYgLyogX0JQRl9LU09DS19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwLi4zMzQ4NDZkZjkyMzgxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMDUwLDYgKzEwNTAsMTAgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcdC8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBldmVudGZkX3NpZ25hbCgpICovXG4gXHR1bnNpZ25lZFx0XHRcdGluX2V2ZW50ZmQ6MTtcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JTkVUKVxuK1x0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGJwZl9rc29ja19zZW5kKCkgKi9cbitcdHVuc2lnbmVkXHRcdFx0aW5fYnBmX2tzb2NrX3NlbmQ6MTtcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NQVV9QQVNJRFxuIFx0dW5zaWduZWRcdFx0XHRwYXNpZF9hY3RpdmF0ZWQ6MTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uNDhmMWViODE5M2RlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiArNDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kX3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiBcdFx0XHQgICAgIGludCBhZGRybGVuKTtcbitleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuK1x0XHRcdFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uMTE1NGI1YjBiNmEwNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3MCw2ICs0NDcwLDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG4gI2lmZGVmIENPTkZJR19DUllQVE9cbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0lORVRcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4rI2VuZGlmXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcbiBcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xuK2lmbmVxICgkKENPTkZJR19JTkVUKSwpXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuK2VuZGlmXG4gb2JqLSQoQ09ORklHX09GKVx0Kz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmMxOTk4ODg3MTk2MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbkBAIC0wLDAgKzEsMzI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrIC0gcmVmY291bnRlZCBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0XG4rICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuKyAqIEB1c2FnZTpcdFJlZmVyZW5jZSBjb3VudGVyLlxuKyAqIEByd29yazpcdFJDVSB3b3JrIGZvciBkZWZlcnJlZCBjbGVhbnVwIChzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS5cbisgKi9cbitzdHJ1Y3QgYnBmX2tzb2NrIHtcbitcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4rXHRyZWZjb3VudF90IHVzYWdlO1xuK1x0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xuK307XG4rXG4rc3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XG4rXHRcdGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xuK1xuK1x0c29ja19yZWxlYXNlKGtzLVx1MDAzZXNvY2spO1xuK1x0a2ZyZWUoa3MpO1xuK31cbitcbitzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXG4re1xuK1x0LypcbitcdCAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKClcbitcdCAqIGNsZWFyZWQgY3VycmVudC1cdTAwM2Vuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuXG4rXHQgKi9cbitcdHJldHVybiAhKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpIFx1MDAyNlx1MDAyNiBjdXJyZW50LVx1MDAzZW5zcHJveHk7XG4rfVxuK1xuK19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbitcbisvKipcbisgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cbisgKlxuKyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXG4rICpcbisgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbisgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFja1xuKyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzaydzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxuKyAqXG4rICogQG9wdHM6XHRQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy5cbisgKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbisgKiBAZXJyX191bmluaXQ6XHRJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxuKyAqL1xuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxuK2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxuK1x0XHQgaW50ICplcnJfX3VuaW5pdClcbit7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0aW50IGVycjtcbitcbitcdC8qXG4rXHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxuK1x0ICogZnJvbSBjdXJyZW50LiBLZXJuZWwgdGhyZWFkcywgaW5jbHVkaW5nIEJQRiB3b3JrcXVldWUgY2FsbGJhY2tzLCBkb1xuK1x0ICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uXG4rXHQgKi9cbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKSB7XG4rXHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcbitcdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4rXHRcdC50eXBlID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNldHlwZSksXG4rXHRcdC5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXByb3RvY29sKSxcbitcdFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWQpLFxuK1x0fTtcbitcbitcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xuK1x0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkge1xuK1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xuK1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRrcyA9IGt6YWxsb2Nfb2JqKCprcyk7XG4rXHRpZiAoIWtzKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXG4rXHQgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMilcbitcdCAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJ3MgY2FsbGVyLlxuK1x0ICovXG4rXHRlcnIgPSBzb2NrX2NyZWF0ZShvcHRzX2NvcHkuZmFtaWx5LCBvcHRzX2NvcHkudHlwZSwgb3B0c19jb3B5LnByb3RvY29sLFxuK1x0XHRcdCAgXHUwMDI2a3MtXHUwMDNlc29jayk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1xuK1x0a3MtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7XG4rXHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLO1xuK1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmtzLVx1MDAzZXVzYWdlLCAxKTtcbitcdHB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpO1xuK1x0cmV0dXJuIGtzO1xuK1xuK2Vycl9mcmVlOlxuK1x0a2ZyZWUoa3MpO1xuK2Vycl9vdXQ6XG4rXHRwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy5cbisgKiBAa3M6XHRcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LlxuKyAqIEBhZGRyOlx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXG4rICogQGFkZHJfX3N6Olx0U2l6ZSBvZiB0aGUgYWRkcmVzcyB1bmlvbi5cbisgKlxuKyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIHdoaWxlIGNvbm5lY3RpbmcgdGhlIHNvY2tldCwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcbitcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4rXHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTtcbitcdGludCBhZGRybGVuO1xuK1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi9cbitcdG1lbWNweShcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XG4rXG4rXHRzd2l0Y2ggKHNhLnNzX2ZhbWlseSkge1xuK1x0Y2FzZSBBRl9JTkVUOlxuK1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7XG4rXHRcdGJyZWFrO1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0Y2FzZSBBRl9JTkVUNjpcbitcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbitcdH1cbitcbitcdHJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChrcy1cdTAwM2Vzb2NrLCBcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gYWNxdWlyZS4gTXVzdCBiZSBhXG4rICpcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXG4rICpcbisgKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbit7XG4rXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZrcy1cdTAwM2V1c2FnZSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIGtzO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIHJlbGVhc2UuXG4rICpcbisgKiBXaGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgaXMgcmVsZWFzZWQsIHRoZSBzb2NrZXQgaXMgY2xlYW5lZCB1cCB2aWFcbisgKiBxdWV1ZV9yY3Vfd29yaygpIChzaW5jZSBzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS5cbisgKi9cbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuK3tcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a3MtXHUwMDNldXNhZ2UpKSB7XG4rXHRcdElOSVRfUkNVX1dPUksoXHUwMDI2a3MtXHUwMDNlcndvcmssIGtzb2NrX3JlbGVhc2Vfd29ya19mbik7XG4rXHRcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNmtzLVx1MDAzZXJ3b3JrKTtcbitcdH1cbit9XG4rXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxuK3tcbitcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbit9XG4rQ0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcbitcbisvKipcbisgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LiBNdXN0IGJlIGFuIGFjcXVpcmVkIHJlZmVyZW5jZS5cbisgKiBAZGF0YTpcdFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC5cbisgKiBAZGF0YV9fc3o6XHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuXG4rICpcbisgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxuKyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXG4rICpcbisgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSxcbitcdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuK3tcbitcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuK1x0XHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxuK1x0fTtcbitcdHN0cnVjdCBrdmVjIGlvdiA9IHtcbitcdFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxuK1x0XHQuaW92X2xlbiA9IGRhdGFfX3N6LFxuK1x0fTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogRWFybHkgY2hlY2sgZm9yIFVEUC4gRXhhY3QgbGltaXRzIGVuZm9yY2VkIGJ5IGtlcm5lbF9zZW5kbXNnKCkuICovXG4rXHRpZiAoZGF0YV9fc3ogXHUwMDNlIElQX01BWF9NVFUpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9icGZfa3NvY2tfc2VuZClcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSB0cnVlO1xuK1x0cmV0ID0ga2VybmVsX3NlbmRtc2coa3MtXHUwMDNlc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpb3YsIDEsIGRhdGFfX3N6KTtcbitcdGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSBmYWxzZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4rXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcbitCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQuc2V0ID0gXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLFxuK307XG4rXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSlcbitCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbit7XG4rXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fFxuK1x0ICAgIHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwgfHxcbitcdCAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5jNzQyN2RkNGRkNTIzIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTE1LDI3ICsyMTE1LDMxIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4gICpcdGluY2x1ZGUgdGhlIC1FSU5QUk9HUkVTUyBzdGF0dXMgZm9yIHN1Y2ggc29ja2V0cy5cbiAgKi9cbiBcbitpbnQgX19zeXNfY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4rXHRcdFx0IGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssXG4rXHRcdFx0XHQgICAgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbitcdFx0XHRcdCAgICBhZGRybGVuLCBmbGFncyk7XG4rfVxuK1xuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHQgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tXHRpbnQgZXJyO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpO1xuLVx0aWYgKCFzb2NrKSB7XG4tXHRcdGVyciA9IC1FTk9UU09DSztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRlcnIgPVxuLVx0ICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFzb2NrKVxuK1x0XHRyZXR1cm4gLUVOT1RTT0NLO1xuIFxuLVx0ZXJyID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4tXHRcdFx0XHRcdCAgICBhZGRybGVuLCBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuLW91dDpcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gX19zeXNfY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbitcdFx0XHRcdCAgICBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuIH1cbiBcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGI4OWU5YzAxODZmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5AQCAtMCwwICsxLDIzMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuKyNpbmNsdWRlIFwibmV0d29ya19oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfYmFzaWMuc2tlbC5oXCJcbisjaW5jbHVkZSBcImtzb2NrX3JlY3Vyc2lvbi5za2VsLmhcIlxuK1xuKyNkZWZpbmUgTlNfVEVTVCBcImtzb2NrX2Jhc2ljX25zXCJcbisjZGVmaW5lIE5TX0xTTV9SRUNVUlNJT05fVEVTVCBcImtzb2NrX2xzbV9yZWN1cnNpb25fbnNcIlxuKyNkZWZpbmUgTE9PUEJBQ0tfSVAgXCIxMjcuMC4wLjFcIlxuKyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcbisjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNVxuK1xuK3N0cnVjdCBrc29ja190ZXN0X2VudiB7XG4rXHRjb25zdCBjaGFyICpuZXRucztcbitcdGJvb2wgbmV0bnNfY3JlYXRlZDtcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4rXHRpbnQgcmZkO1xuK1x0Y2hhciBidWZbMzJdO1xuK307XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYsIGNvbnN0IGNoYXIgKm5ldG5zKVxuK3tcbitcdHN0cnVjdCB0aW1ldmFsIHR2O1xuK1x0aW50IGVycjtcbitcbitcdG1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7XG4rXHRlbnYtXHUwMDNlbmV0bnMgPSBuZXRucztcbitcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBuZXRucyk7XG4rXHRlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XG4rXHRTWVMoZmFpbCwgXCJpcCAtbmV0ICVzIGxpbmsgc2V0IGxvIHVwXCIsIG5ldG5zKTtcbitcbitcdGVudi1cdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhuZXRucyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZW52LVx1MDAzZW5zdG9rZW4sIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZXJmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXHUwMDNlcmZkLCBcInJlY2VpdmVyIHNvY2tldFwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRlbnYtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xuK1x0ZW52LVx1MDAzZWFkZHIuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpO1xuK1xuK1x0ZXJyID0gYmluZChlbnYtXHUwMDNlcmZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2ZW52LVx1MDAzZWFkZHIsIHNpemVvZihlbnYtXHUwMDNlYWRkcikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJpbmQgcmVjZWl2ZXJcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHR2LnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUM7XG4rXHR0di50dl91c2VjID0gMDtcbitcdGVyciA9IHNldHNvY2tvcHQoZW52LVx1MDAzZXJmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LCBzaXplb2YodHYpKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXQgcmN2dGltZW9cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHJldHVybiB0cnVlO1xuK1xuK2ZhaWw6XG4rXHRpZiAoZW52LVx1MDAzZXJmZCBcdTAwM2U9IDApIHtcbitcdFx0Y2xvc2UoZW52LVx1MDAzZXJmZCk7XG4rXHRcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcdH1cbitcdGlmIChlbnYtXHUwMDNlbnN0b2tlbikge1xuK1x0XHRjbG9zZV9uZXRucyhlbnYtXHUwMDNlbnN0b2tlbik7XG4rXHRcdGVudi1cdTAwM2Vuc3Rva2VuID0gTlVMTDtcbitcdH1cbitcdGlmIChlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCkge1xuK1x0XHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsICVzIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwiLCBuZXRucyk7XG4rXHRcdGVudi1cdTAwM2VuZXRuc19jcmVhdGVkID0gZmFsc2U7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4re1xuK1x0aWYgKGVudi1cdTAwM2VyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShlbnYtXHUwMDNlcmZkKTtcbitcdGlmIChlbnYtXHUwMDNlbnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMoZW52LVx1MDAzZW5zdG9rZW4pO1xuK1x0aWYgKGVudi1cdTAwM2VuZXRuc19jcmVhdGVkKSB7XG4rXHRcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXMgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXCIsIGVudi1cdTAwM2VuZXRucyk7XG4rXHRcdGVudi1cdTAwM2VuZXRuc19jcmVhdGVkID0gZmFsc2U7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzb2NrX2Fzc2VydF9yZWN2KHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52LCBjb25zdCBjaGFyICpkYXRhLFxuK1x0XHRcdCAgICAgIHNpemVfdCBkYXRhX3N6KVxuK3tcbitcdHNzaXplX3QgbjtcbitcbitcdG1lbXNldChlbnYtXHUwMDNlYnVmLCAwLCBzaXplb2YoZW52LVx1MDAzZWJ1ZikpO1xuK1x0biA9IHJlY3Zmcm9tKGVudi1cdTAwM2VyZmQsIGVudi1cdTAwM2VidWYsIHNpemVvZihlbnYtXHUwMDNlYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCBkYXRhX3N6LCBcInJlY3Zmcm9tIGxlblwiKSlcbitcdFx0cmV0dXJuO1xuK1x0QVNTRVJUX01FTUVRKGVudi1cdTAwM2VidWYsIGRhdGEsIGRhdGFfc3osIFwicGF5bG9hZCBtYXRjaFwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfc2V0dXBfY3R4KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX19iZTMyICppcHY0X3JlbW90ZSxcbitcdFx0XHQgICAgX191MTYgKnJlbW90ZV9wb3J0KVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdGludCBlcnIsIHBmZDtcbitcbitcdCppcHY0X3JlbW90ZSA9IGluZXRfYWRkcihMT09QQkFDS19JUCk7XG4rXHQqcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXG4rXHRwZmQgPSBicGZfcHJvZ3JhbV9fZmQocHJvZyk7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHBmZCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbit2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuK1x0c3RydWN0IGtzb2NrX2Jhc2ljICpza2VsO1xuK1x0aW50IGVyciwgcGZkO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2Jhc2ljX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5cIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGtzb2NrX2Jhc2ljX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWwgbG9hZFwiKSkge1xuK1x0XHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcdTAwMjZlbnYsIE5TX1RFU1QpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSBrc29jayAqL1xuK1x0aWYgKCFrc29ja19zZXR1cF9jdHgoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zZXR1cCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUsXG4rXHRcdFx0ICAgICBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VyZW1vdGVfcG9ydCkpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogUnVuIHRoZSBzZW5kIFNZU0NBTEwgcHJvZyAqL1xuK1x0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2VuZCk7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHBmZCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2VuZCBydW5cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdGlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksXG4rXHRcdCAgICAgICBcInNlbmRtc2cgYnl0ZXNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovXG4rXHRrc29ja19hc3NlcnRfcmVjdihcdTAwMjZlbnYsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsXG4rXHRcdFx0ICBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSkpO1xuK1xuK2ZhaWw6XG4rXHRrc29ja190ZXN0X2Vudl9jbGVhbnVwKFx1MDAyNmVudik7XG4rXHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcbit7XG4rXHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuK1x0c3RydWN0IGtzb2NrX3JlY3Vyc2lvbiAqc2tlbDtcbitcdGNoYXIgdHJpZ2dlciA9ICd4JztcbitcdGludCB0ZmQgPSAtMTtcbitcdGludCBlcnI7XG4rXHRzc2l6ZV90IG47XG4rXG4rXHRza2VsID0ga3NvY2tfcmVjdXJzaW9uX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5cIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGtzb2NrX3JlY3Vyc2lvbl9fbG9hZChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsIGxvYWRcIikpIHtcbitcdFx0a3NvY2tfcmVjdXJzaW9uX19kZXN0cm95KHNrZWwpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudiwgTlNfTFNNX1JFQ1VSU0lPTl9URVNUKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovXG4rXHRpZiAoIWtzb2NrX3NldHVwX2N0eChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwLCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VpcHY0X3JlbW90ZSxcbitcdFx0XHQgICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0KSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LyogU3RlcCAyOiBBdHRhY2ggTFNNIHByb2cgYW5kIHRyaWdnZXIgc29ja2V0X3NlbmRtc2cgZnJvbSB1c2Vyc3BhY2UgKi9cbitcdHNrZWwtXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X3NlbmRtc2cgPVxuK1x0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NvY2tldF9zZW5kbXNnKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnLFxuK1x0XHRcdCAgIFwiYXR0YWNoIHNvY2tldF9zZW5kbXNnIGxzbVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0dGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHRmZCwgXCJ0cmlnZ2VyIHNvY2tldFwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHJpZ2dlcl9zZW5kID0gMTtcbitcdG4gPSBzZW5kdG8odGZkLCBcdTAwMjZ0cmlnZ2VyLCBzaXplb2YodHJpZ2dlciksIDAsXG4rXHRcdCAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZlbnYuYWRkciwgc2l6ZW9mKGVudi5hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRyaWdnZXJfc2VuZCA9IDA7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCBzaXplb2YodHJpZ2dlciksIFwidHJpZ2dlciBzZW5kdG9cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVGhlIG5lc3RlZCBicGZfa3NvY2tfc2VuZCgpIG11c3QgaGl0IHRoZSByZWN1cnNpb24gZ3VhcmQgKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlY19jb3VudCwgMixcbitcdFx0ICAgICAgIFwic29ja2V0X3NlbmRtc2cgcmVjdXJzaW9uIGNvdW50XCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSxcbitcdFx0ICAgICAgIFwicmVjdXJzaXZlIHNlbmQgc3RhdHVzXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sXG4rXHRcdCAgICAgICBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksIFwib3V0ZXIgc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0a3NvY2tfYXNzZXJ0X3JlY3YoXHUwMDI2ZW52LCBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhLFxuK1x0XHRcdCAgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpKTtcbitcbitmYWlsOlxuK1x0aWYgKHRmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHRmZCk7XG4rXHRrc29ja190ZXN0X2Vudl9jbGVhbnVwKFx1MDAyNmVudik7XG4rXHRrc29ja19yZWN1cnNpb25fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xuQEAgLTAsMCArMSwzNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfd3Euc2tlbC5oXCJcbitcbit2b2lkIHRlc3Rfa3NvY2tfd3Eodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKFxuK1x0XHRicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInJ1biBrc29ja193cV9zdGFydFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja193cV9zdGFydCByZXR2YWxcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0d2hpbGUgKCFfX2F0b21pY19sb2FkX24oXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpXG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcbitcdFx0ICBcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xODliMGZjMTU3NzAxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuY1xuQEAgLTAsMCArMSwzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBkb19rc29ja19zZXR1cCgpO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGtzb2NrX3NlbmQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0aW50IHNlbmQgPSAtMTtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0a3MgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBOVUxMKTtcbitcdGlmICgha3MpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbitcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcdHJldHVybiBzZW5kO1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmMzMjAzMjIwYTJkMGJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCArMSw5OSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbitcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbitcbisjZGVmaW5lIFNPQ0tfU1RSRUFNXHQxXG4rI2RlZmluZSBTT0NLX0RHUkFNXHQyXG4rI2RlZmluZSBJUFBST1RPX1RDUFx0NlxuKyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4rXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxuK1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4raW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4raW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbitcbitzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xuK1x0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxuK3tcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2X19rc29ja19jdHhfbWFwLCBcdTAwMjZrZXkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgY3R4KTtcbitcdGlmIChvbGQpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2xvYmFscyBmb3IgcGFzc2luZyBjb25maWcgZnJvbSB1c2Vyc3BhY2UgKi9cbitfX2JlMzIgaXB2NF9yZW1vdGU7XG4rX191MTYgcmVtb3RlX3BvcnQ7XG4rXG4rY2hhciBzZW5kX2RhdGFbMzJdID0gXCJoZWxsbyBmcm9tIGJwZiBrc29ja1wiO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGRvX2tzb2NrX3NldHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuK1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XG4rXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbitcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXG4rXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XG4rXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbitcbitcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuK1x0aWYgKGVycikge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZiAvKiBfS1NPQ0tfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MmY1MjAwOTQzZTM2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmNcbkBAIC0wLDAgKzEsNjkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuK2ludCB0YXJnZXRfcGlkO1xuK2ludCB0cmlnZ2VyX3NlbmQ7XG4rXG4rdW5zaWduZWQgaW50IHJlY19jb3VudDtcbitpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7XG4rfVxuK1xuK1NFQyhcImxzbS5zL3NvY2tldF9zZW5kbXNnXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4rXHQgICAgIGludCBzaXplLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGludCBrZnVuY19yZXQ7XG4rXG4rXHRpZiAocmV0IHx8ICF0cmlnZ2VyX3NlbmQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGtmdW5jX3JldCA9IC1FTk9FTlQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0a3MgPSBOVUxMO1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdHRtcCA9IHYtXHUwMDNlY3R4O1xuK1x0aWYgKHRtcClcbitcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKCFrcykge1xuK1x0XHRrZnVuY19yZXQgPSAtRU5PRU5UO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbitcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcbitvdXQ6XG4rXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0ga2Z1bmNfcmV0O1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2cmVjX2NvdW50LCAxKTtcbitcbitcdGlmIChrZnVuY19yZXQgIT0gLUVCVVNZKVxuK1x0XHR0cmlnZ2VyX3NlbmQgPSAwO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9leHBlcmltZW50YWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJlcnJuby5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xuK1x0c3RydWN0IGJwZl93cSB3b3JrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIHUzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XG4rfSB3b3JrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitpbnQgY3JlYXRlX2Vycjtcbit1MzIgY2FsbGJhY2tfZG9uZTtcbitcbitzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbitcdFx0LmZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC50eXBlID0gU09DS19ER1JBTSxcbitcdFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoa3MpXG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcdGNyZWF0ZV9lcnIgPSBlcnI7XG4rXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xuK1x0dTMyIGtleSA9IDA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndvcmtfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWx1ZSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRlcnIgPSBicGZfd3FfaW5pdChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBcdTAwMjZ3b3JrX21hcCwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGJwZl93cV9zdGFydChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCAwKTtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQyOjI2LjA5MDk2MTE1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjQ0MzMxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEtlcm5lbCBTb2NrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIHRoZSBgYnBmX2tzb2NrYCBmZWF0dXJlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMgZGlyZWN0bHkuIFdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IHNldCBvZiBCUEYga2Z1bmNzOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIHdhdGNoLlxuXG5UaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBhbmQgYG5ldC9zb2NrZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuZXR3b3JraW5nIGNvbnRleHQuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW47IGl0J3MgZnVuZGFtZW50YWwgZm9yIGFueSBCUEYtcmVsYXRlZCBjaGFuZ2UuIGBDT05GSUdfSU5FVGAgaXMgYWxzbyBleHBlY3RlZCwgYXMgdGhpcyBkZWFscyB3aXRoIGludGVybmV0IHByb3RvY29scy4gV2Ugc2hvdWxkIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCB0aGUgbWFrZWZpbGUsIGl0IHNlZW1zIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LiBgYnBmX2tzb2NrLm9gIGlzIG9ubHkgY29tcGlsZWQgaWYgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgZW5hYmxlZC4gR29vZC5cblxuSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiBub3cuIExldCdzIHNlZSB3aGF0IGVsc2UgYG5ldC9jb3JlL2JwZl9rc29jay5jYCBob2xkcy4gQXNpZGUgZnJvbSB0aGUga2Z1bmNzLCBpdCBhbHNvIGhhcyBga3NvY2tfcmVsZWFzZV93b3JrX2ZuYCBhbmQgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgLiBJJ2xsIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGVzZSBrZXJuZWwgc29ja2V0cy5cblxuVGhlIGBuZXQvc29ja2V0LmNgIGZpbGUgaXMgaW50ZXJlc3RpbmcuIFRoZSBhZGRpdGlvbiBvZiBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGNhdGNoZXMgbXkgZXllLiBJdCdzIGEgbmV3LCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaW4gdGhlIGtlcm5lbCBpbnRlcmZhY2U7IHRoaXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBsb2dpYy5cblxuRmluYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBwZWVrIGF0IHRoZSBkZXBlbmRlbmNpZXMgYWdhaW4sIGFuZCBjb25maXJtIEknbSBub3QgbWlzc2luZyBhbnkuIGBDT05GSUdfSVBWNmAgaXMgYWxzbyB1c2VkIGluIGBicGZfa3NvY2tfY29ubmVjdGAsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbmV4dCBjb25maWcgdG8gY29uc2lkZXIuIEFuZCBJIGFtIGdvaW5nIHRvIHJ1biBhIGBncmVwYCB0byBjaGVjayBpZiBgQ09ORklHX0lORVRgIGlzIHRoZSBvbmx5IG5ldHdvcmsgZGVwZW5kZW5jeS5cblxuQWxyaWdodCwgd2l0aCB0aGlzIG92ZXJ2aWV3LCBJIGhhdmUgYSBnb29kIGZyYW1ld29yayB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGlzIHNlZW1zIHRvIGJlIGEgcG93ZXJmdWwgZmVhdHVyZSwgb3BlbmluZyB1cCBuZXcgcG9zc2liaWxpdGllcyBmb3IgQlBGLWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDI6NTQuMzM1Mjk1MTk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODQ3NDgxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2tzb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTEtLyoqXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxMjogKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTMtICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTgtICovXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxOTpzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTIwLVxcdF9fdTggZmFtaWx5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0yNi0vKipcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oOjI3OiAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0yOC0gKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0zMC0gKi9cXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oOjMxOnVuaW9uIGJwZl9rc29ja19hZGRyIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTMyLVxcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTA1My0jaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0lORVQpXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwNTQ6XFx0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGJwZl9rc29ja19zZW5kKCkgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTA1NTpcXHR1bnNpZ25lZFxcdFxcdFxcdGluX2JwZl9rc29ja19zZW5kOjE7XFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwNTYtI2VuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDQ3MT1CVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NDczLSNpZmRlZiBDT05GSUdfSU5FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0NDc0OkJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ3NS0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL01ha2VmaWxlPTQ3PWlmbmVxICgkKENPTkZJR19JTkVUKSwpXFxubmV0L2NvcmUvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ5LWVuZGlmXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG5uZXQvY29yZS9icGZfa3NvY2suYzo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfa3NvY2suaFxcdTAwM2VcXG5uZXQvY29yZS9icGZfa3NvY2suYy02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwLS8qKlxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIxOiAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMi0gKiBAc29jazpcXHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0Llxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjUtICovXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjY6c3RydWN0IGJwZl9rc29jayB7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjctXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTMyPXN0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzMte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjM0OlxcdHN0cnVjdCBicGZfa3NvY2sgKmtzID1cXG5uZXQvY29yZS9icGZfa3NvY2suYzozNTpcXHRcXHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zNi1cXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTQwLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjQxOnN0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcXG5uZXQvY29yZS9icGZfa3NvY2suYy00Mi17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz01MD1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy01Mi0vKipcXG5uZXQvY29yZS9icGZfa3NvY2suYzo1MzogKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cXG5uZXQvY29yZS9icGZfa3NvY2suYy01NC0gKlxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTctICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG5uZXQvY29yZS9icGZfa3NvY2suYzo1ODogKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTktICpcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTY0LSAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NjU6ICogQG9wdHM6XFx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjYtICogQG9wdHNfX3N6OlxcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0Llxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjgtICovXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Njk6X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NzA6YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEtXFx0XFx0IGludCAqZXJyX191bmluaXQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzIte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjczOlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjc0OlxcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTc1LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy04MS1cXHQgKi9cXG5uZXQvY29yZS9icGZfa3NvY2suYzo4MjpcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTgzLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODYtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6ODc6XFx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTg4LVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy05MS1cXG5uZXQvY29yZS9icGZfa3NvY2suYzo5MjpcXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtOTMtXFx0XFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VmYW1pbHkpLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTQ5LS8qKlxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE1MDogKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTUxLSAqIEBrczpcXHRcXHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE2MS0gKi9cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNjI6X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE2MzpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE2NC1cXHRcXHRcXHRcXHQgIHUzMiBhZGRyX19zeilcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE2OC1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNjk6XFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTcwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE5NC0vKipcXG5uZXQvY29yZS9icGZfa3NvY2suYzoxOTU6ICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC5cXG5uZXQvY29yZS9icGZfa3NvY2suYy0xOTYtICogQGtzOlxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTk5LSAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjAwOiAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMDEtICovXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjAyOl9fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwMy17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMDktLyoqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjEwOiAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjExLSAqIEBrczpcXHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjE1LSAqL1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIxNjpfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIxNy17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjMtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI0Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjUte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIyNjpcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjI3LX1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMjg6Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjktXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjMwLS8qKlxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIzMTogKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMzItICogQGtzOlxcdFxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LiBNdXN0IGJlIGFuIGFjcXVpcmVkIHJlZmVyZW5jZS5cXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI0MC0gKi9cXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNDE6X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI0Mi1cXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfX3N6KVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjUyLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI1MzpcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNTQtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjU5LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI2MDpcXHRpZiAoY3VycmVudC1cXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjYxLVxcdFxcdHJldHVybiAtRUJVU1k7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjYyLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI2MzpcXHRjdXJyZW50LVxcdTAwM2Vpbl9icGZfa3NvY2tfc2VuZCA9IHRydWU7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjY0LVxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjY1OlxcdGN1cnJlbnQtXFx1MDAzZWluX2JwZl9rc29ja19zZW5kID0gZmFsc2U7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjY2LVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjcyPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3MzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3NDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjgyPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4NDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg2LUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg3LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4ODpzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg5LXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTI5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAwLVxcdC5zZXQgPSBcXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDE6XFx0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAyLX07XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAzLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNDpCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzA1OkJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDY6QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA3LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwODpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwOS17XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzEwLVxcdGludCByZXQ7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzExOlxcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTItXFx0XFx0e1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxMzpcXHRcXHRcXHQuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxNDpcXHRcXHRcXHQua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMxNS1cXHRcXHR9LFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIzLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMjQ6XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2tzb2NrX2R0b3JzLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMyNTpcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMjgtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzI5OmxhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYz0xNjU9dm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMtMjExLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmM6MjEyOlxcdC8qIFN0ZXAgMzogVGhlIG5lc3RlZCBicGZfa3NvY2tfc2VuZCgpIG11c3QgaGl0IHRoZSByZWN1cnNpb24gZ3VhcmQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jLTIxMy1cXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlY19jb3VudCwgMixcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jPTE4PWludCBrc29ja19zZW5kKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jLTIwLVxcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYzoyMTpcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYy0yMi1cXHRpbnQgc2VuZCA9IC0xO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMtMzEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmM6MzI6XFx0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYzozMzpcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMtMzQtXFx0cmV0dXJuIHNlbmQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjE2OnN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMTctXFx0XFx0XFx0XFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjE4OmludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTE5LVxcdFxcdCAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyMDpzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyMTp2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjIyOmludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTIzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD0yND1zdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyNTpcXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMjYtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD0zNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTQxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo0MjpzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDMte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC00NC1cXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ1OlxcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDgtXFx0aWYgKCF2KSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ5OlxcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTUwLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTU0LVxcdGlmIChvbGQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NTU6XFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNTYtXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg9Njg9c3RhdGljIGlubGluZSBpbnQgZG9fa3NvY2tfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNjkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MDpcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIGNyZWF0ZV9vcHRzID0ge307XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjcxOlxcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NzI6XFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTczLVxcdGludCBlcnIgPSAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3OTpcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcXHUwMDI2ZXJyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtODAtXFx0aWYgKCFrcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC04Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6ODc6XFx0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC04OC1cXHRpZiAoZXJyKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjg5OlxcdFxcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtOTAtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYz0yNz1pbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy0zMC1cXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jOjMxOlxcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy0zMi1cXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMtNDctXFx0aWYgKHRtcClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmM6NDg6XFx0XFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy00OS1cXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMtNTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jOjU2OlxcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmM6NTc6XFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy01OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jPTI1PXN0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjI3OlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yOC1cXHRcXHQuZmFtaWx5ID0gQUZfSU5FVCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTMxLVxcdH07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6MzI6XFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzMtXFx0aW50IGVyciA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6MzU6XFx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFxcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFxcdTAwMjZlcnIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM2LVxcdGlmIChrcylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYzozNzpcXHRcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzgtXFx0Y3JlYXRlX2VyciA9IGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDI6NTYuNjIwMDQ4NDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1ODMyMjU4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBLc29jayBGZWF0dXJlIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgYGJwZl9rc29ja2AgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGludGVyYWN0aW9uIG9mIEJQRiBwcm9ncmFtcyB3aXRoIGtlcm5lbCBzb2NrZXRzLCB3aGljaCByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24gaW4gdGVybXMgb2YgYXR0YWNrIHN1cmZhY2UgYW5kIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGV4cG9zdXJlLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSd2ZSBnb3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfSU5FVGAgZmxhZ2dlZC4gVGhlc2UgYXJlIG9idmlvdXNseSBlc3NlbnRpYWwuIEkgYnJpZWZseSBjb25zaWRlcmVkIG90aGVyIGNvbmZpZ3MgbGlrZSBgQ09ORklHX0NSWVBUT2AsIGJ1dCBxdWlja2x5IGRpc21pc3NlZCBpdCBhcyB1bnJlbGF0ZWQgdG8gdGhlIGtzb2NrIGZ1bmN0aW9uYWxpdHkuIGBDT05GSUdfSVBWNmAgaXMgYWxzbyByZWxldmFudCBiZWNhdXNlIGl0J3MgdXNlZCBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBzbyBpdCBzaG91bGQgZGVmaW5pdGVseSBiZSBpbmNsdWRlZCBpbiBvdXIgZnV6emluZyBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGUgbWF4aW11bSBjb3ZlcmFnZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdHMgdXNlIGluIGBuZXQvY29yZS9icGZfa3NvY2suY2A6IElQdjYgaXMgZW5hYmxlZCB2aWEgdGhlIGBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgbWFjcm8uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzeW1ib2xzIHdlIG5lZWQgdG8gdGFyZ2V0LiBJJ3ZlIGdvdDpcblxuKiAgIGBicGZfa3NvY2tfY3JlYXRlYFxuKiAgIGBicGZfa3NvY2tfY29ubmVjdGBcbiogICBgYnBmX2tzb2NrX2FjcXVpcmVgXG4qICAgYGJwZl9rc29ja19yZWxlYXNlYFxuKiAgIGBicGZfa3NvY2tfc2VuZGBcbiogICBgX19zeXNfY29ubmVjdF9zb2NrZXRgXG5cbkkgY29uc2lkZXJlZCB3aGV0aGVyIGBrc29ja19yZWxlYXNlX3dvcmtfZm5gIHdhcnJhbnRzIGZ1enppbmcsIGJ1dCBpdCBzZWVtcyB0byBiZSBqdXN0IGEgd3JhcHBlciBhcm91bmQgYHNvY2tfcmVsZWFzZWAgYW5kIGBrZnJlZWAsIG1vc3RseSBqdXN0IGNhbGxpbmcgZXhpc3RpbmcgZnVuY3Rpb25zLiBJdHMgcHJpbWFyeSBmdW5jdGlvbiBpcyBhIFJDVSB3b3JrIGZ1bmN0aW9uLCBzbyB3aGlsZSBpbnRlcmVzdGluZywgdGhlIHByaW1hcnkgbG9naWMgaXMgbGlrZWx5IHRvIGJlIGVsc2V3aGVyZSBpbiBleGlzdGluZyBrZnVuY3MsIHNvIEknbSBsZXNzIGluY2xpbmVkIHRvIGhlYXZpbHkgZm9jdXMgb24gaXQuIEFkZGl0aW9uYWxseSwgSSBjb25maXJtZWQgdGhhdCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGlzbid0IHN0YXRpYywgc28gaXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlLlxuXG5Fc3NlbnRpYWxseSwgSSBzZWUgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBhcyBhIGNlbnRyYWwgcG9pbnQsIGdpdmVuIGl0cyBjcml0aWNhbCByb2xlIGluIGBicGZfa3NvY2tfY29ubmVjdGAgYW5kIGBfX3N5c19jb25uZWN0X2ZpbGVgLlxuXG5UaGVyZWZvcmUsIHRoZSB1cGRhdGVkIGxpc3Qgb2YgdGFyZ2V0cyBhbmQgY29uZmlncyBhcmU6XG5cbioqRm9jdXMgU3ltYm9sczoqKlxuXG4qICAgYGJwZl9rc29ja19jcmVhdGVgXG4qICAgYGJwZl9rc29ja19jb25uZWN0YFxuKiAgIGBicGZfa3NvY2tfYWNxdWlyZWBcbiogICBgYnBmX2tzb2NrX3JlbGVhc2VgXG4qICAgYGJwZl9rc29ja19zZW5kYFxuKiAgIGBfX3N5c19jb25uZWN0X3NvY2tldGBcblxuKipDb25maWdzOioqXG5cbiogICBgQ09ORklHX0JQRl9TWVNDQUxMYFxuKiAgIGBDT05GSUdfSU5FVGBcbiogICBgQ09ORklHX0lQVjZgXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IGBicGZfa3NvY2tgIGFkZHMgYnJhbmQgbmV3IGtmdW5jcyBhbmQgbmV3IGVudHJ5cG9pbnRzIHdpdGhpbiB0aGUga2VybmVsIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLiBUaGV5IGFyZSwgaW4gZWZmZWN0LCBuZXcgd2F5cyB0byBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzIHRocm91Z2ggQlBGIHByb2dyYW1zLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIG5ldyBmZWF0dXJlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MjMsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQzOjEwLjIwMzI3NzcyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjQ1NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9rc29ja19jcmVhdGVcIixcbiAgICBcImJwZl9rc29ja19jb25uZWN0XCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJfX3N5c19jb25uZWN0X3NvY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGZlYXR1cmUgYGJwZl9rc29ja2AgdGhhdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cyBmb3IgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jcyBhbmQgdGhlIG5ld2x5IGV4dHJhY3RlZCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGhlbHBlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9rc29ja19jcmVhdGVcIixcbiAgICBcImJwZl9rc29ja19jb25uZWN0XCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJfX3N5c19jb25uZWN0X3NvY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGZlYXR1cmUgYGJwZl9rc29ja2AgdGhhdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cyBmb3IgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jcyBhbmQgdGhlIG5ld2x5IGV4dHJhY3RlZCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGhlbHBlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowwgxsx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 16:57:44 +0000 UTC FinishedAt: 2026-08-04 17:43:11 +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": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "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": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ksock_create", "bpf_ksock_connect", "bpf_ksock_acquire", "bpf_ksock_release", "bpf_ksock_send", "__sys_connect_socket" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7X19zeXNfY29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDdmODJmYTJlMDYwNTU3ZDAzMTY5YzVmNjc3NjhiNGQ4NDAzMDM2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTc6NDI6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5AQCAtMCwwICYjNDM7MSwzNiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0JQRl9LU09DS19IXG4mIzQzOyNkZWZpbmUgX0JQRl9LU09DS19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuJiM0MzsgKiBAZmFtaWx5Olx0QWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuXG4mIzQzOyAqIEB0eXBlOlx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cbiYjNDM7ICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbiYjNDM7ICpcdFx0b2YgdGhlIGdpdmVuIHR5cGUuXG4mIzQzOyAqIEByZXNlcnZlZDpcdE11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcbiYjNDM7XHRfX3U4IGZhbWlseTtcbiYjNDM7XHRfX3U4IHR5cGU7XG4mIzQzO1x0X191OCBwcm90b2NvbDtcbiYjNDM7XHRfX3U4IHJlc2VydmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4mIzQzOyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuXG4mIzQzOyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKi9cbiYjNDM7dW5pb24gYnBmX2tzb2NrX2FkZHIge1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMC4uMzM0ODQ2ZGY5MjM4MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTA1MCw2ICYjNDM7MTA1MCwxMCBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGV2ZW50ZmRfc2lnbmFsKCkgKi9cbiBcdHVuc2lnbmVkXHRcdFx0aW5fZXZlbnRmZDoxO1xuICNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JTkVUKVxuJiM0MztcdC8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBicGZfa3NvY2tfc2VuZCgpICovXG4mIzQzO1x0dW5zaWduZWRcdFx0XHRpbl9icGZfa3NvY2tfc2VuZDoxO1xuJiM0MzsjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NQVV9QQVNJRFxuIFx0dW5zaWduZWRcdFx0XHRwYXNpZF9hY3RpdmF0ZWQ6MTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uNDhmMWViODE5M2RlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdFx0ICAgICBpbnQgYWRkcmxlbik7XG4mIzQzO2V4dGVybiBpbnQgX19zeXNfY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4mIzQzO1x0XHRcdFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uMTE1NGI1YjBiNmEwNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3MCw2ICYjNDM7NDQ3MCw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuICNpZmRlZiBDT05GSUdfQ1JZUFRPXG4gQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfSU5FVFxuJiM0MztCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4mIzQzOyNlbmRpZlxuIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG4gXG4gc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGIzZmRjYjRlMzU1ZmEuLmE5Mjk1Yjc4NTkwMTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGVcbkBAIC00NCw2ICYjNDM7NDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICYjNDM7PSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xuJiM0MztpZm5lcSAoJChDT05GSUdfSU5FVCksKVxuJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2sub1xuJiM0MztlbmRpZlxuIG9iai0kKENPTkZJR19PRilcdCYjNDM7PSBvZl9uZXQub1xuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjMTk5ODg4NzE5NjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5AQCAtMCwwICYjNDM7MSwzMjkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfa3NvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbiYjNDM7ICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAdXNhZ2U6XHRSZWZlcmVuY2UgY291bnRlci5cbiYjNDM7ICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29jayB7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqc29jaztcbiYjNDM7XHRyZWZjb3VudF90IHVzYWdlO1xuJiM0MztcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbiYjNDM7XG4mIzQzO1x0c29ja19yZWxlYXNlKGtzLVx1MDAzZXNvY2spO1xuJiM0MztcdGtmcmVlKGtzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4mIzQzO1x0ICogY2xlYXJlZCBjdXJyZW50LVx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbiYjNDM7ICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxuJiM0MzsgKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbiYjNDM7ICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxuJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbiYjNDM7XHRcdCBpbnQgKmVycl9fdW5pbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxuJiM0MztcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbiYjNDM7XHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuJiM0MztcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xuJiM0MztcdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4mIzQzO1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuJiM0MztcdFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcHJvdG9jb2wpLFxuJiM0MztcdFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xuJiM0MztcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzID0ga3phbGxvY19vYmooKmtzKTtcbiYjNDM7XHRpZiAoIWtzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXG4mIzQzO1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4mIzQzO1x0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXG4mIzQzO1x0XHRcdCAgXHUwMDI2a3MtXHUwMDNlc29jayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XG4mIzQzO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0a2ZyZWUoa3MpO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4mIzQzOyAqIEBhZGRyOlx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXG4mIzQzOyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4mIzQzOyAqXG4mIzQzOyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4mIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbiYjNDM7XHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xuJiM0MztcdGludCBhZGRybGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xuJiM0MztcdG1lbWNweShcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUOlxuJiM0MztcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChrcy1cdTAwM2Vzb2NrLCBcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGFcbiYjNDM7ICpcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbiYjNDM7ICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4mIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbiYjNDM7e1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a3MtXHUwMDNldXNhZ2UpKSB7XG4mIzQzO1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuJiM0MztcdFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2a3MtXHUwMDNlcndvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0Mzt9XG4mIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxuJiM0MzsgKiBAZGF0YTpcdFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC5cbiYjNDM7ICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIChtYXggNjU1MzUgYnl0ZXMpLlxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxuJiM0MzsgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGt2ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxuJiM0MztcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cbiYjNDM7XHRpZiAoZGF0YV9fc3ogXHUwMDNlIElQX01BWF9NVFUpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9icGZfa3NvY2tfc2VuZClcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSB0cnVlO1xuJiM0MztcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4mIzQzO1x0Y3VycmVudC1cdTAwM2Vpbl9icGZfa3NvY2tfc2VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxuJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fFxuJiM0MztcdCAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMIHx8XG4mIzQzO1x0ICAgIHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7XHQuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcylcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbiYjNDM7XHRcdHtcbiYjNDM7XHRcdFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcbiYjNDM7XHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbiYjNDM7XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxuJiM0MztcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5jNzQyN2RkNGRkNTIzIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTE1LDI3ICYjNDM7MjExNSwzMSBAQCBTWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxuICAqXHRpbmNsdWRlIHRoZSAtRUlOUFJPR1JFU1Mgc3RhdHVzIGZvciBzdWNoIHNvY2tldHMuXG4gICovXG4gXG4mIzQzO2ludCBfX3N5c19jb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiYjNDM7XHRcdFx0IGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jayxcbiYjNDM7XHRcdFx0XHQgICAgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHQgICAgYWRkcmxlbiwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHQgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tXHRpbnQgZXJyO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpO1xuLVx0aWYgKCFzb2NrKSB7XG4tXHRcdGVyciA9IC1FTk9UU09DSztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRlcnIgPVxuLVx0ICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghc29jaylcbiYjNDM7XHRcdHJldHVybiAtRU5PVFNPQ0s7XG4gXG4tXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi1cdFx0XHRcdFx0ICAgIGFkZHJsZW4sIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tb3V0OlxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gX19zeXNfY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbiYjNDM7XHRcdFx0XHQgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMmRiODllOWMwMTg2ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCAmIzQzOzEsMjMxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0d29ya19oZWxwZXJzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfYmFzaWMuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX3JlY3Vyc2lvbi5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNfVEVTVCBcJiMzNDtrc29ja19iYXNpY19uc1wmIzM0O1xuJiM0MzsjZGVmaW5lIE5TX0xTTV9SRUNVUlNJT05fVEVTVCBcJiMzNDtrc29ja19sc21fcmVjdXJzaW9uX25zXCYjMzQ7XG4mIzQzOyNkZWZpbmUgTE9PUEJBQ0tfSVAgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcbiYjNDM7I2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc29ja190ZXN0X2VudiB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmV0bnM7XG4mIzQzO1x0Ym9vbCBuZXRuc19jcmVhdGVkO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuJiM0MztcdGludCByZmQ7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYsIGNvbnN0IGNoYXIgKm5ldG5zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbiYjNDM7XHRlbnYtXHUwMDNlbmV0bnMgPSBuZXRucztcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gLTE7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIG5ldG5zKTtcbiYjNDM7XHRlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIC1uZXQgJXMgbGluayBzZXQgbG8gdXBcJiMzNDssIG5ldG5zKTtcbiYjNDM7XG4mIzQzO1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKG5ldG5zKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZW52LVx1MDAzZW5zdG9rZW4sIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXHUwMDNlcmZkLCBcJiMzNDtyZWNlaXZlciBzb2NrZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlbnYtXHUwMDNlYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRlbnYtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xuJiM0MztcdGVudi1cdTAwM2VhZGRyLnNpbl9wb3J0ID0gaHRvbnMoUkVDVl9QT1JUKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYmluZChlbnYtXHUwMDNlcmZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2ZW52LVx1MDAzZWFkZHIsIHNpemVvZihlbnYtXHUwMDNlYWRkcikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YmluZCByZWNlaXZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHR2LnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUM7XG4mIzQzO1x0dHYudHZfdXNlYyA9IDA7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0IHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmIChlbnYtXHUwMDNlcmZkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0Y2xvc2UoZW52LVx1MDAzZXJmZCk7XG4mIzQzO1x0XHRlbnYtXHUwMDNlcmZkID0gLTE7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlbnYtXHUwMDNlbnN0b2tlbikge1xuJiM0MztcdFx0Y2xvc2VfbmV0bnMoZW52LVx1MDAzZW5zdG9rZW4pO1xuJiM0MztcdFx0ZW52LVx1MDAzZW5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZW52LVx1MDAzZW5ldG5zX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwmIzM0OywgbmV0bnMpO1xuJiM0MztcdFx0ZW52LVx1MDAzZW5ldG5zX2NyZWF0ZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrc29ja190ZXN0X2Vudl9jbGVhbnVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi1cdTAwM2VyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZW52LVx1MDAzZXJmZCk7XG4mIzQzO1x0aWYgKGVudi1cdTAwM2Vuc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMoZW52LVx1MDAzZW5zdG9rZW4pO1xuJiM0MztcdGlmIChlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCkge1xuJiM0MztcdFx0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXMgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXCYjMzQ7LCBlbnYtXHUwMDNlbmV0bnMpO1xuJiM0MztcdFx0ZW52LVx1MDAzZW5ldG5zX2NyZWF0ZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzb2NrX2Fzc2VydF9yZWN2KHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52LCBjb25zdCBjaGFyICpkYXRhLFxuJiM0MztcdFx0XHQgICAgICBzaXplX3QgZGF0YV9zeilcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGVudi1cdTAwM2VidWYsIDAsIHNpemVvZihlbnYtXHUwMDNlYnVmKSk7XG4mIzQzO1x0biA9IHJlY3Zmcm9tKGVudi1cdTAwM2VyZmQsIGVudi1cdTAwM2VidWYsIHNpemVvZihlbnYtXHUwMDNlYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEobiwgZGF0YV9zeiwgXCYjMzQ7cmVjdmZyb20gbGVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRBU1NFUlRfTUVNRVEoZW52LVx1MDAzZWJ1ZiwgZGF0YSwgZGF0YV9zeiwgXCYjMzQ7cGF5bG9hZCBtYXRjaFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGtzb2NrX3NldHVwX2N0eChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fYmUzMiAqaXB2NF9yZW1vdGUsXG4mIzQzO1x0XHRcdCAgICBfX3UxNiAqcmVtb3RlX3BvcnQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4mIzQzO1x0aW50IGVyciwgcGZkO1xuJiM0MztcbiYjNDM7XHQqaXB2NF9yZW1vdGUgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xuJiM0MztcdCpyZW1vdGVfcG9ydCA9IFJFQ1ZfUE9SVDtcbiYjNDM7XG4mIzQzO1x0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHByb2cpO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2tzb2NrX3NldHVwIHJ1blwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O2tzb2NrX3NldHVwIHJldHZhbFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuJiM0MztcdHN0cnVjdCBrc29ja19iYXNpYyAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyLCBwZmQ7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBrc29ja19iYXNpY19fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBrc29ja19iYXNpY19fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NrZWwgbG9hZFwmIzM0OykpIHtcbiYjNDM7XHRcdGtzb2NrX2Jhc2ljX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcdTAwMjZlbnYsIE5TX1RFU1QpKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSBrc29jayAqL1xuJiM0MztcdGlmICgha3NvY2tfc2V0dXBfY3R4KHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2V0dXAsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWlwdjRfcmVtb3RlLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAyOiBSdW4gdGhlIHNlbmQgU1lTQ0FMTCBwcm9nICovXG4mIzQzO1x0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2VuZCk7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwZmQsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7a3NvY2tfc2VuZCBydW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7c2VuZG1zZyBieXRlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovXG4mIzQzO1x0a3NvY2tfYXNzZXJ0X3JlY3YoXHUwMDI2ZW52LCBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhLFxuJiM0MztcdFx0XHQgIHNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhKSk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoXHUwMDI2ZW52KTtcbiYjNDM7XHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4mIzQzO1x0c3RydWN0IGtzb2NrX3JlY3Vyc2lvbiAqc2tlbDtcbiYjNDM7XHRjaGFyIHRyaWdnZXIgPSAmIzM5O3gmIzM5OztcbiYjNDM7XHRpbnQgdGZkID0gLTE7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRzc2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBrc29ja19yZWN1cnNpb25fX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbCBvcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0ga3NvY2tfcmVjdXJzaW9uX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2tlbCBsb2FkXCYjMzQ7KSkge1xuJiM0MztcdFx0a3NvY2tfcmVjdXJzaW9uX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcdTAwMjZlbnYsIE5TX0xTTV9SRUNVUlNJT05fVEVTVCkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuJiM0MztcdGlmICgha3NvY2tfc2V0dXBfY3R4KHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2V0dXAsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWlwdjRfcmVtb3RlLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAyOiBBdHRhY2ggTFNNIHByb2cgYW5kIHRyaWdnZXIgc29ja2V0X3NlbmRtc2cgZnJvbSB1c2Vyc3BhY2UgKi9cbiYjNDM7XHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnID1cbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc29ja2V0X3NlbmRtc2cpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDthdHRhY2ggc29ja2V0X3NlbmRtc2cgbHNtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0dGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwmIzM0O3RyaWdnZXIgc29ja2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRyaWdnZXJfc2VuZCA9IDE7XG4mIzQzO1x0biA9IHNlbmR0byh0ZmQsIFx1MDAyNnRyaWdnZXIsIHNpemVvZih0cmlnZ2VyKSwgMCxcbiYjNDM7XHRcdCAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZlbnYuYWRkciwgc2l6ZW9mKGVudi5hZGRyKSk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHJpZ2dlcl9zZW5kID0gMDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShuLCBzaXplb2YodHJpZ2dlciksIFwmIzM0O3RyaWdnZXIgc2VuZHRvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqL1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlY19jb3VudCwgMixcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtzb2NrZXRfc2VuZG1zZyByZWN1cnNpb24gY291bnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3JlY3Vyc2l2ZSBzZW5kIHN0YXR1c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXJlY19rZnVuY19yZXRzWzFdLFxuJiM0MztcdFx0ICAgICAgIHNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhKSwgXCYjMzQ7b3V0ZXIgc2VuZCBieXRlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGtzb2NrX2Fzc2VydF9yZWN2KFx1MDAyNmVudiwgc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSxcbiYjNDM7XHRcdFx0ICBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSkpO1xuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAodGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHRmZCk7XG4mIzQzO1x0a3NvY2tfdGVzdF9lbnZfY2xlYW51cChcdTAwMjZlbnYpO1xuJiM0MztcdGtzb2NrX3JlY3Vyc2lvbl9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja193cS5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja193cV9zdGFydCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuJiM0MztcdFx0dXNsZWVwKDEwMDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHQgIFwmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE4OWIwZmMxNTc3MDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jXG5AQCAtMCwwICYjNDM7MSwzNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZG9fa3NvY2tfc2V0dXAoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBrc29ja19zZW5kKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgc2VuZCA9IC0xO1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdilcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIE5VTEwpO1xuJiM0MztcdGlmICgha3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1x0cmV0dXJuIHNlbmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmMzMjAzMjIwYTJkMGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCAmIzQzOzEsOTkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcbiYjNDM7I2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Vycm5vLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU09DS19TVFJFQU1cdDFcbiYjNDM7I2RlZmluZSBTT0NLX0RHUkFNXHQyXG4mIzQzOyNkZWZpbmUgSVBQUk9UT19UQ1BcdDZcbiYjNDM7I2RlZmluZSBJUFBST1RPX1VEUFx0MTdcbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgb3B0c19fc3osIGludCAqZXJyX191bmluaXQpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbiYjNDM7XHRcdCAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltO1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4mIzQzO2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07XG4mIzQzO1xuJiM0MztzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgX19rcHRyICogY3R4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IF9fa3NvY2tfY3R4X21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKmtzb2NrX2N0eF92YWx1ZV9sb29rdXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHUzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcbiYjNDM7XG4mIzQzO1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbiYjNDM7XHRpZiAoIXYpIHtcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIGN0eCk7XG4mIzQzO1x0aWYgKG9sZCkge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEdsb2JhbHMgZm9yIHBhc3NpbmcgY29uZmlnIGZyb20gdXNlcnNwYWNlICovXG4mIzQzO19fYmUzMiBpcHY0X3JlbW90ZTtcbiYjNDM7X191MTYgcmVtb3RlX3BvcnQ7XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSBcJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29ja1wmIzM0OztcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGRvX2tzb2NrX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIGNyZWF0ZV9vcHRzID0ge307XG4mIzQzO1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfb3B0cy5mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNO1xuJiM0MztcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4mIzQzO1xuJiM0MztcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgXHUwMDI2ZXJyKTtcbiYjNDM7XHRpZiAoIWtzKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0YWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpO1xuJiM0MztcdGFkZHIuc2luLnNpbl9hZGRyLnNfYWRkciA9IGlwdjRfcmVtb3RlO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTJmNTIwMDk0M2UzNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jXG5AQCAtMCwwICYjNDM7MSw2OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO1xuJiM0MztpbnQgdGFyZ2V0X3BpZDtcbiYjNDM7aW50IHRyaWdnZXJfc2VuZDtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCByZWNfY291bnQ7XG4mIzQzO2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZ1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4mIzQzO1x0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDtcbiYjNDM7XHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdGludCBrZnVuY19yZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgfHwgIXRyaWdnZXJfc2VuZCB8fCBwaWQgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4mIzQzO1x0aWYgKCF2KSB7XG4mIzQzO1x0XHRrZnVuY19yZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrcyA9IE5VTEw7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR0bXAgPSB2LVx1MDAzZWN0eDtcbiYjNDM7XHRpZiAodG1wKVxuJiM0MztcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrcykge1xuJiM0MztcdFx0a2Z1bmNfcmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2Z1bmNfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xuJiM0MztcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0ga2Z1bmNfcmV0O1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnJlY19jb3VudCwgMSk7XG4mIzQzO1xuJiM0MztcdGlmIChrZnVuY19yZXQgIT0gLUVCVVNZKVxuJiM0MztcdFx0dHJpZ2dlcl9zZW5kID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2YTE4NzNkMTMyZWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5AQCAtMCwwICYjNDM7MSw2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Vycm5vLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc29ja193cV92YWx1ZSB7XG4mIzQzO1x0c3RydWN0IGJwZl93cSB3b3JrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIHUzMik7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpO1xuJiM0Mzt9IHdvcmtfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztpbnQgY3JlYXRlX2VycjtcbiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xuJiM0MztcdFx0LmZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHQudHlwZSA9IFNPQ0tfREdSQU0sXG4mIzQzO1x0XHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2b3B0cywgc2l6ZW9mKG9wdHMpLCBcdTAwMjZlcnIpO1xuJiM0MztcdGlmIChrcylcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbiYjNDM7XHRjcmVhdGVfZXJyID0gZXJyO1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XG4mIzQzO1x0dTMyIGtleSA9IDA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndvcmtfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsdWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHRlcnIgPSBicGZfd3FfaW5pdChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBcdTAwMjZ3b3JrX21hcCwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0cmV0dXJuIGJwZl93cV9zdGFydChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7X19zeXNfY29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDdmODJmYTJlMDYwNTU3ZDAzMTY5YzVmNjc3NjhiNGQ4NDAzMDM2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMTc6NDI6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApAQCAtMCwwICYjNDM7MSwzNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfQlBGX0tTT0NLX0gKJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVycwomIzQzOyAqIEBmYW1pbHk6CUFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LgomIzQzOyAqIEB0eXBlOglTb2NrZXQgdHlwZTogb25seSBTT0NLX0RHUkFNIHN1cHBvcnRlZCBmb3Igbm93LgomIzQzOyAqIEBwcm90b2NvbDoJUHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2wKJiM0MzsgKgkJb2YgdGhlIGdpdmVuIHR5cGUuCiYjNDM7ICogQHJlc2VydmVkOglNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgewomIzQzOwlfX3U4IGZhbWlseTsKJiM0MzsJX191OCB0eXBlOwomIzQzOwlfX3U4IHByb3RvY29sOwomIzQzOwlfX3U4IHJlc2VydmVkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MKJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqLwomIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM3M2JjYzA1OThkMTAuLjMzNDg0NmRmOTIzODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEwNTAsNiAmIzQzOzEwNTAsMTAgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsKIAkvKiBSZWN1cnNpb24gcHJldmVudGlvbiBmb3IgZXZlbnRmZF9zaWduYWwoKSAqLwogCXVuc2lnbmVkCQkJaW5fZXZlbnRmZDoxOwogI2VuZGlmCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0lORVQpCiYjNDM7CS8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBicGZfa3NvY2tfc2VuZCgpICovCiYjNDM7CXVuc2lnbmVkCQkJaW5fYnBmX2tzb2NrX3NlbmQ6MTsKJiM0MzsjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ1BVX1BBU0lECiAJdW5zaWduZWQJCQlwYXNpZF9hY3RpdmF0ZWQ6MTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMmE4ZDdiMTRmMWQxMS4uNDhmMWViODE5M2RlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7CiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7CiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAogCQkJICAgICBpbnQgYWRkcmxlbik7CiYjNDM7ZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKJiM0MzsJCQkJaW50IGFkZHJsZW4sIGludCBmbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiAJCQkgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpOwogZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGIyNzQwMDRmY2NmZDkuLjExNTRiNWIwYjZhMDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTQ0NzAsNiAmIzQzOzQ0NzAsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdCkKICNpZmRlZiBDT05GSUdfQ1JZUFRPCiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eCkKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSU5FVAomIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaykKJiM0MzsjZW5kaWYKIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpCiAKIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGUKQEAgLTQ0LDYgJiM0Mzs0NCw5IEBAIG9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm8KIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vCiYjNDM7aWZuZXEgKCQoQ09ORklHX0lORVQpLCkKJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2subwomIzQzO2VuZGlmCiBvYmotJChDT05GSUdfT0YpCSYjNDM7PSBvZl9uZXQubwogb2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qubwogb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mYzE5OTg4ODcxOTYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvYnBmX2tzb2NrLmMKQEAgLTAsMCAmIzQzOzEsMzI5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9rc29jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrIC0gcmVmY291bnRlZCBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0CiYjNDM7ICogQHNvY2s6CVRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQHVzYWdlOglSZWZlcmVuY2UgY291bnRlci4KJiM0MzsgKiBAcndvcms6CVJDVSB3b3JrIGZvciBkZWZlcnJlZCBjbGVhbnVwIChzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYnBmX2tzb2NrIHsKJiM0MzsJc3RydWN0IHNvY2tldCAqc29jazsKJiM0MzsJcmVmY291bnRfdCB1c2FnZTsKJiM0MzsJc3RydWN0IHJjdV93b3JrIHJ3b3JrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0KJiM0MzsJCWNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspOwomIzQzOwomIzQzOwlzb2NrX3JlbGVhc2Uoa3MtJmd0O3NvY2spOwomIzQzOwlrZnJlZShrcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKCkKJiM0MzsJICogY2xlYXJlZCBjdXJyZW50LSZndDtuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7IGN1cnJlbnQtJmd0O25zcHJveHk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFjawomIzQzOyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzayYjMzk7cyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIEBvcHRzOglQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy4KJiM0MzsgKiBAb3B0c19fc3o6CVNpemUgb2YgdGhlIG9wdHMgc3RydWN0LgomIzQzOyAqIEBlcnJfX3VuaW5pdDoJSW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICoKJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeiwKJiM0MzsJCSBpbnQgKmVycl9fdW5pbml0KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cAomIzQzOwkgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvCiYjNDM7CSAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpewomIzQzOwkJLmZhbWlseSA9IFJFQURfT05DRShvcHRzLSZndDtmYW1pbHkpLAomIzQzOwkJLnR5cGUgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7dHlwZSksCiYjNDM7CQkucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cHJvdG9jb2wpLAomIzQzOwkJLnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKG9wdHNfY29weS5yZXNlcnZlZCkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUICZhbXA7JmFtcDsgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikgewomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQICZhbXA7JmFtcDsgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3MgPSBremFsbG9jX29iaigqa3MpOwomIzQzOwlpZiAoIWtzKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSwKJiM0MzsJICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpCiYjNDM7CSAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGNhbGxlci4KJiM0MzsJICovCiYjNDM7CWVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsCiYjNDM7CQkJICAmYW1wO2tzLSZndDtzb2NrKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGOwomIzQzOwlrcy0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLOwomIzQzOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtrcy0mZ3Q7dXNhZ2UsIDEpOwomIzQzOwlwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIGtzOwomIzQzOwomIzQzO2Vycl9mcmVlOgomIzQzOwlrZnJlZShrcyk7CiYjNDM7ZXJyX291dDoKJiM0MzsJcHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4KJiM0MzsgKiBAYWRkcjoJUG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQGFkZHJfX3N6OglTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLgomIzQzOyAqCiYjNDM7ICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkCiYjNDM7ICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLAomIzQzOwkJCQkgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLAomIzQzOwkJCQkgIHUzMiBhZGRyX19zeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhOwomIzQzOwlpbnQgYWRkcmxlbjsKJiM0MzsKJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi8KJiM0MzsJbWVtY3B5KCZhbXA7c2EsIGFkZHIsIHNpemVvZigqYWRkcikpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNhLnNzX2ZhbWlseSkgewomIzQzOwljYXNlIEFGX0lORVQ6CiYjNDM7CQlhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiYjNDM7CQlicmVhazsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKJiM0MzsJY2FzZSBBRl9JTkVUNjoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChrcy0mZ3Q7c29jaywgJmFtcDtzYSwgYWRkcmxlbiwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGEKJiM0MzsgKgl0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IKJiM0MzsgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2tzLSZndDt1c2FnZSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIGtzOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqIEBrczoJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS4KJiM0MzsgKgomIzQzOyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYQomIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3MtJmd0O3VzYWdlKSkgewomIzQzOwkJSU5JVF9SQ1VfV09SSygmYW1wO2tzLSZndDtyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTsKJiM0MzsJCXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsICZhbXA7a3MtJmd0O3J3b3JrKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpCiYjNDM7ewomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7fQomIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOgkJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLgomIzQzOyAqIEBkYXRhOglQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuCiYjNDM7ICogQGRhdGFfX3N6OglTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuCiYjNDM7ICoKJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcAomIzQzOyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwKJiM0MzsJCQkgICAgICAgdTMyIGRhdGFfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsCiYjNDM7CQkuaW92X2xlbiA9IGRhdGFfX3N6LAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogRWFybHkgY2hlY2sgZm9yIFVEUC4gRXhhY3QgbGltaXRzIGVuZm9yY2VkIGJ5IGtlcm5lbF9zZW5kbXNnKCkuICovCiYjNDM7CWlmIChkYXRhX19zeiAmZ3Q7IElQX01BWF9NVFUpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZiAoY3VycmVudC0mZ3Q7aW5fYnBmX2tzb2NrX3NlbmQpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwljdXJyZW50LSZndDtpbl9icGZfa3NvY2tfc2VuZCA9IHRydWU7CiYjNDM7CXJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLSZndDtzb2NrLCAmYW1wO21zZywgJmFtcDtpb3YsIDEsIGRhdGFfX3N6KTsKJiM0MzsJY3VycmVudC0mZ3Q7aW5fYnBmX2tzb2NrX3NlbmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmNfZW5kX2RlZnMoKTsKJiM0MzsKJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcykKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7CiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzOwkuc2V0ID0gJmFtcDtrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfc2VuZCwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQomIzQzO3sKJiM0MzsJaWYgKCFidGZfaWRfc2V0OF9jb250YWlucygmYW1wO2tzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fAomIzQzOwkgICAgcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwgfHwKJiM0MzsJICAgIHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FQUNDRVM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7CiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzOwkuc2V0ID0gJmFtcDtrc29ja19rZnVuY19idGZfaWRzLAomIzQzOwkuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlciwKJiM0Mzt9OwomIzQzOwomIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcykKJiM0MztCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spCiYjNDM7QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpCiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYnBmX2tzb2NrX2tmdW5jX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHsKJiM0MzsJCXsKJiM0MzsJCQkuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLAomIzQzOwkJCS5rZnVuY19idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMV0sCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwKJiM0MzsJCQkJCSZhbXA7a3NvY2tfaW5pdF9rZnVuY19zZXQpOwomIzQzOwlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO2tzb2NrX2tmdW5jX3NldCk7CiYjNDM7CXJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycywKJiM0MzsJCQkJCQkgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSwKJiM0MzsJCQkJCQkgIFRISVNfTU9EVUxFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggNjNjNjlhMGZhNzRlMS4uYzc0MjdkZDRkZDUyMyAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuYwpAQCAtMjExNSwyNyAmIzQzOzIxMTUsMzEgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKICAqCWluY2x1ZGUgdGhlIC1FSU5QUk9HUkVTUyBzdGF0dXMgZm9yIHN1Y2ggc29ja2V0cy4KICAqLwogCiYjNDM7aW50IF9fc3lzX2Nvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJCSBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtjb25uZWN0KHNvY2ssCiYjNDM7CQkJCSAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgYWRkcmxlbiwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAogCQkgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JaW50IGVycjsKIAogCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTsKLQlpZiAoIXNvY2spIHsKLQkJZXJyID0gLUVOT1RTT0NLOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPQotCSAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CiYjNDM7CWlmICghc29jaykKJiM0MzsJCXJldHVybiAtRU5PVFNPQ0s7CiAKLQllcnIgPSBSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAotCQkJCQkgICAgYWRkcmxlbiwgc29jay0mZ3Q7ZmlsZS0mZ3Q7Zl9mbGFncyB8IGZpbGVfZmxhZ3MpOwotb3V0OgotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLAomIzQzOwkJCQkgICAgc29jay0mZ3Q7ZmlsZS0mZ3Q7Zl9mbGFncyB8IGZpbGVfZmxhZ3MpOwogfQogCiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yZGI4OWU5YzAxODZmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYwpAQCAtMCwwICYjNDM7MSwyMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3Byb2dzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0d29ya19oZWxwZXJzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfYmFzaWMuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX3JlY3Vyc2lvbi5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2Jhc2ljX25zJiMzNDsKJiM0MzsjZGVmaW5lIE5TX0xTTV9SRUNVUlNJT05fVEVTVCAmIzM0O2tzb2NrX2xzbV9yZWN1cnNpb25fbnMmIzM0OwomIzQzOyNkZWZpbmUgTE9PUEJBQ0tfSVAgJiMzNDsxMjcuMC4wLjEmIzM0OwomIzQzOyNkZWZpbmUgUkVDVl9QT1JUIDc3NzcKJiM0MzsjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNQomIzQzOwomIzQzO3N0cnVjdCBrc29ja190ZXN0X2VudiB7CiYjNDM7CWNvbnN0IGNoYXIgKm5ldG5zOwomIzQzOwlib29sIG5ldG5zX2NyZWF0ZWQ7CiYjNDM7CXN0cnVjdCBuc3Rva2VuICpuc3Rva2VuOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJaW50IHJmZDsKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYsIGNvbnN0IGNoYXIgKm5ldG5zKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWV2YWwgdHY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7CiYjNDM7CWVudi0mZ3Q7bmV0bnMgPSBuZXRuczsKJiM0MzsJZW52LSZndDtyZmQgPSAtMTsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIG5ldG5zKTsKJiM0MzsJZW52LSZndDtuZXRuc19jcmVhdGVkID0gdHJ1ZTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLW5ldCAlcyBsaW5rIHNldCBsbyB1cCYjMzQ7LCBuZXRucyk7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7bnN0b2tlbiA9IG9wZW5fbmV0bnMobmV0bnMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZW52LSZndDtuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoZW52LSZndDtyZmQsICYjMzQ7cmVjZWl2ZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllbnYtJmd0O2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWVudi0mZ3Q7YWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApOwomIzQzOwllbnYtJmd0O2FkZHIuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpOwomIzQzOwomIzQzOwllcnIgPSBiaW5kKGVudi0mZ3Q7cmZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtlbnYtJmd0O2FkZHIsIHNpemVvZihlbnYtJmd0O2FkZHIpKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JpbmQgcmVjZWl2ZXImIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXR2LnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUM7CiYjNDM7CXR2LnR2X3VzZWMgPSAwOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGVudi0mZ3Q7cmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwgc2l6ZW9mKHR2KSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXQgcmN2dGltZW8mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChlbnYtJmd0O3JmZCAmZ3Q7PSAwKSB7CiYjNDM7CQljbG9zZShlbnYtJmd0O3JmZCk7CiYjNDM7CQllbnYtJmd0O3JmZCA9IC0xOwomIzQzOwl9CiYjNDM7CWlmIChlbnYtJmd0O25zdG9rZW4pIHsKJiM0MzsJCWNsb3NlX25ldG5zKGVudi0mZ3Q7bnN0b2tlbik7CiYjNDM7CQllbnYtJmd0O25zdG9rZW4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChlbnYtJmd0O25ldG5zX2NyZWF0ZWQpIHsKJiM0MzsJCVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSYjMzQ7LCBuZXRucyk7CiYjNDM7CQllbnYtJmd0O25ldG5zX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpCiYjNDM7ewomIzQzOwlpZiAoZW52LSZndDtyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGVudi0mZ3Q7cmZkKTsKJiM0MzsJaWYgKGVudi0mZ3Q7bnN0b2tlbikKJiM0MzsJCWNsb3NlX25ldG5zKGVudi0mZ3Q7bnN0b2tlbik7CiYjNDM7CWlmIChlbnYtJmd0O25ldG5zX2NyZWF0ZWQpIHsKJiM0MzsJCVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSYjMzQ7LCBlbnYtJmd0O25ldG5zKTsKJiM0MzsJCWVudi0mZ3Q7bmV0bnNfY3JlYXRlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtzb2NrX2Fzc2VydF9yZWN2KHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52LCBjb25zdCBjaGFyICpkYXRhLAomIzQzOwkJCSAgICAgIHNpemVfdCBkYXRhX3N6KQomIzQzO3sKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwltZW1zZXQoZW52LSZndDtidWYsIDAsIHNpemVvZihlbnYtJmd0O2J1ZikpOwomIzQzOwluID0gcmVjdmZyb20oZW52LSZndDtyZmQsIGVudi0mZ3Q7YnVmLCBzaXplb2YoZW52LSZndDtidWYpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEobiwgZGF0YV9zeiwgJiMzNDtyZWN2ZnJvbSBsZW4mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CUFTU0VSVF9NRU1FUShlbnYtJmd0O2J1ZiwgZGF0YSwgZGF0YV9zeiwgJiMzNDtwYXlsb2FkIG1hdGNoJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrc29ja19zZXR1cF9jdHgoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX2JlMzIgKmlwdjRfcmVtb3RlLAomIzQzOwkJCSAgICBfX3UxNiAqcmVtb3RlX3BvcnQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7CiYjNDM7CWludCBlcnIsIHBmZDsKJiM0MzsKJiM0MzsJKmlwdjRfcmVtb3RlID0gaW5ldF9hZGRyKExPT1BCQUNLX0lQKTsKJiM0MzsJKnJlbW90ZV9wb3J0ID0gUkVDVl9QT1JUOwomIzQzOwomIzQzOwlwZmQgPSBicGZfcHJvZ3JhbV9fZmQocHJvZyk7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7a3NvY2tfc2V0dXAgcnVuJiMzNDspKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtrc29ja19zZXR1cCByZXR2YWwmIzM0OykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IGtzb2NrX2Jhc2ljICpza2VsOwomIzQzOwlpbnQgZXJyLCBwZmQ7CiYjNDM7CiYjNDM7CXNrZWwgPSBrc29ja19iYXNpY19fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW4mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGtzb2NrX2Jhc2ljX19sb2FkKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbCBsb2FkJiMzNDspKSB7CiYjNDM7CQlrc29ja19iYXNpY19fZGVzdHJveShza2VsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKCZhbXA7ZW52LCBOU19URVNUKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUga3NvY2sgKi8KJiM0MzsJaWYgKCFrc29ja19zZXR1cF9jdHgoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfc2V0dXAsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtpcHY0X3JlbW90ZSwKJiM0MzsJCQkgICAgICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtyZW1vdGVfcG9ydCkpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogUnVuIHRoZSBzZW5kIFNZU0NBTEwgcHJvZyAqLwomIzQzOwlwZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfc2VuZCk7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7a3NvY2tfc2VuZCBydW4mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CWlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKSwKJiM0MzsJCSAgICAgICAmIzM0O3NlbmRtc2cgYnl0ZXMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovCiYjNDM7CWtzb2NrX2Fzc2VydF9yZWN2KCZhbXA7ZW52LCBza2VsLSZndDtkYXRhLSZndDtzZW5kX2RhdGEsCiYjNDM7CQkJICBzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKSk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJa3NvY2tfdGVzdF9lbnZfY2xlYW51cCgmYW1wO2Vudik7CiYjNDM7CWtzb2NrX2Jhc2ljX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3JlY3Vyc2lvbih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IGtzb2NrX3JlY3Vyc2lvbiAqc2tlbDsKJiM0MzsJY2hhciB0cmlnZ2VyID0gJiMzOTt4JiMzOTs7CiYjNDM7CWludCB0ZmQgPSAtMTsKJiM0MzsJaW50IGVycjsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlza2VsID0ga3NvY2tfcmVjdXJzaW9uX19vcGVuKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWwgb3BlbiYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0ga3NvY2tfcmVjdXJzaW9uX19sb2FkKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbCBsb2FkJiMzNDspKSB7CiYjNDM7CQlrc29ja19yZWN1cnNpb25fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cCgmYW1wO2VudiwgTlNfTFNNX1JFQ1VSU0lPTl9URVNUKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovCiYjNDM7CWlmICgha3NvY2tfc2V0dXBfY3R4KHNrZWwtJmd0O3Byb2dzLmtzb2NrX3NldHVwLCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7aXB2NF9yZW1vdGUsCiYjNDM7CQkJICAgICAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7cmVtb3RlX3BvcnQpKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfc2VuZG1zZyBmcm9tIHVzZXJzcGFjZSAqLwomIzQzOwlza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfc2VuZG1zZyA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLSZndDtwcm9ncy5rc29ja19zb2NrZXRfc2VuZG1zZyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfc2VuZG1zZywKJiM0MzsJCQkgICAmIzM0O2F0dGFjaCBzb2NrZXRfc2VuZG1zZyBsc20mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHRmZCwgJiMzNDt0cmlnZ2VyIHNvY2tldCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHJpZ2dlcl9zZW5kID0gMTsKJiM0MzsJbiA9IHNlbmR0byh0ZmQsICZhbXA7dHJpZ2dlciwgc2l6ZW9mKHRyaWdnZXIpLCAwLAomIzQzOwkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7ZW52LmFkZHIsIHNpemVvZihlbnYuYWRkcikpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RhcmdldF9waWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RyaWdnZXJfc2VuZCA9IDA7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIHNpemVvZih0cmlnZ2VyKSwgJiMzNDt0cmlnZ2VyIHNlbmR0byYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqLwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlY19jb3VudCwgMiwKJiM0MzsJCSAgICAgICAmIzM0O3NvY2tldF9zZW5kbXNnIHJlY3Vyc2lvbiBjb3VudCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7cmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSwKJiM0MzsJCSAgICAgICAmIzM0O3JlY3Vyc2l2ZSBzZW5kIHN0YXR1cyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7cmVjX2tmdW5jX3JldHNbMV0sCiYjNDM7CQkgICAgICAgc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSksICYjMzQ7b3V0ZXIgc2VuZCBieXRlcyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJa3NvY2tfYXNzZXJ0X3JlY3YoJmFtcDtlbnYsIHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSwKJiM0MzsJCQkgIHNpemVvZihza2VsLSZndDtkYXRhLSZndDtzZW5kX2RhdGEpKTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlpZiAodGZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0ZmQpOwomIzQzOwlrc29ja190ZXN0X2Vudl9jbGVhbnVwKCZhbXA7ZW52KTsKJiM0MzsJa3NvY2tfcmVjdXJzaW9uX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjViOWM2Y2MzMDM5MjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9wcm9ncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX3dxLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCBrc29ja193cSAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2tzb2NrX3dxIG9wZW4gYW5kIGxvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O2tzb2NrX3dxX3N0YXJ0IHJldHZhbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3aGlsZSAoIV9fYXRvbWljX2xvYWRfbigmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpCiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLAomIzQzOwkJICAmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrc29ja193cV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE4OWIwZmMxNTc3MDEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYwpAQCAtMCwwICYjNDM7MSwzNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2VuZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgc2VuZCA9IC0xOwomIzQzOwomIzQzOwl2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpOwomIzQzOwlpZiAoIXYpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3B0cl94Y2hnKCZhbXA7di0mZ3Q7Y3R4LCBOVUxMKTsKJiM0MzsJaWYgKCFrcykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlzZW5kID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpOwomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7CXJldHVybiBzZW5kOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmMzMjAzMjIwYTJkMGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKQEAgLTAsMCAmIzQzOzEsOTkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSAomIzQzOyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgU09DS19TVFJFQU0JMQomIzQzOyNkZWZpbmUgU09DS19ER1JBTQkyCiYjNDM7I2RlZmluZSBJUFBST1RPX1RDUAk2CiYjNDM7I2RlZmluZSBJUFBST1RPX1VEUAkxNwomIzQzOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywKJiM0MzsJCQkJICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07CiYjNDM7aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkciwKJiM0MzsJCSAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3NvY2tfY3R4X2luc2VydChzdHJ1Y3QgYnBmX2tzb2NrICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKm9sZDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KSB7CiYjNDM7CQlicGZfa3NvY2tfcmVsZWFzZShjdHgpOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgY3R4KTsKJiM0MzsJaWYgKG9sZCkgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uob2xkKTsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHbG9iYWxzIGZvciBwYXNzaW5nIGNvbmZpZyBmcm9tIHVzZXJzcGFjZSAqLwomIzQzO19fYmUzMiBpcHY0X3JlbW90ZTsKJiM0MztfX3UxNiByZW1vdGVfcG9ydDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSAmIzM0O2hlbGxvIGZyb20gYnBmIGtzb2NrJiMzNDs7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZG9fa3NvY2tfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTsKJiM0MzsJdW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNOwomIzQzOwljcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQOwomIzQzOwomIzQzOwlrcyA9IGJwZl9rc29ja19jcmVhdGUoJmFtcDtjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgJmFtcDtlcnIpOwomIzQzOwlpZiAoIWtzKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTsKJiM0MzsJYWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCAmYW1wO2FkZHIsIHNpemVvZihhZGRyKSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVFWElTVCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTJmNTIwMDk0M2UzNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYwpAQCAtMCwwICYjNDM7MSw2OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7aW50IHRhcmdldF9waWQ7CiYjNDM7aW50IHRyaWdnZXJfc2VuZDsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50OwomIzQzO2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBkb19rc29ja19zZXR1cCgpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhrc29ja19zb2NrZXRfc2VuZG1zZywgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAomIzQzOwkgICAgIGludCBzaXplLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwlpbnQga2Z1bmNfcmV0OwomIzQzOwomIzQzOwlpZiAocmV0IHx8ICF0cmlnZ2VyX3NlbmQgfHwgcGlkICE9IHRhcmdldF9waWQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpOwomIzQzOwlpZiAoIXYpIHsKJiM0MzsJCWtmdW5jX3JldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrcyA9IE5VTEw7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXRtcCA9IHYtJmd0O2N0eDsKJiM0MzsJaWYgKHRtcCkKJiM0MzsJCWtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIWtzKSB7CiYjNDM7CQlrZnVuY19yZXQgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2Z1bmNfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpOwomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgJmFtcDsgMV0gPSBrZnVuY19yZXQ7CiYjNDM7CV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7cmVjX2NvdW50LCAxKTsKJiM0MzsKJiM0MzsJaWYgKGtmdW5jX3JldCAhPSAtRUJVU1kpCiYjNDM7CQl0cmlnZ2VyX3NlbmQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKQEAgLTAsMCAmIzQzOzEsNjIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2Vycm5vLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBrc29ja193cV92YWx1ZSB7CiYjNDM7CXN0cnVjdCBicGZfd3Egd29yazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCB1MzIpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7CiYjNDM7fSB3b3JrX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztpbnQgY3JlYXRlX2VycjsKJiM0Mzt1MzIgY2FsbGJhY2tfZG9uZTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0gewomIzQzOwkJLmZhbWlseSA9IEFGX0lORVQsCiYjNDM7CQkudHlwZSA9IFNPQ0tfREdSQU0sCiYjNDM7CQkucHJvdG9jb2wgPSBJUFBST1RPX1VEUCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlrcyA9IGJwZl9rc29ja19jcmVhdGUoJmFtcDtvcHRzLCBzaXplb2Yob3B0cyksICZhbXA7ZXJyKTsKJiM0MzsJaWYgKGtzKQomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uoa3MpOwomIzQzOwljcmVhdGVfZXJyID0gZXJyOwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2NhbGxiYWNrX2RvbmUsIDEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBrc29ja193cV9zdGFydCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlOwomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJdmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7d29ya19tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWx1ZSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwllcnIgPSBicGZfd3FfaW5pdCgmYW1wO3ZhbHVlLSZndDt3b3JrLCAmYW1wO3dvcmtfbWFwLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CWVyciA9IGJwZl93cV9zZXRfY2FsbGJhY2soJmFtcDt2YWx1ZS0mZ3Q7d29yaywga3NvY2tfd3FfY2FsbGJhY2ssIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIGJwZl93cV9zdGFydCgmYW1wO3ZhbHVlLSZndDt3b3JrLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgS2VybmVsIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgYGJwZl9rc29ja2AgZmVhdHVyZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlIGFuZCBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzIGRpcmVjdGx5LiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBuZXcgc2V0IG9mIEJQRiBrZnVuY3M6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYW5kIGBicGZfa3NvY2tfc2VuZGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdG8gd2F0Y2guCgpUaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBhbmQgYG5ldC9zb2NrZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuZXR3b3JraW5nIGNvbnRleHQuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIGFueSBCUEYtcmVsYXRlZCBjaGFuZ2UuIGBDT05GSUdfSU5FVGAgaXMgYWxzbyBleHBlY3RlZCwgYXMgdGhpcyBkZWFscyB3aXRoIGludGVybmV0IHByb3RvY29scy4gV2Ugc2hvdWxkIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCB0aGUgbWFrZWZpbGUsIGl0IHNlZW1zIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LiBgYnBmX2tzb2NrLm9gIGlzIG9ubHkgY29tcGlsZWQgaWYgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgZW5hYmxlZC4gR29vZC4KCkkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmIG5vdy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgYG5ldC9jb3JlL2JwZl9rc29jay5jYCBob2xkcy4gQXNpZGUgZnJvbSB0aGUga2Z1bmNzLCBpdCBhbHNvIGhhcyBga3NvY2tfcmVsZWFzZV93b3JrX2ZuYCBhbmQgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgdGhlc2Uga2VybmVsIHNvY2tldHMuCgpUaGUgYG5ldC9zb2NrZXQuY2AgZmlsZSBpcyBpbnRlcmVzdGluZy4gVGhlIGFkZGl0aW9uIG9mIGBfX3N5c19jb25uZWN0X3NvY2tldGAgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGEgbmV3LCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaW4gdGhlIGtlcm5lbCBpbnRlcmZhY2U7IHRoaXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBsb2dpYy4KCkZpbmFsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgdGhlIGRlcGVuZGVuY2llcyBhZ2FpbiwgYW5kIGNvbmZpcm0gSSYjMzk7bSBub3QgbWlzc2luZyBhbnkuIGBDT05GSUdfSVBWNmAgaXMgYWxzbyB1c2VkIGluIGBicGZfa3NvY2tfY29ubmVjdGAsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbmV4dCBjb25maWcgdG8gY29uc2lkZXIuIEFuZCBJIGFtIGdvaW5nIHRvIHJ1biBhIGBncmVwYCB0byBjaGVjayBpZiBgQ09ORklHX0lORVRgIGlzIHRoZSBvbmx5IG5ldHdvcmsgZGVwZW5kZW5jeS4KCkFscmlnaHQsIHdpdGggdGhpcyBvdmVydmlldywgSSBoYXZlIGEgZ29vZCBmcmFtZXdvcmsgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gVGhpcyBzZWVtcyB0byBiZSBhIHBvd2VyZnVsIGZlYXR1cmUsIG9wZW5pbmcgdXAgbmV3IHBvc3NpYmlsaXRpZXMgZm9yIEJQRi1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTExLS8qKlxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxMjogKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0xMy0gKiBAZmFtaWx5Olx0QWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuXG4tLVxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0xOC0gKi9cbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmg6MTk6c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTIwLVx0X191OCBmYW1pbHk7XG4tLVxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0yNi0vKipcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmg6Mjc6ICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMjgtICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTMwLSAqL1xuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDozMTp1bmlvbiBicGZfa3NvY2tfYWRkciB7XG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTMyLVx0c3RydWN0IHNvY2thZGRyX2luIHNpbjtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwNTMtI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfSU5FVClcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDU0Olx0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGJwZl9rc29ja19zZW5kKCkgKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDU1Olx0dW5zaWduZWRcdFx0XHRpbl9icGZfa3NvY2tfc2VuZDoxO1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwNTYtI2VuZGlmXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ0NzE9QlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NzMtI2lmZGVmIENPTkZJR19JTkVUXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ3NDpCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ3NS0jZW5kaWZcbi0tXG5uZXQvY29yZS9NYWtlZmlsZT00Nz1pZm5lcSAoJChDT05GSUdfSU5FVCksKVxubmV0L2NvcmUvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ5LWVuZGlmXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NTojaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfa3NvY2suaFx1MDAzZVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwLS8qKlxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjE6ICogc3RydWN0IGJwZl9rc29jayAtIHJlZmNvdW50ZWQgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjItICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI1LSAqL1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjY6c3RydWN0IGJwZl9rc29jayB7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yNy1cdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzI9c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMzLXtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjM0Olx0c3RydWN0IGJwZl9rc29jayAqa3MgPVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzU6XHRcdGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzYtXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNDAtXG5uZXQvY29yZS9icGZfa3NvY2suYzo0MTpzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXG5uZXQvY29yZS9icGZfa3NvY2suYy00Mi17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9NTA9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTUyLS8qKlxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NTM6ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG5uZXQvY29yZS9icGZfa3NvY2suYy01NC0gKlxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTU3LSAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG5uZXQvY29yZS9icGZfa3NvY2suYzo1ODogKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG5uZXQvY29yZS9icGZfa3NvY2suYy01OS0gKlxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTY0LSAqXG5uZXQvY29yZS9icGZfa3NvY2suYzo2NTogKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjYtICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjgtICovXG5uZXQvY29yZS9icGZfa3NvY2suYzo2OTpfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbm5ldC9jb3JlL2JwZl9rc29jay5jOjcwOmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEtXHRcdCBpbnQgKmVycl9fdW5pbml0KVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzIte1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6NzM6XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjc0Olx0c3RydWN0IGJwZl9rc29jayAqa3M7XG5uZXQvY29yZS9icGZfa3NvY2suYy03NS1cdGludCBlcnI7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODEtXHQgKi9cbm5ldC9jb3JlL2JwZl9rc29jay5jOjgyOlx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTgzLVx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy04Ni1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjg3Olx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtODgtXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtOTEtXG5uZXQvY29yZS9icGZfa3NvY2suYzo5MjpcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTkzLVx0XHQuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlZmFtaWx5KSxcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNDktLyoqXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNTA6ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTUxLSAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTYxLSAqL1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTYyOl9fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE2MzpcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNjQtXHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNjgtXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNjk6XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE3MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTE5NC0vKipcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE5NTogKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTk2LSAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTE5OS0gKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjAwOiAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwMS0gKi9cbm5ldC9jb3JlL2JwZl9rc29jay5jOjIwMjpfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwMy17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjA5LS8qKlxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjEwOiAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMTEtICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMTUtICovXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMTY6X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIxNy17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIzLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI0Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIyNS17XG5uZXQvY29yZS9icGZfa3NvY2suYzoyMjY6XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjctfVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI4OkNGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjktXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMzAtLyoqXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMzE6ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMzItICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjQwLSAqL1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjQxOl9fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI0Mi1cdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI1Mi1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI1MzpcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjU0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjU5LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjYwOlx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjEtXHRcdHJldHVybiAtRUJVU1k7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjItXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNjM6XHRjdXJyZW50LVx1MDAzZWluX2JwZl9rc29ja19zZW5kID0gdHJ1ZTtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI2NC1cdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG5uZXQvY29yZS9icGZfa3NvY2suYzoyNjU6XHRjdXJyZW50LVx1MDAzZWluX2JwZl9rc29ja19zZW5kID0gZmFsc2U7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjYtXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjcyPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjczOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNzQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTI4Mj1CVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjg0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjg1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfc2VuZCwgS0ZfU0xFRVBBQkxFKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg2LUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODctXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODg6c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg5LXtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz0yOTg9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMDAtXHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwMTpcdC5maWx0ZXIgPSBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyLFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAyLX07XG5uZXQvY29yZS9icGZfa3NvY2suYy0zMDMtXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDQ6QlRGX0lEX0xJU1QoYnBmX2tzb2NrX2R0b3JfaWRzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzA1OkJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNjpCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwNy1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwODpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA5LXtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMxMC1cdGludCByZXQ7XG5uZXQvY29yZS9icGZfa3NvY2suYzozMTE6XHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7XG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTItXHRcdHtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxMzpcdFx0XHQuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE0Olx0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMV0sXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTUtXHRcdH0sXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIzLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMyNDpcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMyNTpcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyNi1cdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMjgtXG5uZXQvY29yZS9icGZfa3NvY2suYzozMjk6bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYz0xNjU9dm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jLTIxMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmM6MjEyOlx0LyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYy0yMTMtXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWNfY291bnQsIDIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmM9MTg9aW50IGtzb2NrX3NlbmQodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jLTIwLVx0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmM6MjE6XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jLTIyLVx0aW50IHNlbmQgPSAtMTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYy0zMS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jOjMyOlx0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jOjMzOlx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMtMzQtXHRyZXR1cm4gc2VuZDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MTY6c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTE3LVx0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MTg6aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xOS1cdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MjA6c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyMTp2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MjI6aW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0yMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD0yND1zdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjI1Olx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMjYtfTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg9MzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKmtzb2NrX2N0eF92YWx1ZV9sb29rdXAodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NDI6c3RhdGljIGlubGluZSBpbnQga3NvY2tfY3R4X2luc2VydChzdHJ1Y3QgYnBmX2tzb2NrICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDMte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTQ0LVx0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ1Olx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTQ2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC00OC1cdGlmICghdikge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ5Olx0XHRicGZfa3NvY2tfcmVsZWFzZShjdHgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTUwLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNTQtXHRpZiAob2xkKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NTU6XHRcdGJwZl9rc29ja19yZWxlYXNlKG9sZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNTYtXHRcdHJldHVybiAtRUVYSVNUO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD02OD1zdGF0aWMgaW5saW5lIGludCBkb19rc29ja19zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTY5LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MDpcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MTpcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MjpcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTczLVx0aW50IGVyciA9IDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTc4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjc5Olx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcdTAwMjZlcnIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTgwLVx0aWYgKCFrcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6ODc6XHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC04OC1cdGlmIChlcnIpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo4OTpcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTkwLVx0XHRyZXR1cm4gZXJyO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYz0yNz1pbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMtMzAtXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmM6MzE6XHRzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy0zMi1cdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jLTQ3LVx0aWYgKHRtcClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYzo0ODpcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jLTQ5LVx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy01NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYzo1NjpcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYzo1NzpcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy01OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYz0yNT1zdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMjYte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6Mjc6XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHMgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yOC1cdFx0LmZhbWlseSA9IEFGX0lORVQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzEtXHR9O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6MzI6XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTMzLVx0aW50IGVyciA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0zNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjM1Olx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM2LVx0aWYgKGtzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6Mzc6XHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM4LVx0Y3JlYXRlX2VyciA9IGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkyMwoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA3MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBLc29jayBGZWF0dXJlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIHRoZSBgYnBmX2tzb2NrYCBmZWF0dXJlLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb24gb2YgQlBGIHByb2dyYW1zIHdpdGgga2VybmVsIHNvY2tldHMsIHdoaWNoIHJlcHJlc2VudHMgYSBzaWduaWZpY2FudCBhZGRpdGlvbiBpbiB0ZXJtcyBvZiBhdHRhY2sgc3VyZmFjZSBhbmQga2VybmVsIGZ1bmN0aW9uYWxpdHkgZXhwb3N1cmUuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYCBmbGFnZ2VkLiBUaGVzZSBhcmUgb2J2aW91c2x5IGVzc2VudGlhbC4gSSBicmllZmx5IGNvbnNpZGVyZWQgb3RoZXIgY29uZmlncyBsaWtlIGBDT05GSUdfQ1JZUFRPYCwgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl0IGFzIHVucmVsYXRlZCB0byB0aGUga3NvY2sgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19JUFY2YCBpcyBhbHNvIHJlbGV2YW50IGJlY2F1c2UgaXQmIzM5O3MgdXNlZCBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBzbyBpdCBzaG91bGQgZGVmaW5pdGVseSBiZSBpbmNsdWRlZCBpbiBvdXIgZnV6emluZyBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGUgbWF4aW11bSBjb3ZlcmFnZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdHMgdXNlIGluIGBuZXQvY29yZS9icGZfa3NvY2suY2A6IElQdjYgaXMgZW5hYmxlZCB2aWEgdGhlIGBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgbWFjcm8uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQuIEkmIzM5O3ZlIGdvdDoKCiogICBgYnBmX2tzb2NrX2NyZWF0ZWAKKiAgIGBicGZfa3NvY2tfY29ubmVjdGAKKiAgIGBicGZfa3NvY2tfYWNxdWlyZWAKKiAgIGBicGZfa3NvY2tfcmVsZWFzZWAKKiAgIGBicGZfa3NvY2tfc2VuZGAKKiAgIGBfX3N5c19jb25uZWN0X3NvY2tldGAKCkkgY29uc2lkZXJlZCB3aGV0aGVyIGBrc29ja19yZWxlYXNlX3dvcmtfZm5gIHdhcnJhbnRzIGZ1enppbmcsIGJ1dCBpdCBzZWVtcyB0byBiZSBqdXN0IGEgd3JhcHBlciBhcm91bmQgYHNvY2tfcmVsZWFzZWAgYW5kIGBrZnJlZWAsIG1vc3RseSBqdXN0IGNhbGxpbmcgZXhpc3RpbmcgZnVuY3Rpb25zLiBJdHMgcHJpbWFyeSBmdW5jdGlvbiBpcyBhIFJDVSB3b3JrIGZ1bmN0aW9uLCBzbyB3aGlsZSBpbnRlcmVzdGluZywgdGhlIHByaW1hcnkgbG9naWMgaXMgbGlrZWx5IHRvIGJlIGVsc2V3aGVyZSBpbiBleGlzdGluZyBrZnVuY3MsIHNvIEkmIzM5O20gbGVzcyBpbmNsaW5lZCB0byBoZWF2aWx5IGZvY3VzIG9uIGl0LiBBZGRpdGlvbmFsbHksIEkgY29uZmlybWVkIHRoYXQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBpc24mIzM5O3Qgc3RhdGljLCBzbyBpdCYjMzk7cyBkaXJlY3RseSBhY2Nlc3NpYmxlLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlLgoKRXNzZW50aWFsbHksIEkgc2VlIGBfX3N5c19jb25uZWN0X3NvY2tldGAgYXMgYSBjZW50cmFsIHBvaW50LCBnaXZlbiBpdHMgY3JpdGljYWwgcm9sZSBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgIGFuZCBgX19zeXNfY29ubmVjdF9maWxlYC4KClRoZXJlZm9yZSwgdGhlIHVwZGF0ZWQgbGlzdCBvZiB0YXJnZXRzIGFuZCBjb25maWdzIGFyZToKCioqRm9jdXMgU3ltYm9sczoqKgoKKiAgIGBicGZfa3NvY2tfY3JlYXRlYAoqICAgYGJwZl9rc29ja19jb25uZWN0YAoqICAgYGJwZl9rc29ja19hY3F1aXJlYAoqICAgYGJwZl9rc29ja19yZWxlYXNlYAoqICAgYGJwZl9rc29ja19zZW5kYAoqICAgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YAoKKipDb25maWdzOioqCgoqICAgYENPTkZJR19CUEZfU1lTQ0FMTGAKKiAgIGBDT05GSUdfSU5FVGAKKiAgIGBDT05GSUdfSVBWNmAKClRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IGBicGZfa3NvY2tgIGFkZHMgYnJhbmQgbmV3IGtmdW5jcyBhbmQgbmV3IGVudHJ5cG9pbnRzIHdpdGhpbiB0aGUga2VybmVsIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLiBUaGV5IGFyZSwgaW4gZWZmZWN0LCBuZXcgd2F5cyB0byBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzIHRocm91Z2ggQlBGIHByb2dyYW1zLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIG5ldyBmZWF0dXJlLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7X19zeXNfY29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O19fc3lzX2Nvbm5lY3Rfc29ja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGZlYXR1cmUgYGJwZl9rc29ja2AgdGhhdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cyBmb3IgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jcyBhbmQgdGhlIG5ld2x5IGV4dHJhY3RlZCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGhlbHBlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQyOjI0LjcyNDYwMjg2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjE0MzMzMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcIl9fc3lzX2Nvbm5lY3Rfc29ja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgZmVhdHVyZSBgYnBmX2tzb2NrYCB0aGF0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgQVBJIGVudHJ5cG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcga2Z1bmNzIGFuZCB0aGUgbmV3bHkgZXh0cmFjdGVkIGBfX3N5c19jb25uZWN0X3NvY2tldGAgaGVscGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNzo0MjoyNC43MjQ2MTE1ODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjUzOTE3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkN2Y4MmZhMmUwNjA1NTdkMDMxNjljNWY2Nzc2OGI0ZDg0MDMwMzYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTc6NDI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2JcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxcbkBAIC0wLDAgKzEsMzYgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaWZuZGVmIF9CUEZfS1NPQ0tfSFxcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW42LmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcXG4rICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4rICogQHR5cGU6XFx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cXG4rICogQHByb3RvY29sOlxcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXFxuKyAqXFx0XFx0b2YgdGhlIGdpdmVuIHR5cGUuXFxuKyAqIEByZXNlcnZlZDpcXHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XFxuK1xcdF9fdTggZmFtaWx5O1xcbitcXHRfX3U4IHR5cGU7XFxuK1xcdF9fdTggcHJvdG9jb2w7XFxuK1xcdF9fdTggcmVzZXJ2ZWQ7XFxuK307XFxuK1xcbisvKipcXG4rICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cXG4rICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuXFxuKyAqL1xcbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuaW5kZXggMzczYmNjMDU5OGQxMC4uMzM0ODQ2ZGY5MjM4MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG5AQCAtMTA1MCw2ICsxMDUwLDEwIEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuIFxcdC8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBldmVudGZkX3NpZ25hbCgpICovXFxuIFxcdHVuc2lnbmVkXFx0XFx0XFx0aW5fZXZlbnRmZDoxO1xcbiAjZW5kaWZcXG4rI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19JTkVUKVxcbitcXHQvKiBSZWN1cnNpb24gcHJldmVudGlvbiBmb3IgYnBmX2tzb2NrX3NlbmQoKSAqL1xcbitcXHR1bnNpZ25lZFxcdFxcdFxcdGluX2JwZl9rc29ja19zZW5kOjE7XFxuKyNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NQVV9QQVNJRFxcbiBcXHR1bnNpZ25lZFxcdFxcdFxcdHBhc2lkX2FjdGl2YXRlZDoxO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG5pbmRleCAyYThkN2IxNGYxZDExLi40OGYxZWI4MTkzZGVhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xcbiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7XFxuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdFxcdCAgICAgaW50IGFkZHJsZW4pO1xcbitleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxcbitcXHRcXHRcXHRcXHRpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTtcXG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxcbiBcXHRcXHRcXHQgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpO1xcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGIyNzQwMDRmY2NmZDkuLjExNTRiNWIwYjZhMDUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTQ0NzAsNiArNDQ3MCw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbiAjaWZkZWYgQ09ORklHX0NSWVBUT1xcbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcXG4gI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfSU5FVFxcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXFxuKyNlbmRpZlxcbiBCVEZfU0VUX0VORChyY3VfcHJvdGVjdGVkX3R5cGVzKVxcbiBcXG4gc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlXFxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9NYWtlZmlsZVxcbisrKyBiL25ldC9jb3JlL01ha2VmaWxlXFxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXFxuIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcbitpZm5lcSAoJChDT05GSUdfSU5FVCksKVxcbitvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vXFxuK2VuZGlmXFxuIG9iai0kKENPTkZJR19PRilcXHQrPSBvZl9uZXQub1xcbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cXG4gb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICs9IGRldm1lbS5vXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9rc29jay5jIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjMTk5ODg4NzE5NjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcXG5AQCAtMCwwICsxLDMyOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW42LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IGJwZl9rc29jayAtIHJlZmNvdW50ZWQgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dFxcbisgKiBAc29jazpcXHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxcbisgKiBAdXNhZ2U6XFx0UmVmZXJlbmNlIGNvdW50ZXIuXFxuKyAqIEByd29yazpcXHRSQ1Ugd29yayBmb3IgZGVmZXJyZWQgY2xlYW51cCAoc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXFxuKyAqL1xcbitzdHJ1Y3QgYnBmX2tzb2NrIHtcXG4rXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4rXFx0cmVmY291bnRfdCB1c2FnZTtcXG4rXFx0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xcbitcXG4rXFx0c29ja19yZWxlYXNlKGtzLVxcdTAwM2Vzb2NrKTtcXG4rXFx0a2ZyZWUoa3MpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKVxcbitcXHQgKiBjbGVhcmVkIGN1cnJlbnQtXFx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRCkgXFx1MDAyNlxcdTAwMjYgY3VycmVudC1cXHUwMDNlbnNwcm94eTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKlxcbisgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxcbisgKlxcbisgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXFxuKyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrXFxuKyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzaydzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxcbisgKlxcbisgKiBAb3B0czpcXHRQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy5cXG4rICogQG9wdHNfX3N6OlxcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0LlxcbisgKiBAZXJyX191bmluaXQ6XFx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cXG4rICovXFxuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxcbiticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcXG4rXFx0XFx0IGludCAqZXJyX191bmluaXQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LypcXG4rXFx0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcXG4rXFx0ICogZnJvbSBjdXJyZW50LiBLZXJuZWwgdGhyZWFkcywgaW5jbHVkaW5nIEJQRiB3b3JrcXVldWUgY2FsbGJhY2tzLCBkb1xcbitcXHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cXG4rXFx0ICovXFxuK1xcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKSB7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XFxuK1xcdFxcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlZmFtaWx5KSxcXG4rXFx0XFx0LnR5cGUgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNldHlwZSksXFxuK1xcdFxcdC5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2Vwcm90b2NvbCksXFxuK1xcdFxcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VyZXNlcnZlZCksXFxuK1xcdH07XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuK1xcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2IG9wdHNfY29weS5wcm90b2NvbCAhPSAwKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0a3MgPSBremFsbG9jX29iaigqa3MpO1xcbitcXHRpZiAoIWtzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxcbitcXHQgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMilcXG4rXFx0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0ncyBjYWxsZXIuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBzb2NrX2NyZWF0ZShvcHRzX2NvcHkuZmFtaWx5LCBvcHRzX2NvcHkudHlwZSwgb3B0c19jb3B5LnByb3RvY29sLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZrcy1cXHUwMDNlc29jayk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcbitcXHRrcy1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjtcXG4rXFx0a3MtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza191c2VybG9ja3MgfD0gU09DS19SQ1ZCVUZfTE9DSztcXG4rXFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2a3MtXFx1MDAzZXVzYWdlLCAxKTtcXG4rXFx0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XFxuK1xcdHJldHVybiBrcztcXG4rXFxuK2Vycl9mcmVlOlxcbitcXHRrZnJlZShrcyk7XFxuK2Vycl9vdXQ6XFxuK1xcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxcbisgKiBAa3M6XFx0XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXFxuKyAqIEBhZGRyOlxcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxcbisgKiBAYWRkcl9fc3o6XFx0U2l6ZSBvZiB0aGUgYWRkcmVzcyB1bmlvbi5cXG4rICpcXG4rICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcXG4rXFx0XFx0XFx0XFx0ICB1MzIgYWRkcl9fc3opXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7XFxuK1xcdGludCBhZGRybGVuO1xcbitcXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi9cXG4rXFx0bWVtY3B5KFxcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XFxuK1xcbitcXHRzd2l0Y2ggKHNhLnNzX2ZhbWlseSkge1xcbitcXHRjYXNlIEFGX0lORVQ6XFxuK1xcdFxcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbitcXHRjYXNlIEFGX0lORVQ2OlxcbitcXHRcXHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gX19zeXNfY29ubmVjdF9zb2NrZXQoa3MtXFx1MDAzZXNvY2ssIFxcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gYWNxdWlyZS4gTXVzdCBiZSBhXFxuKyAqXFx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cXG4rICpcXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXFxuK3tcXG4rXFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmtzLVxcdTAwM2V1c2FnZSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4ga3M7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cXG4rICpcXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXFxuKyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcXG4re1xcbitcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UpKSB7XFxuK1xcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNmtzLVxcdTAwM2Vyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTtcXG4rXFx0XFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNmtzLVxcdTAwM2Vyd29yayk7XFxuK1xcdH1cXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxcbit7XFxuK1xcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rfVxcbitDRklfTk9TRUFMKGJwZl9rc29ja19yZWxlYXNlX2R0b3IpO1xcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19zZW5kKCkgLSBTZW5kIGRhdGEgdGhyb3VnaCBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxcbisgKiBAZGF0YTpcXHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXFxuKyAqIEBkYXRhX19zejpcXHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuXFxuKyAqXFxuKyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXFxuKyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuKyAqXFxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICB1MzIgZGF0YV9fc3opXFxuK3tcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBrdmVjIGlvdiA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxcbitcXHRcXHQuaW92X2xlbiA9IGRhdGFfX3N6LFxcbitcXHR9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIEVhcmx5IGNoZWNrIGZvciBVRFAuIEV4YWN0IGxpbWl0cyBlbmZvcmNlZCBieSBrZXJuZWxfc2VuZG1zZygpLiAqL1xcbitcXHRpZiAoZGF0YV9fc3ogXFx1MDAzZSBJUF9NQVhfTVRVKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWYgKGN1cnJlbnQtXFx1MDAzZWluX2JwZl9rc29ja19zZW5kKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0Y3VycmVudC1cXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSB0cnVlO1xcbitcXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy1cXHUwMDNlc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNmlvdiwgMSwgZGF0YV9fc3opO1xcbitcXHRjdXJyZW50LVxcdTAwM2Vpbl9icGZfa3NvY2tfc2VuZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4rXFxuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0ge1xcbitcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4rXFx0LnNldCA9IFxcdTAwMjZrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMsXFxuK307XFxuK1xcbitCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfc2VuZCwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKVxcbitcXG4rc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbit7XFxuK1xcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fFxcbitcXHQgICAgcHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwgfHxcXG4rXFx0ICAgIHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIC1FQUNDRVM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsXFxuK1xcdC5maWx0ZXIgPSBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyLFxcbit9O1xcbitcXG4rQlRGX0lEX0xJU1QoYnBmX2tzb2NrX2R0b3JfaWRzKVxcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXFxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgYnBmX2tzb2NrX2tmdW5jX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7XFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcXG4rXFx0XFx0XFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2tzb2NrX2R0b3JzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuK31cXG4rXFxuK2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpO1xcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5jNzQyN2RkNGRkNTIzIDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC0yMTE1LDI3ICsyMTE1LDMxIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXFxuICAqXFx0aW5jbHVkZSB0aGUgLUVJTlBST0dSRVNTIHN0YXR1cyBmb3Igc3VjaCBzb2NrZXRzLlxcbiAgKi9cXG4gXFxuK2ludCBfX3N5c19jb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcXG4rXFx0XFx0XFx0IGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLFxcbitcXHRcXHRcXHRcXHQgICAgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0ICAgIGFkZHJsZW4sIGZsYWdzKTtcXG4rfVxcbitcXG4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tXFx0aW50IGVycjtcXG4gXFxuIFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4tXFx0aWYgKCFzb2NrKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9UU09DSztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9XFxuLVxcdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIXNvY2spXFxuK1xcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuIFxcbi1cXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWRkcmxlbiwgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbitcXHRcXHRcXHRcXHQgICAgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGI4OWU5YzAxODZmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcXG5AQCAtMCwwICsxLDIzMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF9wcm9ncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwibmV0d29ya19oZWxwZXJzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19iYXNpYy5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19yZWN1cnNpb24uc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBOU19URVNUIFxcXCJrc29ja19iYXNpY19uc1xcXCJcXG4rI2RlZmluZSBOU19MU01fUkVDVVJTSU9OX1RFU1QgXFxcImtzb2NrX2xzbV9yZWN1cnNpb25fbnNcXFwiXFxuKyNkZWZpbmUgTE9PUEJBQ0tfSVAgXFxcIjEyNy4wLjAuMVxcXCJcXG4rI2RlZmluZSBSRUNWX1BPUlQgNzc3N1xcbisjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNVxcbitcXG4rc3RydWN0IGtzb2NrX3Rlc3RfZW52IHtcXG4rXFx0Y29uc3QgY2hhciAqbmV0bnM7XFxuK1xcdGJvb2wgbmV0bnNfY3JlYXRlZDtcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW47XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xcbitcXHRpbnQgcmZkO1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK307XFxuK1xcbitzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudiwgY29uc3QgY2hhciAqbmV0bnMpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRtZW1zZXQoZW52LCAwLCBzaXplb2YoKmVudikpO1xcbitcXHRlbnYtXFx1MDAzZW5ldG5zID0gbmV0bnM7XFxuK1xcdGVudi1cXHUwMDNlcmZkID0gLTE7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIG5ldG5zKTtcXG4rXFx0ZW52LVxcdTAwM2VuZXRuc19jcmVhdGVkID0gdHJ1ZTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtbmV0ICVzIGxpbmsgc2V0IGxvIHVwXFxcIiwgbmV0bnMpO1xcbitcXG4rXFx0ZW52LVxcdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhuZXRucyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihlbnYtXFx1MDAzZW5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVudi1cXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVxcdTAwM2VyZmQsIFxcXCJyZWNlaXZlciBzb2NrZXRcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZW52LVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRlbnYtXFx1MDAzZWFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKExPT1BCQUNLX0lQKTtcXG4rXFx0ZW52LVxcdTAwM2VhZGRyLnNpbl9wb3J0ID0gaHRvbnMoUkVDVl9QT1JUKTtcXG4rXFxuK1xcdGVyciA9IGJpbmQoZW52LVxcdTAwM2VyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2ZW52LVxcdTAwM2VhZGRyLCBzaXplb2YoZW52LVxcdTAwM2VhZGRyKSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJpbmQgcmVjZWl2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dHYudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQztcXG4rXFx0dHYudHZfdXNlYyA9IDA7XFxuK1xcdGVyciA9IHNldHNvY2tvcHQoZW52LVxcdTAwM2VyZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dHYsIHNpemVvZih0dikpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXQgcmN2dGltZW9cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAoZW52LVxcdTAwM2VyZmQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRjbG9zZShlbnYtXFx1MDAzZXJmZCk7XFxuK1xcdFxcdGVudi1cXHUwMDNlcmZkID0gLTE7XFxuK1xcdH1cXG4rXFx0aWYgKGVudi1cXHUwMDNlbnN0b2tlbikge1xcbitcXHRcXHRjbG9zZV9uZXRucyhlbnYtXFx1MDAzZW5zdG9rZW4pO1xcbitcXHRcXHRlbnYtXFx1MDAzZW5zdG9rZW4gPSBOVUxMO1xcbitcXHR9XFxuK1xcdGlmIChlbnYtXFx1MDAzZW5ldG5zX2NyZWF0ZWQpIHtcXG4rXFx0XFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MVxcXCIsIG5ldG5zKTtcXG4rXFx0XFx0ZW52LVxcdTAwM2VuZXRuc19jcmVhdGVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrc29ja190ZXN0X2Vudl9jbGVhbnVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KVxcbit7XFxuK1xcdGlmIChlbnYtXFx1MDAzZXJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShlbnYtXFx1MDAzZXJmZCk7XFxuK1xcdGlmIChlbnYtXFx1MDAzZW5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKGVudi1cXHUwMDNlbnN0b2tlbik7XFxuK1xcdGlmIChlbnYtXFx1MDAzZW5ldG5zX2NyZWF0ZWQpIHtcXG4rXFx0XFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MVxcXCIsIGVudi1cXHUwMDNlbmV0bnMpO1xcbitcXHRcXHRlbnYtXFx1MDAzZW5ldG5zX2NyZWF0ZWQgPSBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrc29ja19hc3NlcnRfcmVjdihzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudiwgY29uc3QgY2hhciAqZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgc2l6ZV90IGRhdGFfc3opXFxuK3tcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0bWVtc2V0KGVudi1cXHUwMDNlYnVmLCAwLCBzaXplb2YoZW52LVxcdTAwM2VidWYpKTtcXG4rXFx0biA9IHJlY3Zmcm9tKGVudi1cXHUwMDNlcmZkLCBlbnYtXFx1MDAzZWJ1Ziwgc2l6ZW9mKGVudi1cXHUwMDNlYnVmKSwgMCwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKG4sIGRhdGFfc3osIFxcXCJyZWN2ZnJvbSBsZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRBU1NFUlRfTUVNRVEoZW52LVxcdTAwM2VidWYsIGRhdGEsIGRhdGFfc3osIFxcXCJwYXlsb2FkIG1hdGNoXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGtzb2NrX3NldHVwX2N0eChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fYmUzMiAqaXB2NF9yZW1vdGUsXFxuK1xcdFxcdFxcdCAgICBfX3UxNiAqcmVtb3RlX3BvcnQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRpbnQgZXJyLCBwZmQ7XFxuK1xcbitcXHQqaXB2NF9yZW1vdGUgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xcbitcXHQqcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XFxuK1xcbitcXHRwZmQgPSBicGZfcHJvZ3JhbV9fZmQocHJvZyk7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocGZkLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImtzb2NrX3NldHVwIHJ1blxcXCIpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwia3NvY2tfc2V0dXAgcmV0dmFsXFxcIikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbit2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XFxuK1xcdHN0cnVjdCBrc29ja19iYXNpYyAqc2tlbDtcXG4rXFx0aW50IGVyciwgcGZkO1xcbitcXG4rXFx0c2tlbCA9IGtzb2NrX2Jhc2ljX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGtzb2NrX2Jhc2ljX19sb2FkKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJza2VsIGxvYWRcXFwiKSkge1xcbitcXHRcXHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFxcdTAwMjZlbnYsIE5TX1RFU1QpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSBrc29jayAqL1xcbitcXHRpZiAoIWtzb2NrX3NldHVwX2N0eChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja19zZXR1cCwgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaXB2NF9yZW1vdGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDI6IFJ1biB0aGUgc2VuZCBTWVNDQUxMIHByb2cgKi9cXG4rXFx0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NlbmQpO1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHBmZCwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJrc29ja19zZW5kIHJ1blxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdGlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJzZW5kbXNnIGJ5dGVzXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovXFxuK1xcdGtzb2NrX2Fzc2VydF9yZWN2KFxcdTAwMjZlbnYsIHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSxcXG4rXFx0XFx0XFx0ICBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSk7XFxuK1xcbitmYWlsOlxcbitcXHRrc29ja190ZXN0X2Vudl9jbGVhbnVwKFxcdTAwMjZlbnYpO1xcbitcXHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xcbitcXHRzdHJ1Y3Qga3NvY2tfcmVjdXJzaW9uICpza2VsO1xcbitcXHRjaGFyIHRyaWdnZXIgPSAneCc7XFxuK1xcdGludCB0ZmQgPSAtMTtcXG4rXFx0aW50IGVycjtcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0c2tlbCA9IGtzb2NrX3JlY3Vyc2lvbl9fb3BlbigpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWwgb3BlblxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBrc29ja19yZWN1cnNpb25fX2xvYWQoc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWwgbG9hZFxcXCIpKSB7XFxuK1xcdFxcdGtzb2NrX3JlY3Vyc2lvbl9fZGVzdHJveShza2VsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFxcdTAwMjZlbnYsIE5TX0xTTV9SRUNVUlNJT05fVEVTVCkpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xcbitcXHRpZiAoIWtzb2NrX3NldHVwX2N0eChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja19zZXR1cCwgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaXB2NF9yZW1vdGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfc2VuZG1zZyBmcm9tIHVzZXJzcGFjZSAqL1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfc2VuZG1zZyA9XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NvY2tldF9zZW5kbXNnKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiYXR0YWNoIHNvY2tldF9zZW5kbXNnIGxzbVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHR0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFxcXCJ0cmlnZ2VyIHNvY2tldFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0cmlnZ2VyX3NlbmQgPSAxO1xcbitcXHRuID0gc2VuZHRvKHRmZCwgXFx1MDAyNnRyaWdnZXIsIHNpemVvZih0cmlnZ2VyKSwgMCxcXG4rXFx0XFx0ICAgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZlbnYuYWRkciwgc2l6ZW9mKGVudi5hZGRyKSk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHJpZ2dlcl9zZW5kID0gMDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEobiwgc2l6ZW9mKHRyaWdnZXIpLCBcXFwidHJpZ2dlciBzZW5kdG9cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LyogU3RlcCAzOiBUaGUgbmVzdGVkIGJwZl9rc29ja19zZW5kKCkgbXVzdCBoaXQgdGhlIHJlY3Vyc2lvbiBndWFyZCAqL1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlY19jb3VudCwgMixcXG4rXFx0XFx0ICAgICAgIFxcXCJzb2NrZXRfc2VuZG1zZyByZWN1cnNpb24gY291bnRcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLFxcbitcXHRcXHQgICAgICAgXFxcInJlY3Vyc2l2ZSBzZW5kIHN0YXR1c1xcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXJlY19rZnVuY19yZXRzWzFdLFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSksIFxcXCJvdXRlciBzZW5kIGJ5dGVzXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGtzb2NrX2Fzc2VydF9yZWN2KFxcdTAwMjZlbnYsIHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSxcXG4rXFx0XFx0XFx0ICBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSk7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAodGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHRmZCk7XFxuK1xcdGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoXFx1MDAyNmVudik7XFxuK1xcdGtzb2NrX3JlY3Vyc2lvbl9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXFxuQEAgLTAsMCArMSwzNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF9wcm9ncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfd3Euc2tlbC5oXFxcIlxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXFxuK1xcdFxcdGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwicnVuIGtzb2NrX3dxX3N0YXJ0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHdoaWxlICghX19hdG9taWNfbG9hZF9uKFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxcbitcXHRcXHR1c2xlZXAoMTAwMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcXG4rXFx0XFx0ICBcXFwid29ya3F1ZXVlIGNyZWF0ZSByZWplY3RlZFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRrc29ja193cV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xODliMGZjMTU3NzAxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jXFxuQEAgLTAsMCArMSwzNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gZG9fa3NvY2tfc2V0dXAoKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3NlbmQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBzZW5kID0gLTE7XFxuK1xcbitcXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xcbitcXHRpZiAoIXYpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0a3MgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIE5VTEwpO1xcbitcXHRpZiAoIWtzKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdHNlbmQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XFxuK1xcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rXFx0cmV0dXJuIHNlbmQ7XFxuK31cXG4rXFxuK2NoYXIgX19saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jMzIwMzIyMGEyZDBiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxcbkBAIC0wLDAgKzEsOTkgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcXG4rXFxuKyNpbmNsdWRlIFxcXCJlcnJuby5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgU09DS19TVFJFQU1cXHQxXFxuKyNkZWZpbmUgU09DS19ER1JBTVxcdDJcXG4rI2RlZmluZSBJUFBST1RPX1RDUFxcdDZcXG4rI2RlZmluZSBJUFBST1RPX1VEUFxcdDE3XFxuK1xcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbitcXHRcXHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcXG4rdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xcbitcXG4rc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbit7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXFx1MDAyNmtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIGN0eCk7XFxuK1xcdGlmIChvbGQpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBHbG9iYWxzIGZvciBwYXNzaW5nIGNvbmZpZyBmcm9tIHVzZXJzcGFjZSAqL1xcbitfX2JlMzIgaXB2NF9yZW1vdGU7XFxuK19fdTE2IHJlbW90ZV9wb3J0O1xcbitcXG4rY2hhciBzZW5kX2RhdGFbMzJdID0gXFxcImhlbGxvIGZyb20gYnBmIGtzb2NrXFxcIjtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGRvX2tzb2NrX3NldHVwKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xcbitcXHR1bmlvbiBicGZfa3NvY2tfYWRkciBhZGRyID0ge307XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNO1xcbitcXHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xcbitcXG4rXFx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFxcdTAwMjZjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgXFx1MDAyNmVycik7XFxuK1xcdGlmICgha3MpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRhZGRyLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0YWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpO1xcbitcXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcXG4rXFxuK1xcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGtzb2NrX2N0eF9pbnNlcnQoa3MpO1xcbitcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUVYSVNUKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyZjUyMDA5NDNlMzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jXFxuQEAgLTAsMCArMSw2OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuK3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XFxuK1xcbitpbnQgdGFyZ2V0X3BpZDtcXG4raW50IHRyaWdnZXJfc2VuZDtcXG4rXFxuK3Vuc2lnbmVkIGludCByZWNfY291bnQ7XFxuK2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtLnMvc29ja2V0X3NlbmRtc2dcXFwiKVxcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4rXFx0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xcbitcXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGludCBrZnVuY19yZXQ7XFxuK1xcbitcXHRpZiAocmV0IHx8ICF0cmlnZ2VyX3NlbmQgfHwgcGlkICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xcbitcXHRpZiAoIXYpIHtcXG4rXFx0XFx0a2Z1bmNfcmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtzID0gTlVMTDtcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0dG1wID0gdi1cXHUwMDNlY3R4O1xcbitcXHRpZiAodG1wKVxcbitcXHRcXHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICgha3MpIHtcXG4rXFx0XFx0a2Z1bmNfcmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG4rXFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXG4rb3V0OlxcbitcXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXFx1MDAyNiAxXSA9IGtmdW5jX3JldDtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnJlY19jb3VudCwgMSk7XFxuK1xcbitcXHRpZiAoa2Z1bmNfcmV0ICE9IC1FQlVTWSlcXG4rXFx0XFx0dHJpZ2dlcl9zZW5kID0gMDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2NoYXIgX19saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xcbkBAIC0wLDAgKzEsNjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2luY2x1ZGUgXFxcInZtbGludXguaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX3RyYWNpbmdfbmV0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlcnJuby5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbitzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xcbitcXHRzdHJ1Y3QgYnBmX3dxIHdvcms7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgdTMyKTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpO1xcbit9IHdvcmtfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2ludCBjcmVhdGVfZXJyO1xcbit1MzIgY2FsbGJhY2tfZG9uZTtcXG4rXFxuK3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xcbitcXHRcXHQuZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxcbitcXHRcXHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFxcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFxcdTAwMjZlcnIpO1xcbitcXHRpZiAoa3MpXFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rXFx0Y3JlYXRlX2VyciA9IGVycjtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xcbitcXHR1MzIga2V5ID0gMDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2d29ya19tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0ZXJyID0gYnBmX3dxX2luaXQoXFx1MDAyNnZhbHVlLVxcdTAwM2V3b3JrLCBcXHUwMDI2d29ya19tYXAsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFxcdTAwMjZ2YWx1ZS1cXHUwMDNld29yaywga3NvY2tfd3FfY2FsbGJhY2ssIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFxcdTAwMjZ2YWx1ZS1cXHUwMDNld29yaywgMCk7XFxuK31cXG4rXFxuK2NoYXIgX19saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDI6MjYuMDkwOTU5MzQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQyNDc5NjcyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX2FjcXVpcmVcIixcbiAgICBcImJwZl9rc29ja19yZWxlYXNlXCIsXG4gICAgXCJicGZfa3NvY2tfc2VuZFwiLFxuICAgIFwiX19zeXNfY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBmZWF0dXJlIGBicGZfa3NvY2tgIHRoYXQgYWxsb3dzIEJQRiBwcm9ncmFtcyB0byBjcmVhdGUsIGNvbm5lY3QsIGFuZCBzZW5kIGRhdGEgdGhyb3VnaCBrZXJuZWwgc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBBUEkgZW50cnlwb2ludHMgZm9yIEJQRiBwcm9ncmFtcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBrZnVuY3MgYW5kIHRoZSBuZXdseSBleHRyYWN0ZWQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ3ZjgyZmEyZTA2MDU1N2QwMzE2OWM1ZjY3NzY4YjRkODQwMzAzNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5AQCAtMCwwICsxLDM2IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaWZuZGVmIF9CUEZfS1NPQ0tfSFxuKyNkZWZpbmUgX0JQRl9LU09DS19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzXG4rICogQGZhbWlseTpcdEFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuKyAqIEB0eXBlOlx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cbisgKiBAcHJvdG9jb2w6XHRQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbFxuKyAqXHRcdG9mIHRoZSBnaXZlbiB0eXBlLlxuKyAqIEByZXNlcnZlZDpcdE11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4rICovXG4rc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG4rXHRfX3U4IGZhbWlseTtcbitcdF9fdTggdHlwZTtcbitcdF9fdTggcHJvdG9jb2w7XG4rXHRfX3U4IHJlc2VydmVkO1xuK307XG4rXG4rLyoqXG4rICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcbisgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxuKyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLlxuKyAqL1xuK3VuaW9uIGJwZl9rc29ja19hZGRyIHtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7XG4rfTtcbitcbisjZW5kaWYgLyogX0JQRl9LU09DS19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwLi4zMzQ4NDZkZjkyMzgxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMDUwLDYgKzEwNTAsMTAgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcdC8qIFJlY3Vyc2lvbiBwcmV2ZW50aW9uIGZvciBldmVudGZkX3NpZ25hbCgpICovXG4gXHR1bnNpZ25lZFx0XHRcdGluX2V2ZW50ZmQ6MTtcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JTkVUKVxuK1x0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGJwZl9rc29ja19zZW5kKCkgKi9cbitcdHVuc2lnbmVkXHRcdFx0aW5fYnBmX2tzb2NrX3NlbmQ6MTtcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NQVV9QQVNJRFxuIFx0dW5zaWduZWRcdFx0XHRwYXNpZF9hY3RpdmF0ZWQ6MTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uNDhmMWViODE5M2RlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiArNDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kX3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiBcdFx0XHQgICAgIGludCBhZGRybGVuKTtcbitleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuK1x0XHRcdFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uMTE1NGI1YjBiNmEwNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3MCw2ICs0NDcwLDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG4gI2lmZGVmIENPTkZJR19DUllQVE9cbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0lORVRcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4rI2VuZGlmXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcbiBcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xuK2lmbmVxICgkKENPTkZJR19JTkVUKSwpXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuK2VuZGlmXG4gb2JqLSQoQ09ORklHX09GKVx0Kz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmMxOTk4ODg3MTk2MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbkBAIC0wLDAgKzEsMzI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrIC0gcmVmY291bnRlZCBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0XG4rICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuKyAqIEB1c2FnZTpcdFJlZmVyZW5jZSBjb3VudGVyLlxuKyAqIEByd29yazpcdFJDVSB3b3JrIGZvciBkZWZlcnJlZCBjbGVhbnVwIChzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS5cbisgKi9cbitzdHJ1Y3QgYnBmX2tzb2NrIHtcbitcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4rXHRyZWZjb3VudF90IHVzYWdlO1xuK1x0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xuK307XG4rXG4rc3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XG4rXHRcdGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xuK1xuK1x0c29ja19yZWxlYXNlKGtzLVx1MDAzZXNvY2spO1xuK1x0a2ZyZWUoa3MpO1xuK31cbitcbitzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXG4re1xuK1x0LypcbitcdCAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKClcbitcdCAqIGNsZWFyZWQgY3VycmVudC1cdTAwM2Vuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuXG4rXHQgKi9cbitcdHJldHVybiAhKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpIFx1MDAyNlx1MDAyNiBjdXJyZW50LVx1MDAzZW5zcHJveHk7XG4rfVxuK1xuK19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbitcbisvKipcbisgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cbisgKlxuKyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXG4rICpcbisgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbisgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFja1xuKyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzaydzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxuKyAqXG4rICogQG9wdHM6XHRQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy5cbisgKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbisgKiBAZXJyX191bmluaXQ6XHRJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxuKyAqL1xuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxuK2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxuK1x0XHQgaW50ICplcnJfX3VuaW5pdClcbit7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0aW50IGVycjtcbitcbitcdC8qXG4rXHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxuK1x0ICogZnJvbSBjdXJyZW50LiBLZXJuZWwgdGhyZWFkcywgaW5jbHVkaW5nIEJQRiB3b3JrcXVldWUgY2FsbGJhY2tzLCBkb1xuK1x0ICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uXG4rXHQgKi9cbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKSB7XG4rXHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcbitcdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4rXHRcdC50eXBlID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNldHlwZSksXG4rXHRcdC5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXByb3RvY29sKSxcbitcdFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWQpLFxuK1x0fTtcbitcbitcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xuK1x0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkge1xuK1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xuK1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRrcyA9IGt6YWxsb2Nfb2JqKCprcyk7XG4rXHRpZiAoIWtzKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXG4rXHQgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMilcbitcdCAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJ3MgY2FsbGVyLlxuK1x0ICovXG4rXHRlcnIgPSBzb2NrX2NyZWF0ZShvcHRzX2NvcHkuZmFtaWx5LCBvcHRzX2NvcHkudHlwZSwgb3B0c19jb3B5LnByb3RvY29sLFxuK1x0XHRcdCAgXHUwMDI2a3MtXHUwMDNlc29jayk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1xuK1x0a3MtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7XG4rXHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLO1xuK1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmtzLVx1MDAzZXVzYWdlLCAxKTtcbitcdHB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpO1xuK1x0cmV0dXJuIGtzO1xuK1xuK2Vycl9mcmVlOlxuK1x0a2ZyZWUoa3MpO1xuK2Vycl9vdXQ6XG4rXHRwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy5cbisgKiBAa3M6XHRcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LlxuKyAqIEBhZGRyOlx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXG4rICogQGFkZHJfX3N6Olx0U2l6ZSBvZiB0aGUgYWRkcmVzcyB1bmlvbi5cbisgKlxuKyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIHdoaWxlIGNvbm5lY3RpbmcgdGhlIHNvY2tldCwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcbitcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4rXHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTtcbitcdGludCBhZGRybGVuO1xuK1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi9cbitcdG1lbWNweShcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XG4rXG4rXHRzd2l0Y2ggKHNhLnNzX2ZhbWlseSkge1xuK1x0Y2FzZSBBRl9JTkVUOlxuK1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7XG4rXHRcdGJyZWFrO1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0Y2FzZSBBRl9JTkVUNjpcbitcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbitcdH1cbitcbitcdHJldHVybiBfX3N5c19jb25uZWN0X3NvY2tldChrcy1cdTAwM2Vzb2NrLCBcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gYWNxdWlyZS4gTXVzdCBiZSBhXG4rICpcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXG4rICpcbisgKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbit7XG4rXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZrcy1cdTAwM2V1c2FnZSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIGtzO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIHJlbGVhc2UuXG4rICpcbisgKiBXaGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgaXMgcmVsZWFzZWQsIHRoZSBzb2NrZXQgaXMgY2xlYW5lZCB1cCB2aWFcbisgKiBxdWV1ZV9yY3Vfd29yaygpIChzaW5jZSBzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS5cbisgKi9cbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuK3tcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a3MtXHUwMDNldXNhZ2UpKSB7XG4rXHRcdElOSVRfUkNVX1dPUksoXHUwMDI2a3MtXHUwMDNlcndvcmssIGtzb2NrX3JlbGVhc2Vfd29ya19mbik7XG4rXHRcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNmtzLVx1MDAzZXJ3b3JrKTtcbitcdH1cbit9XG4rXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxuK3tcbitcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbit9XG4rQ0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcbitcbisvKipcbisgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LiBNdXN0IGJlIGFuIGFjcXVpcmVkIHJlZmVyZW5jZS5cbisgKiBAZGF0YTpcdFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC5cbisgKiBAZGF0YV9fc3o6XHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuXG4rICpcbisgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxuKyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXG4rICpcbisgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSxcbitcdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuK3tcbitcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuK1x0XHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxuK1x0fTtcbitcdHN0cnVjdCBrdmVjIGlvdiA9IHtcbitcdFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxuK1x0XHQuaW92X2xlbiA9IGRhdGFfX3N6LFxuK1x0fTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogRWFybHkgY2hlY2sgZm9yIFVEUC4gRXhhY3QgbGltaXRzIGVuZm9yY2VkIGJ5IGtlcm5lbF9zZW5kbXNnKCkuICovXG4rXHRpZiAoZGF0YV9fc3ogXHUwMDNlIElQX01BWF9NVFUpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9icGZfa3NvY2tfc2VuZClcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSB0cnVlO1xuK1x0cmV0ID0ga2VybmVsX3NlbmRtc2coa3MtXHUwMDNlc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpb3YsIDEsIGRhdGFfX3N6KTtcbitcdGN1cnJlbnQtXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQgPSBmYWxzZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4rXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcbitCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQuc2V0ID0gXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLFxuK307XG4rXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSlcbitCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbit7XG4rXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSB8fFxuK1x0ICAgIHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwgfHxcbitcdCAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5jNzQyN2RkNGRkNTIzIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTE1LDI3ICsyMTE1LDMxIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4gICpcdGluY2x1ZGUgdGhlIC1FSU5QUk9HUkVTUyBzdGF0dXMgZm9yIHN1Y2ggc29ja2V0cy5cbiAgKi9cbiBcbitpbnQgX19zeXNfY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4rXHRcdFx0IGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssXG4rXHRcdFx0XHQgICAgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbitcdFx0XHRcdCAgICBhZGRybGVuLCBmbGFncyk7XG4rfVxuK1xuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHQgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tXHRpbnQgZXJyO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpO1xuLVx0aWYgKCFzb2NrKSB7XG4tXHRcdGVyciA9IC1FTk9UU09DSztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRlcnIgPVxuLVx0ICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFzb2NrKVxuK1x0XHRyZXR1cm4gLUVOT1RTT0NLO1xuIFxuLVx0ZXJyID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4tXHRcdFx0XHRcdCAgICBhZGRybGVuLCBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuLW91dDpcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gX19zeXNfY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbitcdFx0XHRcdCAgICBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuIH1cbiBcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZGI4OWU5YzAxODZmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5AQCAtMCwwICsxLDIzMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuKyNpbmNsdWRlIFwibmV0d29ya19oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfYmFzaWMuc2tlbC5oXCJcbisjaW5jbHVkZSBcImtzb2NrX3JlY3Vyc2lvbi5za2VsLmhcIlxuK1xuKyNkZWZpbmUgTlNfVEVTVCBcImtzb2NrX2Jhc2ljX25zXCJcbisjZGVmaW5lIE5TX0xTTV9SRUNVUlNJT05fVEVTVCBcImtzb2NrX2xzbV9yZWN1cnNpb25fbnNcIlxuKyNkZWZpbmUgTE9PUEJBQ0tfSVAgXCIxMjcuMC4wLjFcIlxuKyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcbisjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNVxuK1xuK3N0cnVjdCBrc29ja190ZXN0X2VudiB7XG4rXHRjb25zdCBjaGFyICpuZXRucztcbitcdGJvb2wgbmV0bnNfY3JlYXRlZDtcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4rXHRpbnQgcmZkO1xuK1x0Y2hhciBidWZbMzJdO1xuK307XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYsIGNvbnN0IGNoYXIgKm5ldG5zKVxuK3tcbitcdHN0cnVjdCB0aW1ldmFsIHR2O1xuK1x0aW50IGVycjtcbitcbitcdG1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7XG4rXHRlbnYtXHUwMDNlbmV0bnMgPSBuZXRucztcbitcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBuZXRucyk7XG4rXHRlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XG4rXHRTWVMoZmFpbCwgXCJpcCAtbmV0ICVzIGxpbmsgc2V0IGxvIHVwXCIsIG5ldG5zKTtcbitcbitcdGVudi1cdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhuZXRucyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZW52LVx1MDAzZW5zdG9rZW4sIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZXJmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXHUwMDNlcmZkLCBcInJlY2VpdmVyIHNvY2tldFwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRlbnYtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoTE9PUEJBQ0tfSVApO1xuK1x0ZW52LVx1MDAzZWFkZHIuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpO1xuK1xuK1x0ZXJyID0gYmluZChlbnYtXHUwMDNlcmZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2ZW52LVx1MDAzZWFkZHIsIHNpemVvZihlbnYtXHUwMDNlYWRkcikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJpbmQgcmVjZWl2ZXJcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHR2LnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUM7XG4rXHR0di50dl91c2VjID0gMDtcbitcdGVyciA9IHNldHNvY2tvcHQoZW52LVx1MDAzZXJmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LCBzaXplb2YodHYpKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXQgcmN2dGltZW9cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHJldHVybiB0cnVlO1xuK1xuK2ZhaWw6XG4rXHRpZiAoZW52LVx1MDAzZXJmZCBcdTAwM2U9IDApIHtcbitcdFx0Y2xvc2UoZW52LVx1MDAzZXJmZCk7XG4rXHRcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcdH1cbitcdGlmIChlbnYtXHUwMDNlbnN0b2tlbikge1xuK1x0XHRjbG9zZV9uZXRucyhlbnYtXHUwMDNlbnN0b2tlbik7XG4rXHRcdGVudi1cdTAwM2Vuc3Rva2VuID0gTlVMTDtcbitcdH1cbitcdGlmIChlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCkge1xuK1x0XHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsICVzIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwiLCBuZXRucyk7XG4rXHRcdGVudi1cdTAwM2VuZXRuc19jcmVhdGVkID0gZmFsc2U7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzb2NrX3Rlc3RfZW52X2NsZWFudXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4re1xuK1x0aWYgKGVudi1cdTAwM2VyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShlbnYtXHUwMDNlcmZkKTtcbitcdGlmIChlbnYtXHUwMDNlbnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMoZW52LVx1MDAzZW5zdG9rZW4pO1xuK1x0aWYgKGVudi1cdTAwM2VuZXRuc19jcmVhdGVkKSB7XG4rXHRcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXMgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXCIsIGVudi1cdTAwM2VuZXRucyk7XG4rXHRcdGVudi1cdTAwM2VuZXRuc19jcmVhdGVkID0gZmFsc2U7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGtzb2NrX2Fzc2VydF9yZWN2KHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52LCBjb25zdCBjaGFyICpkYXRhLFxuK1x0XHRcdCAgICAgIHNpemVfdCBkYXRhX3N6KVxuK3tcbitcdHNzaXplX3QgbjtcbitcbitcdG1lbXNldChlbnYtXHUwMDNlYnVmLCAwLCBzaXplb2YoZW52LVx1MDAzZWJ1ZikpO1xuK1x0biA9IHJlY3Zmcm9tKGVudi1cdTAwM2VyZmQsIGVudi1cdTAwM2VidWYsIHNpemVvZihlbnYtXHUwMDNlYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCBkYXRhX3N6LCBcInJlY3Zmcm9tIGxlblwiKSlcbitcdFx0cmV0dXJuO1xuK1x0QVNTRVJUX01FTUVRKGVudi1cdTAwM2VidWYsIGRhdGEsIGRhdGFfc3osIFwicGF5bG9hZCBtYXRjaFwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfc2V0dXBfY3R4KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX19iZTMyICppcHY0X3JlbW90ZSxcbitcdFx0XHQgICAgX191MTYgKnJlbW90ZV9wb3J0KVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdGludCBlcnIsIHBmZDtcbitcbitcdCppcHY0X3JlbW90ZSA9IGluZXRfYWRkcihMT09QQkFDS19JUCk7XG4rXHQqcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXG4rXHRwZmQgPSBicGZfcHJvZ3JhbV9fZmQocHJvZyk7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHBmZCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbit2b2lkIHRlc3Rfa3NvY2tfYmFzaWModm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuK1x0c3RydWN0IGtzb2NrX2Jhc2ljICpza2VsO1xuK1x0aW50IGVyciwgcGZkO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2Jhc2ljX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5cIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGtzb2NrX2Jhc2ljX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWwgbG9hZFwiKSkge1xuK1x0XHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcdTAwMjZlbnYsIE5TX1RFU1QpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSBrc29jayAqL1xuK1x0aWYgKCFrc29ja19zZXR1cF9jdHgoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zZXR1cCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUsXG4rXHRcdFx0ICAgICBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VyZW1vdGVfcG9ydCkpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogUnVuIHRoZSBzZW5kIFNZU0NBTEwgcHJvZyAqL1xuK1x0cGZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2VuZCk7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHBmZCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2VuZCBydW5cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdGlmICghQVNTRVJUX0VRKG9wdHMucmV0dmFsLCBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksXG4rXHRcdCAgICAgICBcInNlbmRtc2cgYnl0ZXNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogUmVjZWl2ZSBhbmQgdmVyaWZ5IHRoZSBkYXRhICovXG4rXHRrc29ja19hc3NlcnRfcmVjdihcdTAwMjZlbnYsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsXG4rXHRcdFx0ICBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSkpO1xuK1xuK2ZhaWw6XG4rXHRrc29ja190ZXN0X2Vudl9jbGVhbnVwKFx1MDAyNmVudik7XG4rXHRrc29ja19iYXNpY19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcbit7XG4rXHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuK1x0c3RydWN0IGtzb2NrX3JlY3Vyc2lvbiAqc2tlbDtcbitcdGNoYXIgdHJpZ2dlciA9ICd4JztcbitcdGludCB0ZmQgPSAtMTtcbitcdGludCBlcnI7XG4rXHRzc2l6ZV90IG47XG4rXG4rXHRza2VsID0ga3NvY2tfcmVjdXJzaW9uX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5cIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGtzb2NrX3JlY3Vyc2lvbl9fbG9hZChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsIGxvYWRcIikpIHtcbitcdFx0a3NvY2tfcmVjdXJzaW9uX19kZXN0cm95KHNrZWwpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudiwgTlNfTFNNX1JFQ1VSU0lPTl9URVNUKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovXG4rXHRpZiAoIWtzb2NrX3NldHVwX2N0eChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwLCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VpcHY0X3JlbW90ZSxcbitcdFx0XHQgICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0KSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0LyogU3RlcCAyOiBBdHRhY2ggTFNNIHByb2cgYW5kIHRyaWdnZXIgc29ja2V0X3NlbmRtc2cgZnJvbSB1c2Vyc3BhY2UgKi9cbitcdHNrZWwtXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X3NlbmRtc2cgPVxuK1x0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NvY2tldF9zZW5kbXNnKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9zZW5kbXNnLFxuK1x0XHRcdCAgIFwiYXR0YWNoIHNvY2tldF9zZW5kbXNnIGxzbVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0dGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHRmZCwgXCJ0cmlnZ2VyIHNvY2tldFwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHJpZ2dlcl9zZW5kID0gMTtcbitcdG4gPSBzZW5kdG8odGZkLCBcdTAwMjZ0cmlnZ2VyLCBzaXplb2YodHJpZ2dlciksIDAsXG4rXHRcdCAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZlbnYuYWRkciwgc2l6ZW9mKGVudi5hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRyaWdnZXJfc2VuZCA9IDA7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCBzaXplb2YodHJpZ2dlciksIFwidHJpZ2dlciBzZW5kdG9cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVGhlIG5lc3RlZCBicGZfa3NvY2tfc2VuZCgpIG11c3QgaGl0IHRoZSByZWN1cnNpb24gZ3VhcmQgKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlY19jb3VudCwgMixcbitcdFx0ICAgICAgIFwic29ja2V0X3NlbmRtc2cgcmVjdXJzaW9uIGNvdW50XCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSxcbitcdFx0ICAgICAgIFwicmVjdXJzaXZlIHNlbmQgc3RhdHVzXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sXG4rXHRcdCAgICAgICBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksIFwib3V0ZXIgc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0a3NvY2tfYXNzZXJ0X3JlY3YoXHUwMDI2ZW52LCBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhLFxuK1x0XHRcdCAgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpKTtcbitcbitmYWlsOlxuK1x0aWYgKHRmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHRmZCk7XG4rXHRrc29ja190ZXN0X2Vudl9jbGVhbnVwKFx1MDAyNmVudik7XG4rXHRrc29ja19yZWN1cnNpb25fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xuQEAgLTAsMCArMSwzNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfd3Euc2tlbC5oXCJcbitcbit2b2lkIHRlc3Rfa3NvY2tfd3Eodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKFxuK1x0XHRicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInJ1biBrc29ja193cV9zdGFydFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja193cV9zdGFydCByZXR2YWxcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0d2hpbGUgKCFfX2F0b21pY19sb2FkX24oXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpXG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcbitcdFx0ICBcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xODliMGZjMTU3NzAxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuY1xuQEAgLTAsMCArMSwzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBkb19rc29ja19zZXR1cCgpO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGtzb2NrX3NlbmQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0aW50IHNlbmQgPSAtMTtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0a3MgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBOVUxMKTtcbitcdGlmICgha3MpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbitcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcdHJldHVybiBzZW5kO1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmMzMjAzMjIwYTJkMGJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCArMSw5OSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbitcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbitcbisjZGVmaW5lIFNPQ0tfU1RSRUFNXHQxXG4rI2RlZmluZSBTT0NLX0RHUkFNXHQyXG4rI2RlZmluZSBJUFBST1RPX1RDUFx0NlxuKyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4rXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxuK1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4raW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4raW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbitcbitzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xuK1x0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxuK3tcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2X19rc29ja19jdHhfbWFwLCBcdTAwMjZrZXkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgY3R4KTtcbitcdGlmIChvbGQpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2xvYmFscyBmb3IgcGFzc2luZyBjb25maWcgZnJvbSB1c2Vyc3BhY2UgKi9cbitfX2JlMzIgaXB2NF9yZW1vdGU7XG4rX191MTYgcmVtb3RlX3BvcnQ7XG4rXG4rY2hhciBzZW5kX2RhdGFbMzJdID0gXCJoZWxsbyBmcm9tIGJwZiBrc29ja1wiO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGRvX2tzb2NrX3NldHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuK1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XG4rXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbitcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXG4rXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XG4rXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbitcbitcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuK1x0aWYgKGVycikge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZiAvKiBfS1NPQ0tfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MmY1MjAwOTQzZTM2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmNcbkBAIC0wLDAgKzEsNjkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuK2ludCB0YXJnZXRfcGlkO1xuK2ludCB0cmlnZ2VyX3NlbmQ7XG4rXG4rdW5zaWduZWQgaW50IHJlY19jb3VudDtcbitpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGRvX2tzb2NrX3NldHVwKCk7XG4rfVxuK1xuK1NFQyhcImxzbS5zL3NvY2tldF9zZW5kbXNnXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4rXHQgICAgIGludCBzaXplLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGludCBrZnVuY19yZXQ7XG4rXG4rXHRpZiAocmV0IHx8ICF0cmlnZ2VyX3NlbmQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGtmdW5jX3JldCA9IC1FTk9FTlQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0a3MgPSBOVUxMO1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdHRtcCA9IHYtXHUwMDNlY3R4O1xuK1x0aWYgKHRtcClcbitcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKCFrcykge1xuK1x0XHRrZnVuY19yZXQgPSAtRU5PRU5UO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbitcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcbitvdXQ6XG4rXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0ga2Z1bmNfcmV0O1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2cmVjX2NvdW50LCAxKTtcbitcbitcdGlmIChrZnVuY19yZXQgIT0gLUVCVVNZKVxuK1x0XHR0cmlnZ2VyX3NlbmQgPSAwO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9leHBlcmltZW50YWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJlcnJuby5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xuK1x0c3RydWN0IGJwZl93cSB3b3JrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIHUzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XG4rfSB3b3JrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitpbnQgY3JlYXRlX2Vycjtcbit1MzIgY2FsbGJhY2tfZG9uZTtcbitcbitzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbitcdFx0LmZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC50eXBlID0gU09DS19ER1JBTSxcbitcdFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoa3MpXG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcdGNyZWF0ZV9lcnIgPSBlcnI7XG4rXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xuK1x0dTMyIGtleSA9IDA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndvcmtfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWx1ZSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRlcnIgPSBicGZfd3FfaW5pdChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBcdTAwMjZ3b3JrX21hcCwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGJwZl93cV9zdGFydChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCAwKTtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQyOjI2LjA5MDk2MTE1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjQ0MzMxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEtlcm5lbCBTb2NrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIHRoZSBgYnBmX2tzb2NrYCBmZWF0dXJlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMgZGlyZWN0bHkuIFdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IHNldCBvZiBCUEYga2Z1bmNzOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIHdhdGNoLlxuXG5UaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBhbmQgYG5ldC9zb2NrZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuZXR3b3JraW5nIGNvbnRleHQuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW47IGl0J3MgZnVuZGFtZW50YWwgZm9yIGFueSBCUEYtcmVsYXRlZCBjaGFuZ2UuIGBDT05GSUdfSU5FVGAgaXMgYWxzbyBleHBlY3RlZCwgYXMgdGhpcyBkZWFscyB3aXRoIGludGVybmV0IHByb3RvY29scy4gV2Ugc2hvdWxkIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCB0aGUgbWFrZWZpbGUsIGl0IHNlZW1zIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LiBgYnBmX2tzb2NrLm9gIGlzIG9ubHkgY29tcGlsZWQgaWYgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgZW5hYmxlZC4gR29vZC5cblxuSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiBub3cuIExldCdzIHNlZSB3aGF0IGVsc2UgYG5ldC9jb3JlL2JwZl9rc29jay5jYCBob2xkcy4gQXNpZGUgZnJvbSB0aGUga2Z1bmNzLCBpdCBhbHNvIGhhcyBga3NvY2tfcmVsZWFzZV93b3JrX2ZuYCBhbmQgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgLiBJJ2xsIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGVzZSBrZXJuZWwgc29ja2V0cy5cblxuVGhlIGBuZXQvc29ja2V0LmNgIGZpbGUgaXMgaW50ZXJlc3RpbmcuIFRoZSBhZGRpdGlvbiBvZiBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGNhdGNoZXMgbXkgZXllLiBJdCdzIGEgbmV3LCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaW4gdGhlIGtlcm5lbCBpbnRlcmZhY2U7IHRoaXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBsb2dpYy5cblxuRmluYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBwZWVrIGF0IHRoZSBkZXBlbmRlbmNpZXMgYWdhaW4sIGFuZCBjb25maXJtIEknbSBub3QgbWlzc2luZyBhbnkuIGBDT05GSUdfSVBWNmAgaXMgYWxzbyB1c2VkIGluIGBicGZfa3NvY2tfY29ubmVjdGAsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbmV4dCBjb25maWcgdG8gY29uc2lkZXIuIEFuZCBJIGFtIGdvaW5nIHRvIHJ1biBhIGBncmVwYCB0byBjaGVjayBpZiBgQ09ORklHX0lORVRgIGlzIHRoZSBvbmx5IG5ldHdvcmsgZGVwZW5kZW5jeS5cblxuQWxyaWdodCwgd2l0aCB0aGlzIG92ZXJ2aWV3LCBJIGhhdmUgYSBnb29kIGZyYW1ld29yayB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGlzIHNlZW1zIHRvIGJlIGEgcG93ZXJmdWwgZmVhdHVyZSwgb3BlbmluZyB1cCBuZXcgcG9zc2liaWxpdGllcyBmb3IgQlBGLWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDI6NTQuMzM1Mjk1MTk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODQ3NDgxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2tzb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTEtLyoqXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxMjogKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTMtICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTgtICovXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxOTpzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTIwLVxcdF9fdTggZmFtaWx5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0yNi0vKipcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oOjI3OiAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0yOC0gKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaC0zMC0gKi9cXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oOjMxOnVuaW9uIGJwZl9rc29ja19hZGRyIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTMyLVxcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTA1My0jaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0lORVQpXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwNTQ6XFx0LyogUmVjdXJzaW9uIHByZXZlbnRpb24gZm9yIGJwZl9rc29ja19zZW5kKCkgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTA1NTpcXHR1bnNpZ25lZFxcdFxcdFxcdGluX2JwZl9rc29ja19zZW5kOjE7XFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwNTYtI2VuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDQ3MT1CVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NDczLSNpZmRlZiBDT05GSUdfSU5FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0NDc0OkJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ3NS0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL01ha2VmaWxlPTQ3PWlmbmVxICgkKENPTkZJR19JTkVUKSwpXFxubmV0L2NvcmUvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ5LWVuZGlmXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG5uZXQvY29yZS9icGZfa3NvY2suYzo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfa3NvY2suaFxcdTAwM2VcXG5uZXQvY29yZS9icGZfa3NvY2suYy02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwLS8qKlxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIxOiAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMi0gKiBAc29jazpcXHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0Llxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjUtICovXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjY6c3RydWN0IGJwZl9rc29jayB7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjctXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTMyPXN0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzMte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjM0OlxcdHN0cnVjdCBicGZfa3NvY2sgKmtzID1cXG5uZXQvY29yZS9icGZfa3NvY2suYzozNTpcXHRcXHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zNi1cXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTQwLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjQxOnN0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcXG5uZXQvY29yZS9icGZfa3NvY2suYy00Mi17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz01MD1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy01Mi0vKipcXG5uZXQvY29yZS9icGZfa3NvY2suYzo1MzogKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cXG5uZXQvY29yZS9icGZfa3NvY2suYy01NC0gKlxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTctICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG5uZXQvY29yZS9icGZfa3NvY2suYzo1ODogKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTktICpcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTY0LSAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NjU6ICogQG9wdHM6XFx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjYtICogQG9wdHNfX3N6OlxcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0Llxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjgtICovXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Njk6X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NzA6YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEtXFx0XFx0IGludCAqZXJyX191bmluaXQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzIte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjczOlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjc0OlxcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTc1LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy04MS1cXHQgKi9cXG5uZXQvY29yZS9icGZfa3NvY2suYzo4MjpcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTgzLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODYtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6ODc6XFx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTg4LVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy05MS1cXG5uZXQvY29yZS9icGZfa3NvY2suYzo5MjpcXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtOTMtXFx0XFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VmYW1pbHkpLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTQ5LS8qKlxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE1MDogKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTUxLSAqIEBrczpcXHRcXHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE2MS0gKi9cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNjI6X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE2MzpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE2NC1cXHRcXHRcXHRcXHQgIHUzMiBhZGRyX19zeilcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE2OC1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxNjk6XFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTcwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE5NC0vKipcXG5uZXQvY29yZS9icGZfa3NvY2suYzoxOTU6ICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC5cXG5uZXQvY29yZS9icGZfa3NvY2suYy0xOTYtICogQGtzOlxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTk5LSAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjAwOiAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMDEtICovXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjAyOl9fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIwMy17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMDktLyoqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjEwOiAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjExLSAqIEBrczpcXHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjE1LSAqL1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIxNjpfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIxNy17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjMtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI0Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjUte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIyNjpcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjI3LX1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMjg6Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjktXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjMwLS8qKlxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIzMTogKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMzItICogQGtzOlxcdFxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LiBNdXN0IGJlIGFuIGFjcXVpcmVkIHJlZmVyZW5jZS5cXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI0MC0gKi9cXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNDE6X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI0Mi1cXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfX3N6KVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjUyLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI1MzpcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNTQtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjU5LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI2MDpcXHRpZiAoY3VycmVudC1cXHUwMDNlaW5fYnBmX2tzb2NrX3NlbmQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjYxLVxcdFxcdHJldHVybiAtRUJVU1k7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjYyLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI2MzpcXHRjdXJyZW50LVxcdTAwM2Vpbl9icGZfa3NvY2tfc2VuZCA9IHRydWU7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjY0LVxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjY1OlxcdGN1cnJlbnQtXFx1MDAzZWluX2JwZl9rc29ja19zZW5kID0gZmFsc2U7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjY2LVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjcyPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3MzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3NDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjgyPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4NDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg2LUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg3LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4ODpzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg5LXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTI5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAwLVxcdC5zZXQgPSBcXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDE6XFx0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAyLX07XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzAzLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNDpCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzA1OkJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDY6QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA3LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwODpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwOS17XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzEwLVxcdGludCByZXQ7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzExOlxcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTItXFx0XFx0e1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxMzpcXHRcXHRcXHQuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxNDpcXHRcXHRcXHQua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMxNS1cXHRcXHR9LFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIzLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMjQ6XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2tzb2NrX2R0b3JzLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMyNTpcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMjgtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzI5OmxhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYz0xNjU9dm9pZCB0ZXN0X2tzb2NrX2xzbV9yZWN1cnNpb24odm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMtMjExLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmM6MjEyOlxcdC8qIFN0ZXAgMzogVGhlIG5lc3RlZCBicGZfa3NvY2tfc2VuZCgpIG11c3QgaGl0IHRoZSByZWN1cnNpb24gZ3VhcmQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jLTIxMy1cXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlY19jb3VudCwgMixcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jPTE4PWludCBrc29ja19zZW5kKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19iYXNpYy5jLTIwLVxcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYzoyMTpcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYy0yMi1cXHRpbnQgc2VuZCA9IC0xO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMtMzEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmM6MzI6XFx0c2VuZCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfYmFzaWMuYzozMzpcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2Jhc2ljLmMtMzQtXFx0cmV0dXJuIHNlbmQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjE2OnN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMTctXFx0XFx0XFx0XFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjE4OmludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTE5LVxcdFxcdCAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyMDpzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyMTp2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjIyOmludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTIzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD0yND1zdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDoyNTpcXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtMjYtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaD0zNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTQxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo0MjpzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDMte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC00NC1cXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ1OlxcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNDgtXFx0aWYgKCF2KSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjQ5OlxcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTUwLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTU0LVxcdGlmIChvbGQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NTU6XFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNTYtXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg9Njg9c3RhdGljIGlubGluZSBpbnQgZG9fa3NvY2tfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtNjkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3MDpcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIGNyZWF0ZV9vcHRzID0ge307XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjcxOlxcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6NzI6XFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTczLVxcdGludCBlcnIgPSAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaDo3OTpcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcXHUwMDI2ZXJyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtODAtXFx0aWYgKCFrcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC04Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6ODc6XFx0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC04OC1cXHRpZiAoZXJyKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjg5OlxcdFxcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgtOTAtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYz0yNz1pbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy0zMC1cXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jOjMxOlxcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy0zMi1cXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMtNDctXFx0aWYgKHRtcClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmM6NDg6XFx0XFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy00OS1cXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmMtNTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3JlY3Vyc2lvbi5jOjU2OlxcdGtmdW5jX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfcmVjdXJzaW9uLmM6NTc6XFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19yZWN1cnNpb24uYy01OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jPTI1PXN0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjI3OlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yOC1cXHRcXHQuZmFtaWx5ID0gQUZfSU5FVCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTMxLVxcdH07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6MzI6XFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzMtXFx0aW50IGVyciA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmM6MzU6XFx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFxcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFxcdTAwMjZlcnIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM2LVxcdGlmIChrcylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYzozNzpcXHRcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMzgtXFx0Y3JlYXRlX2VyciA9IGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDI6NTYuNjIwMDQ4NDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1ODMyMjU4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBLc29jayBGZWF0dXJlIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgYGJwZl9rc29ja2AgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGludGVyYWN0aW9uIG9mIEJQRiBwcm9ncmFtcyB3aXRoIGtlcm5lbCBzb2NrZXRzLCB3aGljaCByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24gaW4gdGVybXMgb2YgYXR0YWNrIHN1cmZhY2UgYW5kIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGV4cG9zdXJlLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSd2ZSBnb3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfSU5FVGAgZmxhZ2dlZC4gVGhlc2UgYXJlIG9idmlvdXNseSBlc3NlbnRpYWwuIEkgYnJpZWZseSBjb25zaWRlcmVkIG90aGVyIGNvbmZpZ3MgbGlrZSBgQ09ORklHX0NSWVBUT2AsIGJ1dCBxdWlja2x5IGRpc21pc3NlZCBpdCBhcyB1bnJlbGF0ZWQgdG8gdGhlIGtzb2NrIGZ1bmN0aW9uYWxpdHkuIGBDT05GSUdfSVBWNmAgaXMgYWxzbyByZWxldmFudCBiZWNhdXNlIGl0J3MgdXNlZCBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBzbyBpdCBzaG91bGQgZGVmaW5pdGVseSBiZSBpbmNsdWRlZCBpbiBvdXIgZnV6emluZyBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGUgbWF4aW11bSBjb3ZlcmFnZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdHMgdXNlIGluIGBuZXQvY29yZS9icGZfa3NvY2suY2A6IElQdjYgaXMgZW5hYmxlZCB2aWEgdGhlIGBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgbWFjcm8uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzeW1ib2xzIHdlIG5lZWQgdG8gdGFyZ2V0LiBJJ3ZlIGdvdDpcblxuKiAgIGBicGZfa3NvY2tfY3JlYXRlYFxuKiAgIGBicGZfa3NvY2tfY29ubmVjdGBcbiogICBgYnBmX2tzb2NrX2FjcXVpcmVgXG4qICAgYGJwZl9rc29ja19yZWxlYXNlYFxuKiAgIGBicGZfa3NvY2tfc2VuZGBcbiogICBgX19zeXNfY29ubmVjdF9zb2NrZXRgXG5cbkkgY29uc2lkZXJlZCB3aGV0aGVyIGBrc29ja19yZWxlYXNlX3dvcmtfZm5gIHdhcnJhbnRzIGZ1enppbmcsIGJ1dCBpdCBzZWVtcyB0byBiZSBqdXN0IGEgd3JhcHBlciBhcm91bmQgYHNvY2tfcmVsZWFzZWAgYW5kIGBrZnJlZWAsIG1vc3RseSBqdXN0IGNhbGxpbmcgZXhpc3RpbmcgZnVuY3Rpb25zLiBJdHMgcHJpbWFyeSBmdW5jdGlvbiBpcyBhIFJDVSB3b3JrIGZ1bmN0aW9uLCBzbyB3aGlsZSBpbnRlcmVzdGluZywgdGhlIHByaW1hcnkgbG9naWMgaXMgbGlrZWx5IHRvIGJlIGVsc2V3aGVyZSBpbiBleGlzdGluZyBrZnVuY3MsIHNvIEknbSBsZXNzIGluY2xpbmVkIHRvIGhlYXZpbHkgZm9jdXMgb24gaXQuIEFkZGl0aW9uYWxseSwgSSBjb25maXJtZWQgdGhhdCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGlzbid0IHN0YXRpYywgc28gaXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlLlxuXG5Fc3NlbnRpYWxseSwgSSBzZWUgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBhcyBhIGNlbnRyYWwgcG9pbnQsIGdpdmVuIGl0cyBjcml0aWNhbCByb2xlIGluIGBicGZfa3NvY2tfY29ubmVjdGAgYW5kIGBfX3N5c19jb25uZWN0X2ZpbGVgLlxuXG5UaGVyZWZvcmUsIHRoZSB1cGRhdGVkIGxpc3Qgb2YgdGFyZ2V0cyBhbmQgY29uZmlncyBhcmU6XG5cbioqRm9jdXMgU3ltYm9sczoqKlxuXG4qICAgYGJwZl9rc29ja19jcmVhdGVgXG4qICAgYGJwZl9rc29ja19jb25uZWN0YFxuKiAgIGBicGZfa3NvY2tfYWNxdWlyZWBcbiogICBgYnBmX2tzb2NrX3JlbGVhc2VgXG4qICAgYGJwZl9rc29ja19zZW5kYFxuKiAgIGBfX3N5c19jb25uZWN0X3NvY2tldGBcblxuKipDb25maWdzOioqXG5cbiogICBgQ09ORklHX0JQRl9TWVNDQUxMYFxuKiAgIGBDT05GSUdfSU5FVGBcbiogICBgQ09ORklHX0lQVjZgXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IGBicGZfa3NvY2tgIGFkZHMgYnJhbmQgbmV3IGtmdW5jcyBhbmQgbmV3IGVudHJ5cG9pbnRzIHdpdGhpbiB0aGUga2VybmVsIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLiBUaGV5IGFyZSwgaW4gZWZmZWN0LCBuZXcgd2F5cyB0byBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzIHRocm91Z2ggQlBGIHByb2dyYW1zLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYF9fc3lzX2Nvbm5lY3Rfc29ja2V0YCBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIG5ldyBmZWF0dXJlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MjMsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQzOjEwLjIwMzI3NzcyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjQ1NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9rc29ja19jcmVhdGVcIixcbiAgICBcImJwZl9rc29ja19jb25uZWN0XCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJfX3N5c19jb25uZWN0X3NvY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGZlYXR1cmUgYGJwZl9rc29ja2AgdGhhdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cyBmb3IgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jcyBhbmQgdGhlIG5ld2x5IGV4dHJhY3RlZCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGhlbHBlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9rc29ja19jcmVhdGVcIixcbiAgICBcImJwZl9rc29ja19jb25uZWN0XCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJfX3N5c19jb25uZWN0X3NvY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGZlYXR1cmUgYGJwZl9rc29ja2AgdGhhdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cyBmb3IgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IGtmdW5jcyBhbmQgdGhlIG5ld2x5IGV4dHJhY3RlZCBgX19zeXNfY29ubmVjdF9zb2NrZXRgIGhlbHBlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowwgxsx[1] Phase: Succeeded StartedAt: 2026-08-04 17:43:21 +0000 UTC FinishedAt: 2026-08-04 17:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 17:43:21 +0000 UTC FinishedAt: 2026-08-04 17:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2] Phase: Succeeded StartedAt: 2026-08-04 17:43:21 +0000 UTC FinishedAt: 2026-08-04 21:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 17:43:21 +0000 UTC FinishedAt: 2026-08-04 21:22:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","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-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 17:43:21 +0000 UTC FinishedAt: 2026-08-04 17:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 17:43:21 +0000 UTC FinishedAt: 2026-08-04 17:43:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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-workflowwgxsx/series-workflowwgxsx-convert-artifact-88793234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 17:43:31 +0000 UTC FinishedAt: 2026-08-04 17:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 17:43:31 +0000 UTC FinishedAt: 2026-08-04 17:59:50 +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:*edfa7ff3-59a6-4484-80de-948ad56a9920,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-workflowwgxsx/series-workflowwgxsx-convert-artifact-88793234/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": "d56c116c-3443-4bd8-a0ee-7c887e7882a1", "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-workflowwgxsx/series-workflowwgxsx-build-action-2506449424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 17:43:31 +0000 UTC FinishedAt: 2026-08-04 17:59:40 +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:*edfa7ff3-59a6-4484-80de-948ad56a9920,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-workflowwgxsx/series-workflowwgxsx-convert-artifact-88793234/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": "d56c116c-3443-4bd8-a0ee-7c887e7882a1", "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-workflowwgxsx/series-workflowwgxsx-build-action-2506449424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 17:59:50 +0000 UTC FinishedAt: 2026-08-04 17:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 17:59:50 +0000 UTC FinishedAt: 2026-08-04 17:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 17:59:50 +0000 UTC FinishedAt: 2026-08-04 18:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 17:59:50 +0000 UTC FinishedAt: 2026-08-04 17:59:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","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-workflowwgxsx/series-workflowwgxsx-convert-artifact-2984325549/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 18:00:01 +0000 UTC FinishedAt: 2026-08-04 18:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 18:00:01 +0000 UTC FinishedAt: 2026-08-04 18:01:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d56c116c-3443-4bd8-a0ee-7c887e7882a1,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-workflowwgxsx/series-workflowwgxsx-build-action-2506449424/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-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 18:02:05 +0000 UTC FinishedAt: 2026-08-04 18:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 18:02:05 +0000 UTC FinishedAt: 2026-08-04 18:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 18:02:05 +0000 UTC FinishedAt: 2026-08-04 18:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 18:02:05 +0000 UTC FinishedAt: 2026-08-04 18:18:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*edfa7ff3-59a6-4484-80de-948ad56a9920,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-workflowwgxsx/series-workflowwgxsx-convert-artifact-2984325549/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": "5a1eb00f-2a6e-40b8-9e48-6f6be622e647", "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-workflowwgxsx/series-workflowwgxsx-build-action-2737141257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 18:02:05 +0000 UTC FinishedAt: 2026-08-04 18:18:12 +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:*edfa7ff3-59a6-4484-80de-948ad56a9920,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-workflowwgxsx/series-workflowwgxsx-convert-artifact-2984325549/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": "5a1eb00f-2a6e-40b8-9e48-6f6be622e647", "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-workflowwgxsx/series-workflowwgxsx-build-action-2737141257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 18:18:22 +0000 UTC FinishedAt: 2026-08-04 18:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 18:18:22 +0000 UTC FinishedAt: 2026-08-04 18:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 18:18:22 +0000 UTC FinishedAt: 2026-08-04 18:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 18:18:22 +0000 UTC FinishedAt: 2026-08-04 18:20:32 +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:*5a1eb00f-2a6e-40b8-9e48-6f6be622e647,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-workflowwgxsx/series-workflowwgxsx-build-action-2737141257/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-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 21:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 21:22:27 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"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:*d56c116c-3443-4bd8-a0ee-7c887e7882a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a1eb00f-2a6e-40b8-9e48-6f6be622e647,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-workflowwgxsx/series-workflowwgxsx-build-action-2506449424/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-workflowwgxsx/series-workflowwgxsx-build-action-2737141257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 18:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 18:20:46 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"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-workflowwgxsx/series-workflowwgxsx-convert-artifact-522163986/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 18:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 18:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 18:20:41 +0000 UTC FinishedAt: 2026-08-04 18:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 18:20:51 +0000 UTC FinishedAt: 2026-08-04 21:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwgxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","__sys_connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"c8e69e0c-d3fc-45d1-b7e2-7f013358aa5e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 18:20:51 +0000 UTC FinishedAt: 2026-08-04 21:22:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d56c116c-3443-4bd8-a0ee-7c887e7882a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a1eb00f-2a6e-40b8-9e48-6f6be622e647,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-workflowwgxsx/series-workflowwgxsx-build-action-2506449424/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-workflowwgxsx/series-workflowwgxsx-build-action-2737141257/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-workflowwgxsx/series-workflowwgxsx-convert-artifact-522163986/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,}