Name: series-workflowt9nll Phase: Succeeded StartedAt: 2026-08-06 22:01:10 +0000 UTC FinishedAt: 2026-08-07 02:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[0] Phase: Succeeded StartedAt: 2026-08-06 22:01:10 +0000 UTC FinishedAt: 2026-08-06 22:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 22:01:10 +0000 UTC FinishedAt: 2026-08-06 22:17:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET" ], "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": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET" ], "series_id": "0f784152-c860-4589-98f6-be7c17e4f7aa" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ksock_create", "bpf_ksock_connect", "bpf_ksock_send", "bpf_ksock_acquire", "bpf_ksock_release", "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSBmb3IgY3JlYXRpbmcgYW5kIHVzaW5nIGtlcm5lbCBzb2NrZXRzIChicGZfa3NvY2spLiBUaGlzIGFkZHMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyZTQyOWY2MzU3YWRjMGM0Njk2NjNhNmE4MWIwOWU1MWFlMTQ5YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjE3OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCAmIzQzOzEsMzYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSFxuJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luNi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcbiYjNDM7ICogQGZhbWlseTpcdEFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuJiM0MzsgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4mIzQzOyAqIEBwcm90b2NvbDpcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXG4mIzQzOyAqXHRcdG9mIHRoZSBnaXZlbiB0eXBlLlxuJiM0MzsgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG4mIzQzO1x0X191OCBmYW1pbHk7XG4mIzQzO1x0X191OCB0eXBlO1xuJiM0MztcdF9fdTggcHJvdG9jb2w7XG4mIzQzO1x0X191OCByZXNlcnZlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzc1xuJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbiYjNDM7ICovXG4mIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uODk2NDUyOGUzODIzNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdFx0ICAgICBpbnQgYWRkcmxlbik7XG4mIzQzO2V4dGVybiBpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4mIzQzO1x0XHRcdFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZDkyNTE5N2MyZTVmNy4uZTk4ZTM5YzIxMmQ1ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3MSw2ICYjNDM7NDQ3MSw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuICNpZmRlZiBDT05GSUdfQ1JZUFRPXG4gQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfSU5FVFxuJiM0MztCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4mIzQzOyNlbmRpZlxuIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG4gXG4gc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGIzZmRjYjRlMzU1ZmEuLmE5Mjk1Yjc4NTkwMTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGVcbkBAIC00NCw2ICYjNDM7NDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICYjNDM7PSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xuJiM0MztpZm5lcSAoJChDT05GSUdfSU5FVCksKVxuJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2sub1xuJiM0MztlbmRpZlxuIG9iai0kKENPTkZJR19PRilcdCYjNDM7PSBvZl9uZXQub1xuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUzNzg5NmRjMzIxZDZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5AQCAtMCwwICYjNDM7MSwzMzEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfa3NvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbiYjNDM7ICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAdXNhZ2U6XHRSZWZlcmVuY2UgY291bnRlci5cbiYjNDM7ICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29jayB7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqc29jaztcbiYjNDM7XHRyZWZjb3VudF90IHVzYWdlO1xuJiM0MztcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbiYjNDM7XG4mIzQzO1x0c29ja19yZWxlYXNlKGtzLVx1MDAzZXNvY2spO1xuJiM0MztcdGtmcmVlKGtzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4mIzQzO1x0ICogY2xlYXJlZCBjdXJyZW50LVx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbiYjNDM7ICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxuJiM0MzsgKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbiYjNDM7ICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxuJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbiYjNDM7XHRcdCBpbnQgKmVycl9fdW5pbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxuJiM0MztcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbiYjNDM7XHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuJiM0MztcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xuJiM0MztcdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4mIzQzO1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuJiM0MztcdFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcHJvdG9jb2wpLFxuJiM0MztcdFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xuJiM0MztcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzID0ga3phbGxvY19vYmooKmtzKTtcbiYjNDM7XHRpZiAoIWtzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXG4mIzQzO1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4mIzQzO1x0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXG4mIzQzO1x0XHRcdCAgXHUwMDI2a3MtXHUwMDNlc29jayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XG4mIzQzO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0a2ZyZWUoa3MpO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4mIzQzOyAqIEBhZGRyOlx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXG4mIzQzOyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4mIzQzOyAqXG4mIzQzOyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4mIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbiYjNDM7XHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xuJiM0MztcdGludCBhZGRybGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xuJiM0MztcdG1lbWNweShcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUOlxuJiM0MztcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25uZWN0X3NvY2tldChrcy1cdTAwM2Vzb2NrLCBcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGFcbiYjNDM7ICpcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbiYjNDM7ICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4mIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbiYjNDM7e1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a3MtXHUwMDNldXNhZ2UpKSB7XG4mIzQzO1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuJiM0MztcdFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2a3MtXHUwMDNlcndvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0Mzt9XG4mIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxuJiM0MzsgKiBAZGF0YTpcdFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC5cbiYjNDM7ICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIChtYXggNjU1MzUgYnl0ZXMpLlxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxuJiM0MzsgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGt2ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxuJiM0MztcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cbiYjNDM7XHRpZiAoZGF0YV9fc3ogXHUwMDNlIElQX01BWF9NVFUpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy1cdTAwM2Vzb2NrLCBcdTAwMjZtc2csIFx1MDAyNmlvdiwgMSwgZGF0YV9fc3opO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxuJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiYjNDM7e1xuJiM0MztcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcywga2Z1bmNfaWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQgIT0gYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZFswXSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7XHQuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcylcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbiYjNDM7XHRcdHtcbiYjNDM7XHRcdFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcbiYjNDM7XHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbiYjNDM7XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxuJiM0MztcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi4xMjZhNjc0ZjUzNGQwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgJiM0MzsyMTAzLDIwIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4gXHRyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApO1xuIH1cbiBcbiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuJiM0MztcdFx0XHQgaW50IGFkZHJsZW4sIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLFxuJiM0MztcdFx0XHRcdCAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuJiM0MztcdFx0XHRcdCAgICBhZGRybGVuLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKlx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcbiAgKlx0aXMgaW4gdXNlciBzcGFjZSBzbyB3ZSB2ZXJpZnkgaXQgaXMgT0sgYW5kIG1vdmUgaXQgdG8ga2VybmVsIHNwYWNlLlxuQEAgLTIxMTksMjMgJiM0MzsyMTMzLDEzIEBAIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHQgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tXHRpbnQgZXJyO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpO1xuLVx0aWYgKCFzb2NrKSB7XG4tXHRcdGVyciA9IC1FTk9UU09DSztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRlcnIgPVxuLVx0ICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghc29jaylcbiYjNDM7XHRcdHJldHVybiAtRU5PVFNPQ0s7XG4gXG4tXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi1cdFx0XHRcdFx0ICAgIGFkZHJsZW4sIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tb3V0OlxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbiYjNDM7XHRcdFx0XHQgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmIxYTMzMmViM2RhMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCAmIzQzOzEsMTMzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0d29ya19oZWxwZXJzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfbHNtLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19sc21fdmVyaWZpZXIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1RFU1QgXCYjMzQ7a3NvY2tfbHNtX25zXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcbiYjNDM7I2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc29ja190ZXN0X2VudiB7XG4mIzQzO1x0Ym9vbCBuZXRuc19jcmVhdGVkO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuJiM0MztcdGludCByZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0ge1xuJiM0MztcdFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxuJiM0MztcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4mIzQzO1x0XHQuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSBSRUNWX1RJTUVPVVRfU0VDIH07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gLTE7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1RFU1QpO1xuJiM0MztcdGVudi1cdTAwM2VuZXRuc19jcmVhdGVkID0gdHJ1ZTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLW5ldCAlcyBsaW5rIHNldCBsbyB1cFwmIzM0OywgTlNfVEVTVCk7XG4mIzQzO1xuJiM0MztcdGVudi1cdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZW52LVx1MDAzZW5zdG9rZW4sIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXHUwMDNlcmZkLCBcJiMzNDtyZWNlaXZlciBzb2NrZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBiaW5kKGVudi1cdTAwM2VyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YmluZCByZWNlaXZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldHNvY2tvcHQoZW52LVx1MDAzZXJmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LCBzaXplb2YodHYpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldCByY3Z0aW1lb1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9rc29ja19sc20odm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiB0cmlnZ2VyX2FkZHIgPSB7XG4mIzQzO1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4mIzQzO1x0Y2hhciByZWN2X2RhdGFbc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpXSA9IHt9O1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XHRpbnQgdGZkID0gLTE7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlwdjRfcmVtb3RlID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZW1vdGVfcG9ydCA9IFJFQ1ZfUE9SVDtcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7a3NvY2tfc2V0dXAgcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCYjMzQ7a3NvY2tfc2V0dXAgcmV0dmFsXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAyOiBBdHRhY2ggTFNNIHByb2cgYW5kIHRyaWdnZXIgc29ja2V0X2JpbmQgZnJvbSB1c2Vyc3BhY2UgKi9cbiYjNDM7XHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc29ja2V0X2JpbmQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kLFxuJiM0MztcdFx0XHQgICBcJiMzNDthdHRhY2ggc29ja2V0X2JpbmQgbHNtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0dGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwmIzM0O3RyaWdnZXIgc29ja2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xuJiM0MztcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IDA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0cmlnZ2VyIGJpbmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDM6IFZlcmlmeSB0aGUgTFNNIGhvb2sgc2VudCB0aGUgbm90aWZpY2F0aW9uICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfcmV0LCBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7TFNNIHNlbmQgYnl0ZXNcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRuID0gcmVjdmZyb20oZW52LnJmZCwgcmVjdl9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCYjMzQ7cmVjdmZyb20gbGVuXCYjMzQ7KSlcbiYjNDM7XHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BheWxvYWQgbWF0Y2hcJiMzNDspO1xuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAodGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHRmZCk7XG4mIzQzO1x0aWYgKGVudi5yZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZW52LnJmZCk7XG4mIzQzO1x0aWYgKGVudi5uc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMoZW52Lm5zdG9rZW4pO1xuJiM0MztcdGlmIChlbnYubmV0bnNfY3JlYXRlZClcbiYjNDM7XHRcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwmIzM0OywgTlNfVEVTVCk7XG4mIzQzO1x0a3NvY2tfbHNtX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja193cS5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja193cV9zdGFydCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuJiM0MztcdFx0dXNsZWVwKDEwMDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHQgIFwmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5AQCAtMCwwICYjNDM7MSw1OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSFxuJiM0MzsjZGVmaW5lIF9LU09DS19DT01NT05fSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXJybm8uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTT0NLX0RHUkFNXHQyXG4mIzQzOyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4mIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4mIzQzO1x0XHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcbiYjNDM7c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xuJiM0MztcbiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBfX2tzb2NrX2N0eF9tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2X19rc29ja19jdHhfbWFwLCBcdTAwMjZrZXkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4mIzQzO1xuJiM0MztcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4mIzQzO1x0aWYgKCF2KSB7XG4mIzQzO1x0XHRicGZfa3NvY2tfcmVsZWFzZShjdHgpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBjdHgpO1xuJiM0MztcdGlmIChvbGQpIHtcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKG9sZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSBcJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29ja1wmIzM0OztcbiYjNDM7XG4mIzQzO19fYmUzMiBpcHY0X3JlbW90ZTtcbiYjNDM7X191MTYgcmVtb3RlX3BvcnQ7XG4mIzQzO2ludCB0YXJnZXRfcGlkO1xuJiM0MztpbnQgc2VuZF9yZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuJiM0MztcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbiYjNDM7XHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4mIzQzO1x0aWYgKCFrcylcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTtcbiYjNDM7XHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGtzb2NrX2N0eF9pbnNlcnQoa3MpO1xuJiM0MztcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL3NvY2tldF9iaW5kXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X2JpbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyxcbiYjNDM7XHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xuJiM0MztcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdikge1xuJiM0MztcdFx0c2VuZF9yZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzID0gTlVMTDtcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHRtcCA9IHYtXHUwMDNlY3R4O1xuJiM0MztcdGlmICh0bXApXG4mIzQzO1x0XHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtzKSB7XG4mIzQzO1x0XHRzZW5kX3JldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Yjk2OWUwM2I2ZDY5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbkBAIC0wLDAgJiM0MzsxLDM2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSBcJiMzNDtkdW1teSBkYXRhXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL3NvY2tldF9zZW5kbXNnXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2JwZl9rc29ja19zZW5kIGlzIHJlamVjdGVkIGZyb20gc29ja2V0X3NlbmRtc2cgTFNNIGhvb2tcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfa3NvY2tfc2VuZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4mIzQzO1x0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XG4mIzQzO1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbiYjNDM7XHRpZiAoIXYpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIE5VTEwpO1xuJiM0MztcdGlmICgha3MpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbkBAIC0wLDAgJiM0MzsxLDYyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3RyYWNpbmdfbmV0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXJybm8uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGtzb2NrX3dxX3ZhbHVlIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3dxIHdvcms7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO1x0X190eXBlKGtleSwgdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XG4mIzQzO30gd29ya19tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2ludCBjcmVhdGVfZXJyO1xuJiM0Mzt1MzIgY2FsbGJhY2tfZG9uZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHMgPSB7XG4mIzQzO1x0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC50eXBlID0gU09DS19ER1JBTSxcbiYjNDM7XHRcdC5wcm90b2NvbCA9IElQUFJPVE9fVURQLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFx1MDAyNmVycik7XG4mIzQzO1x0aWYgKGtzKVxuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcdGNyZWF0ZV9lcnIgPSBlcnI7XG4mIzQzO1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2Y2FsbGJhY2tfZG9uZSwgMSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTtcbiYjNDM7XHR1MzIga2V5ID0gMDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d29ya19tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdGVyciA9IGJwZl93cV9pbml0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIFx1MDAyNndvcmtfbWFwLCAwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Y29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIGZvciBjcmVhdGluZyBhbmQgdXNpbmcga2VybmVsIHNvY2tldHMgKGJwZl9rc29jaykuIFRoaXMgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJlNDI5ZjYzNTdhZGMwYzQ2OTY2M2E2YTgxYjA5ZTUxYWUxNDlhZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMjI6MTc6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApAQCAtMCwwICYjNDM7MSwzNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfQlBGX0tTT0NLX0gKJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVycwomIzQzOyAqIEBmYW1pbHk6CUFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LgomIzQzOyAqIEB0eXBlOglTb2NrZXQgdHlwZTogb25seSBTT0NLX0RHUkFNIHN1cHBvcnRlZCBmb3Igbm93LgomIzQzOyAqIEBwcm90b2NvbDoJUHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2wKJiM0MzsgKgkJb2YgdGhlIGdpdmVuIHR5cGUuCiYjNDM7ICogQHJlc2VydmVkOglNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgewomIzQzOwlfX3U4IGZhbWlseTsKJiM0MzsJX191OCB0eXBlOwomIzQzOwlfX3U4IHByb3RvY29sOwomIzQzOwlfX3U4IHJlc2VydmVkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MKJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqLwomIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMmE4ZDdiMTRmMWQxMS4uODk2NDUyOGUzODIzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7CiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7CiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAogCQkJICAgICBpbnQgYWRkcmxlbik7CiYjNDM7ZXh0ZXJuIGludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKJiM0MzsJCQkJaW50IGFkZHJsZW4sIGludCBmbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiAJCQkgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpOwogZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGQ5MjUxOTdjMmU1ZjcuLmU5OGUzOWMyMTJkNWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTQ0NzEsNiAmIzQzOzQ0NzEsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdCkKICNpZmRlZiBDT05GSUdfQ1JZUFRPCiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eCkKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSU5FVAomIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaykKJiM0MzsjZW5kaWYKIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpCiAKIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGUKQEAgLTQ0LDYgJiM0Mzs0NCw5IEBAIG9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm8KIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vCiYjNDM7aWZuZXEgKCQoQ09ORklHX0lORVQpLCkKJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2subwomIzQzO2VuZGlmCiBvYmotJChDT05GSUdfT0YpCSYjNDM7PSBvZl9uZXQubwogb2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qubwogb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41Mzc4OTZkYzMyMWQ2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvYnBmX2tzb2NrLmMKQEAgLTAsMCAmIzQzOzEsMzMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9rc29jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrIC0gcmVmY291bnRlZCBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0CiYjNDM7ICogQHNvY2s6CVRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQHVzYWdlOglSZWZlcmVuY2UgY291bnRlci4KJiM0MzsgKiBAcndvcms6CVJDVSB3b3JrIGZvciBkZWZlcnJlZCBjbGVhbnVwIChzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYnBmX2tzb2NrIHsKJiM0MzsJc3RydWN0IHNvY2tldCAqc29jazsKJiM0MzsJcmVmY291bnRfdCB1c2FnZTsKJiM0MzsJc3RydWN0IHJjdV93b3JrIHJ3b3JrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0KJiM0MzsJCWNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspOwomIzQzOwomIzQzOwlzb2NrX3JlbGVhc2Uoa3MtJmd0O3NvY2spOwomIzQzOwlrZnJlZShrcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKCkKJiM0MzsJICogY2xlYXJlZCBjdXJyZW50LSZndDtuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7IGN1cnJlbnQtJmd0O25zcHJveHk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFjawomIzQzOyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzayYjMzk7cyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIEBvcHRzOglQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy4KJiM0MzsgKiBAb3B0c19fc3o6CVNpemUgb2YgdGhlIG9wdHMgc3RydWN0LgomIzQzOyAqIEBlcnJfX3VuaW5pdDoJSW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICoKJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeiwKJiM0MzsJCSBpbnQgKmVycl9fdW5pbml0KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cAomIzQzOwkgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvCiYjNDM7CSAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpewomIzQzOwkJLmZhbWlseSA9IFJFQURfT05DRShvcHRzLSZndDtmYW1pbHkpLAomIzQzOwkJLnR5cGUgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7dHlwZSksCiYjNDM7CQkucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cHJvdG9jb2wpLAomIzQzOwkJLnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKG9wdHNfY29weS5yZXNlcnZlZCkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUICZhbXA7JmFtcDsgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikgewomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQICZhbXA7JmFtcDsgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3MgPSBremFsbG9jX29iaigqa3MpOwomIzQzOwlpZiAoIWtzKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSwKJiM0MzsJICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpCiYjNDM7CSAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGNhbGxlci4KJiM0MzsJICovCiYjNDM7CWVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsCiYjNDM7CQkJICAmYW1wO2tzLSZndDtzb2NrKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGOwomIzQzOwlrcy0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLOwomIzQzOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtrcy0mZ3Q7dXNhZ2UsIDEpOwomIzQzOwlwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIGtzOwomIzQzOwomIzQzO2Vycl9mcmVlOgomIzQzOwlrZnJlZShrcyk7CiYjNDM7ZXJyX291dDoKJiM0MzsJcHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4KJiM0MzsgKiBAYWRkcjoJUG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQGFkZHJfX3N6OglTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLgomIzQzOyAqCiYjNDM7ICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkCiYjNDM7ICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLAomIzQzOwkJCQkgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLAomIzQzOwkJCQkgIHUzMiBhZGRyX19zeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhOwomIzQzOwlpbnQgYWRkcmxlbjsKJiM0MzsKJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi8KJiM0MzsJbWVtY3B5KCZhbXA7c2EsIGFkZHIsIHNpemVvZigqYWRkcikpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNhLnNzX2ZhbWlseSkgewomIzQzOwljYXNlIEFGX0lORVQ6CiYjNDM7CQlhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiYjNDM7CQlicmVhazsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKJiM0MzsJY2FzZSBBRl9JTkVUNjoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb25uZWN0X3NvY2tldChrcy0mZ3Q7c29jaywgJmFtcDtzYSwgYWRkcmxlbiwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGEKJiM0MzsgKgl0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IKJiM0MzsgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2tzLSZndDt1c2FnZSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIGtzOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqIEBrczoJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS4KJiM0MzsgKgomIzQzOyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYQomIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3MtJmd0O3VzYWdlKSkgewomIzQzOwkJSU5JVF9SQ1VfV09SSygmYW1wO2tzLSZndDtyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTsKJiM0MzsJCXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsICZhbXA7a3MtJmd0O3J3b3JrKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpCiYjNDM7ewomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7fQomIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOgkJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLgomIzQzOyAqIEBkYXRhOglQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuCiYjNDM7ICogQGRhdGFfX3N6OglTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuCiYjNDM7ICoKJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcAomIzQzOyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwKJiM0MzsJCQkgICAgICAgdTMyIGRhdGFfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsCiYjNDM7CQkuaW92X2xlbiA9IGRhdGFfX3N6LAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogRWFybHkgY2hlY2sgZm9yIFVEUC4gRXhhY3QgbGltaXRzIGVuZm9yY2VkIGJ5IGtlcm5lbF9zZW5kbXNnKCkuICovCiYjNDM7CWlmIChkYXRhX19zeiAmZ3Q7IElQX01BWF9NVFUpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy0mZ3Q7c29jaywgJmFtcDttc2csICZhbXA7aW92LCAxLCBkYXRhX19zeik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLAomIzQzO307CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKQomIzQzOwomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDtrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiAtRUFDQ0VTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywKJiM0MzsJLmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzO0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7CiYjNDM7CQl7CiYjNDM7CQkJLmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSwKJiM0MzsJCQkua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2tzb2NrX2luaXRfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLAomIzQzOwkJCQkJICAgICAgICZhbXA7a3NvY2tfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsCiYjNDM7CQkJCQkJICBBUlJBWV9TSVpFKGJwZl9rc29ja19kdG9ycyksCiYjNDM7CQkJCQkJICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzOwomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLjEyNmE2NzRmNTM0ZDAgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIxMDMsNiAmIzQzOzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKIAlyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApOwogfQogCiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJCSBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtjb25uZWN0KHNvY2ssCiYjNDM7CQkJCSAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgYWRkcmxlbiwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qCiAgKglBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzcwogICoJaXMgaW4gdXNlciBzcGFjZSBzbyB3ZSB2ZXJpZnkgaXQgaXMgT0sgYW5kIG1vdmUgaXQgdG8ga2VybmVsIHNwYWNlLgpAQCAtMjExOSwyMyAmIzQzOzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsCiAJCSAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKLQlpbnQgZXJyOwogCiAJc29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpOwotCWlmICghc29jaykgewotCQllcnIgPSAtRU5PVFNPQ0s7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9Ci0JICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKCFzb2NrKQomIzQzOwkJcmV0dXJuIC1FTk9UU09DSzsKIAotCWVyciA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsCi0JCQkJCSAgICBhZGRybGVuLCBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sCiYjNDM7CQkJCSAgICBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7CiB9CiAKIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZiMWEzMzJlYjNkYTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCkBAIC0wLDAgJiM0MzsxLDEzMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja19sc20uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2xzbV9ucyYjMzQ7CiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3NwomIzQzOyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1CiYjNDM7CiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHsKJiM0MzsJYm9vbCBuZXRuc19jcmVhdGVkOwomIzQzOwlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjsKJiM0MzsJaW50IHJmZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGtzb2NrX3Rlc3RfZW52X3NldHVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7CiYjNDM7CQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCiYjNDM7CQkuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSwKJiM0MzsJCS5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltZW1zZXQoZW52LCAwLCBzaXplb2YoKmVudikpOwomIzQzOwllbnYtJmd0O3JmZCA9IC0xOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVEVTVCk7CiYjNDM7CWVudi0mZ3Q7bmV0bnNfY3JlYXRlZCA9IHRydWU7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIC1uZXQgJXMgbGluayBzZXQgbG8gdXAmIzM0OywgTlNfVEVTVCk7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVEVTVCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihlbnYtJmd0O25zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJZW52LSZndDtyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChlbnYtJmd0O3JmZCwgJiMzNDtyZWNlaXZlciBzb2NrZXQmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVyciA9IGJpbmQoZW52LSZndDtyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtiaW5kIHJlY2VpdmVyJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGVudi0mZ3Q7cmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwgc2l6ZW9mKHR2KSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXQgcmN2dGltZW8mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52OwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBrc29ja19sc20gKnNrZWw7CiYjNDM7CWNoYXIgcmVjdl9kYXRhW3NpemVvZihza2VsLSZndDtkYXRhLSZndDtzZW5kX2RhdGEpXSA9IHt9OwomIzQzOwlzc2l6ZV90IG47CiYjNDM7CWludCB0ZmQgPSAtMTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICgha3NvY2tfdGVzdF9lbnZfc2V0dXAoJmFtcDtlbnYpKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSB0aGUga3NvY2sgKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpcHY0X3JlbW90ZSA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmtzb2NrX3NldHVwKSwKJiM0MzsJCQkJICAgICAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7a3NvY2tfc2V0dXAgcnVuJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtrc29ja19zZXR1cCByZXR2YWwmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovCiYjNDM7CXNrZWwtJmd0O2xpbmtzLmtzb2NrX3NvY2tldF9iaW5kID0KJiM0MzsJCWJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtJmd0O3Byb2dzLmtzb2NrX3NvY2tldF9iaW5kKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2xpbmtzLmtzb2NrX3NvY2tldF9iaW5kLAomIzQzOwkJCSAgICYjMzQ7YXR0YWNoIHNvY2tldF9iaW5kIGxzbSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQodGZkLCAmIzM0O3RyaWdnZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RhcmdldF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJZXJyID0gYmluZCh0ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3RyaWdnZXJfYWRkciwgc2l6ZW9mKHRyaWdnZXJfYWRkcikpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RhcmdldF9waWQgPSAwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dHJpZ2dlciBiaW5kJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDM6IFZlcmlmeSB0aGUgTFNNIGhvb2sgc2VudCB0aGUgbm90aWZpY2F0aW9uICovCiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfcmV0LCBzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKSwKJiM0MzsJCSAgICAgICAmIzM0O0xTTSBzZW5kIGJ5dGVzJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwluID0gcmVjdmZyb20oZW52LnJmZCwgcmVjdl9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChBU1NFUlRfRVEobiwgc2l6ZW9mKHJlY3ZfZGF0YSksICYjMzQ7cmVjdmZyb20gbGVuJiMzNDspKQomIzQzOwkJQVNTRVJUX01FTUVRKHJlY3ZfZGF0YSwgc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwKJiM0MzsJCQkgICAgICYjMzQ7cGF5bG9hZCBtYXRjaCYjMzQ7KTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlpZiAodGZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0ZmQpOwomIzQzOwlpZiAoZW52LnJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZW52LnJmZCk7CiYjNDM7CWlmIChlbnYubnN0b2tlbikKJiM0MzsJCWNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTsKJiM0MzsJaWYgKGVudi5uZXRuc19jcmVhdGVkKQomIzQzOwkJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxJiMzNDssIE5TX1RFU1QpOwomIzQzOwlrc29ja19sc21fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja19sc21fdmVyaWZpZXIodm9pZCkKJiM0Mzt7CiYjNDM7CVJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjViOWM2Y2MzMDM5MjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9wcm9ncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX3dxLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCBrc29ja193cSAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2tzb2NrX3dxIG9wZW4gYW5kIGxvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O2tzb2NrX3dxX3N0YXJ0IHJldHZhbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3aGlsZSAoIV9fYXRvbWljX2xvYWRfbigmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpCiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLAomIzQzOwkJICAmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrc29ja193cV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaApAQCAtMCwwICYjNDM7MSw1OCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9ICiYjNDM7I2RlZmluZSBfS1NPQ0tfQ09NTU9OX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2Vycm5vLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgU09DS19ER1JBTQkyCiYjNDM7I2RlZmluZSBJUFBST1RPX1VEUAkxNwomIzQzOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywKJiM0MzsJCQkJICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07CiYjNDM7aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkciwKJiM0MzsJCSAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3NvY2tfY3R4X2luc2VydChzdHJ1Y3QgYnBmX2tzb2NrICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKm9sZDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KSB7CiYjNDM7CQlicGZfa3NvY2tfcmVsZWFzZShjdHgpOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgY3R4KTsKJiM0MzsJaWYgKG9sZCkgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uob2xkKTsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYwpAQCAtMCwwICYjNDM7MSw4OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7Y2hhciBzZW5kX2RhdGFbMzJdID0gJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29jayYjMzQ7OwomIzQzOwomIzQzO19fYmUzMiBpcHY0X3JlbW90ZTsKJiM0MztfX3UxNiByZW1vdGVfcG9ydDsKJiM0MztpbnQgdGFyZ2V0X3BpZDsKJiM0MztpbnQgc2VuZF9yZXQgPSAtMTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTsKJiM0MzsJdW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNOwomIzQzOwljcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQOwomIzQzOwomIzQzOwlrcyA9IGJwZl9rc29ja19jcmVhdGUoJmFtcDtjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgJmFtcDtlcnIpOwomIzQzOwlpZiAoIWtzKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTsKJiM0MzsJYWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCAmYW1wO2FkZHIsIHNpemVvZihhZGRyKSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVFWElTVCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfYmluZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhrc29ja19zb2NrZXRfYmluZCwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLAomIzQzOwkgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KSB7CiYjNDM7CQlzZW5kX3JldCA9IC1FTk9FTlQ7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzID0gTlVMTDsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJdG1wID0gdi0mZ3Q7Y3R4OwomIzQzOwlpZiAodG1wKQomIzQzOwkJa3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCXNlbmRfcmV0ID0gLUVOT0VOVDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41Yjk2OWUwM2I2ZDY5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbV92ZXJpZmllci5jCkBAIC0wLDAgJiM0MzsxLDM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSAmIzM0O2R1bW15IGRhdGEmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDticGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKJiM0MzsJICAgICBpbnQgc2l6ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgTlVMTCk7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3dxIHdvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpOwomIzQzO30gd29ya19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IGNyZWF0ZV9lcnI7CiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHsKJiM0MzsJCS5mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnR5cGUgPSBTT0NLX0RHUkFNLAomIzQzOwkJLnByb3RvY29sID0gSVBQUk9UT19VRFAsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3NvY2tfY3JlYXRlKCZhbXA7b3B0cywgc2l6ZW9mKG9wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmIChrcykKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJY3JlYXRlX2VyciA9IGVycjsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtjYWxsYmFja19kb25lLCAxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dvcmtfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJZXJyID0gYnBmX3dxX2luaXQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgJmFtcDt3b3JrX21hcCwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwllcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsdWUtJmd0O3dvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBicGZfd3Ffc3RhcnQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTYzCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDY5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBCUEYgS2VybmVsIFNvY2tldCBBUEkqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIEJQRiBrZnVuYyBBUEkgZm9yIGtlcm5lbCBzb2NrZXRzLiBMb29rcyBsaWtlIHdlIGhhdmUgZml2ZSBuZXcgZnVuY3Rpb25zOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfc2VuZGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGFuZCBgYnBmX2tzb2NrX3JlbGVhc2VgLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSBhY2Nlc3NpYmxlIGZyb20gQlBGIHByb2dyYW1zLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXM6IGBuZXQvY29yZS9icGZfa3NvY2suY2AsIGBuZXQvc29ja2V0LmNgLCB0aGUgdmVyaWZpZXIsIGFuZCBhIGNvdXBsZSBvZiBoZWFkZXIgZmlsZXMuCgpGaXJzdCBvcmRlciBvZiBidXNpbmVzczogY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTG9va2luZyBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBpdCBhcHBlYXJzIHdlIG5lZWQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBpdHNlbGYuIFRoZSBuZXcga2Z1bmNzIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzLCBvYnZpb3VzbHkuIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBubyBkb3VidC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiBBbmQsIGZyb20gdGhlIG90aGVyIGZpbGVzLCBgY29ubmVjdF9zb2NrZXRgIGZyb20gYG5ldC9zb2NrZXQuY2Agc2hvdWxkIGFsc28gYmUgb24gdGhlIGxpc3QuCgpJIHNob3VsZCB2ZXJpZnkgdGhhdCBgY29ubmVjdF9zb2NrZXRgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgbm90IHN0YXRpYy4gQWxyaWdodCwgcXVpY2sgY2hlY2sgb2YgYG5ldC9zb2NrZXQuY2A6IHl1cCwgYGNvbm5lY3Rfc29ja2V0YCBpcyB0aGVyZSBhbmQgbm90IHN0YXRpYy4gR29vZCB0byBnby4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgZGV0YWlscy4KCldhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzLiBTY2FubmluZyBgYnBmX2tzb2NrLmNgLCBpdCBsb29rcyBsaWtlIGl0IHVzZXMgYHF1ZXVlX3JjdV93b3JrYCwgYHNvY2tfY3JlYXRlYCwgYHNvY2tfcmVsZWFzZWAsIGFuZCBga2VybmVsX3NlbmRtc2dgLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZSBva2F5IHdpdGggdGhlIHR3byBjb25maWdzLCBidXQgbGV0cyBkbyBhIHF1aWNrIGRvdWJsZSBjaGVjay4gUmlnaHQsIGBuZXQvY29yZS9NYWtlZmlsZWAsIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVwLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYC4gRXhjZWxsZW50LgoKU28sIGp1c3QgdG8gcmVpdGVyYXRlLCBvdXIgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB3aWxsIGJlOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfc2VuZGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgY29ubmVjdF9zb2NrZXRgLgoKT2theSwgKm5vdyogSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSBmb3IgY3JlYXRpbmcgYW5kIHVzaW5nIGtlcm5lbCBzb2NrZXRzIChicGZfa3NvY2spLiBUaGlzIGFkZHMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Y29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIGZvciBjcmVhdGluZyBhbmQgdXNpbmcga2VybmVsIHNvY2tldHMgKGJwZl9rc29jaykuIFRoaXMgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MTc6MDMuMDY5Nzg1MDk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTk2MDgxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCB1c2luZyBrZXJuZWwgc29ja2V0cyAoYnBmX2tzb2NrKS4gVGhpcyBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjE3OjAzLjA2OTgyMjAxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMjU4ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjJlNDI5ZjYzNTdhZGMwYzQ2OTY2M2E2YTgxYjA5ZTUxYWUxNDlhZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjE3OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcXG4rI2RlZmluZSBfQlBGX0tTT0NLX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzXFxuKyAqIEBmYW1pbHk6XFx0QWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuXFxuKyAqIEB0eXBlOlxcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXFxuKyAqIEBwcm90b2NvbDpcXHRQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbFxcbisgKlxcdFxcdG9mIHRoZSBnaXZlbiB0eXBlLlxcbisgKiBAcmVzZXJ2ZWQ6XFx0TXVzdCBiZSB6ZXJvLiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS5cXG4rICovXFxuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xcbitcXHRfX3U4IGZhbWlseTtcXG4rXFx0X191OCB0eXBlO1xcbitcXHRfX3U4IHByb3RvY29sO1xcbitcXHRfX3U4IHJlc2VydmVkO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXFxuKyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuXFxuKyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLlxcbisgKi9cXG4rdW5pb24gYnBmX2tzb2NrX2FkZHIge1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7XFxuK307XFxuK1xcbisjZW5kaWYgLyogX0JQRl9LU09DS19IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uODk2NDUyOGUzODIzNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxcbkBAIC00NjEsNiArNDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTtcXG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbiBcXHRcXHRcXHQgICAgIGludCBhZGRybGVuKTtcXG4rZXh0ZXJuIGludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcXG4rXFx0XFx0XFx0XFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XFxuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcXG4gXFx0XFx0XFx0ICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKTtcXG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBkOTI1MTk3YzJlNWY3Li5lOThlMzljMjEyZDVmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC00NDcxLDYgKzQ0NzEsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcXG4gI2lmZGVmIENPTkZJR19DUllQVE9cXG4gQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0lORVRcXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxcbisjZW5kaWZcXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcXG4gXFxuIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZClcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxcbmluZGV4IGIzZmRjYjRlMzU1ZmEuLmE5Mjk1Yjc4NTkwMTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxcbkBAIC00NCw2ICs0NCw5IEBAIG9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbiBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG4raWZuZXEgKCQoQ09ORklHX0lORVQpLClcXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xcbitlbmRpZlxcbiBvYmotJChDT05GSUdfT0YpXFx0Kz0gb2ZfbmV0Lm9cXG4gb2JqLSQoQ09ORklHX05FVF9URVNUKSArPSBuZXRfdGVzdC5vXFxuIG9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Mzc4OTZkYzMyMWQ2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL25ldC9jb3JlL2JwZl9rc29jay5jXFxuQEAgLTAsMCArMSwzMzEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfa3NvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcXG4rICogQHNvY2s6XFx0VGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC5cXG4rICogQHVzYWdlOlxcdFJlZmVyZW5jZSBjb3VudGVyLlxcbisgKiBAcndvcms6XFx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29jayB7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuK1xcdHJlZmNvdW50X3QgdXNhZ2U7XFxuK1xcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3MgPVxcbitcXHRcXHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcXG4rXFxuK1xcdHNvY2tfcmVsZWFzZShrcy1cXHUwMDNlc29jayk7XFxuK1xcdGtmcmVlKGtzKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKClcXG4rXFx0ICogY2xlYXJlZCBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0tUSFJFQUQpIFxcdTAwMjZcXHUwMDI2IGN1cnJlbnQtXFx1MDAzZW5zcHJveHk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICpcXG4rICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC5cXG4rICpcXG4rICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCAoc29ja19jcmVhdGUpLCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxcbisgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFja1xcbisgKiBkb2VzIG5vdCByZXRhaW4gdGhlIGludm9raW5nIHRhc2sncyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cXG4rICpcXG4rICogQG9wdHM6XFx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXFxuKyAqIEBvcHRzX19zejpcXHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cXG4rICogQGVycl9fdW5pbml0OlxcdEludGVnZXIgdG8gc3RvcmUgZXJyb3IgY29kZSB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcXG4rYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXFxuK1xcdFxcdCBpbnQgKmVycl9fdW5pbml0KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwXFxuK1xcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cXG4rXFx0ICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xcbitcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xcbitcXHRcXHQuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZWZhbWlseSksXFxuK1xcdFxcdC50eXBlID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXR5cGUpLFxcbitcXHRcXHQucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcHJvdG9jb2wpLFxcbitcXHRcXHQucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcmVzZXJ2ZWQpLFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKG9wdHNfY29weS5yZXNlcnZlZCkge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xcbitcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcXHUwMDI2XFx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xcbitcXHRcXHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtzID0ga3phbGxvY19vYmooKmtzKTtcXG4rXFx0aWYgKCFrcykge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSxcXG4rXFx0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXFxuK1xcdCAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJ3MgY2FsbGVyLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2a3MtXFx1MDAzZXNvY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbitcXG4rXFx0a3MtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7XFxuK1xcdGtzLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XFxuK1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmtzLVxcdTAwM2V1c2FnZSwgMSk7XFxuK1xcdHB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpO1xcbitcXHRyZXR1cm4ga3M7XFxuK1xcbitlcnJfZnJlZTpcXG4rXFx0a2ZyZWUoa3MpO1xcbitlcnJfb3V0OlxcbitcXHRwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy5cXG4rICogQGtzOlxcdFxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LlxcbisgKiBAYWRkcjpcXHRQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy5cXG4rICogQGFkZHJfX3N6OlxcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXFxuKyAqXFxuKyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgdTMyIGFkZHJfX3N6KVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xcbitcXHRpbnQgYWRkcmxlbjtcXG4rXFxuK1xcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoIWFkZHIgfHwgYWRkcl9fc3ogIT0gc2l6ZW9mKCphZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBLZnVuYyBtZW1vcnkgYXJndW1lbnRzIG1heSBiZSB1bmFsaWduZWQuICovXFxuK1xcdG1lbWNweShcXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xcbitcXG4rXFx0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcXG4rXFx0Y2FzZSBBRl9JTkVUOlxcbitcXHRcXHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7XFxuK1xcdFxcdGJyZWFrO1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0Y2FzZSBBRl9JTkVUNjpcXG4rXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICogQGtzOlxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxcbisgKlxcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXFxuKyAqXFxuKyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXFxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cXG4rICovXFxuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbit7XFxuK1xcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIGtzO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICogQGtzOlxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIHJlbGVhc2UuXFxuKyAqXFxuKyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYVxcbisgKiBxdWV1ZV9yY3Vfd29yaygpIChzaW5jZSBzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS5cXG4rICovXFxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpXFxuK3tcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2a3MtXFx1MDAzZXVzYWdlKSkge1xcbitcXHRcXHRJTklUX1JDVV9XT1JLKFxcdTAwMjZrcy1cXHUwMDNlcndvcmssIGtzb2NrX3JlbGVhc2Vfd29ya19mbik7XFxuK1xcdFxcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZrcy1cXHUwMDNlcndvcmspO1xcbitcXHR9XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcXG4re1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK31cXG4rQ0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICogQGtzOlxcdFxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LiBNdXN0IGJlIGFuIGFjcXVpcmVkIHJlZmVyZW5jZS5cXG4rICogQGRhdGE6XFx0UG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kLlxcbisgKiBAZGF0YV9fc3o6XFx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIChtYXggNjU1MzUgYnl0ZXMpLlxcbisgKlxcbisgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxcbisgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxcbisgKlxcbisgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfX3N6KVxcbit7XFxuK1xcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xcbitcXHRcXHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XFxuK1xcdFxcdC5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSxcXG4rXFx0XFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcXG4rXFx0fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cXG4rXFx0aWYgKGRhdGFfX3N6IFxcdTAwM2UgSVBfTUFYX01UVSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbitcXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcXG4rfTtcXG4rXFxuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxuK1xcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcXG4rXFxuK3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4re1xcbitcXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQgIT0gYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZFswXSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gLUVBQ0NFUztcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5zZXQgPSBcXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcXG4rXFx0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXFxuK307XFxuK1xcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG4rQlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcXG4rXFx0XFx0e1xcbitcXHRcXHRcXHQuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLFxcbitcXHRcXHRcXHQua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLFxcbitcXHRcXHR9LFxcbitcXHR9O1xcbitcXG4rXFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XFxuK1xcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZrc29ja19rZnVuY19zZXQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZrc29ja19rZnVuY19zZXQpO1xcbitcXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4rfVxcbitcXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xcbmluZGV4IDYzYzY5YTBmYTc0ZTEuLjEyNmE2NzRmNTM0ZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L3NvY2tldC5jXFxuKysrIGIvbmV0L3NvY2tldC5jXFxuQEAgLTIxMDMsNiArMjEwMywyMCBAQCBTWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxcbiBcXHRyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApO1xcbiB9XFxuIFxcbitpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuK1xcdFxcdFxcdCBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyktXFx1MDAzZWNvbm5lY3Qoc29jayxcXG4rXFx0XFx0XFx0XFx0ICAgIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXFxuK1xcdFxcdFxcdFxcdCAgICBhZGRybGVuLCBmbGFncyk7XFxuK31cXG4rXFxuIC8qXFxuICAqXFx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcXG4gICpcXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXFxuQEAgLTIxMTksMjMgKzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tXFx0aW50IGVycjtcXG4gXFxuIFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4tXFx0aWYgKCFzb2NrKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9UU09DSztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9XFxuLVxcdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIXNvY2spXFxuK1xcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuIFxcbi1cXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWRkcmxlbiwgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbitcXHRcXHRcXHRcXHQgICAgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mYjFhMzMyZWIzZGExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcXG5AQCAtMCwwICsxLDEzMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF9wcm9ncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwibmV0d29ya19oZWxwZXJzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19sc20uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfbHNtX3ZlcmlmaWVyLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTlNfVEVTVCBcXFwia3NvY2tfbHNtX25zXFxcIlxcbisjZGVmaW5lIFJFQ1ZfUE9SVCA3Nzc3XFxuKyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1XFxuK1xcbitzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYge1xcbitcXHRib29sIG5ldG5zX2NyZWF0ZWQ7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xcbitcXHRpbnQgcmZkO1xcbit9O1xcbitcXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XFxuK1xcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXFxuK1xcdFxcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcXG4rXFx0ZW52LVxcdTAwM2VyZmQgPSAtMTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVEVTVCk7XFxuK1xcdGVudi1cXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgLW5ldCAlcyBsaW5rIHNldCBsbyB1cFxcXCIsIE5TX1RFU1QpO1xcbitcXG4rXFx0ZW52LVxcdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cXHUwMDNlbnN0b2tlbiwgXFxcIm9wZW5fbmV0bnNcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZW52LVxcdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXFx1MDAzZXJmZCwgXFxcInJlY2VpdmVyIHNvY2tldFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRlcnIgPSBiaW5kKGVudi1cXHUwMDNlcmZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJpbmQgcmVjZWl2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gc2V0c29ja29wdChlbnYtXFx1MDAzZXJmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0diwgc2l6ZW9mKHR2KSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldCByY3Z0aW1lb1xcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK2ZhaWw6XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjtcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHtcXG4rXFx0XFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGtzb2NrX2xzbSAqc2tlbDtcXG4rXFx0Y2hhciByZWN2X2RhdGFbc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSldID0ge307XFxuK1xcdHNzaXplX3QgbjtcXG4rXFx0aW50IHRmZCA9IC0xO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWwgb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFxcdTAwMjZlbnYpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSB0aGUga3NvY2sgKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VpcHY0X3JlbW90ZSA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImtzb2NrX3NldHVwIHJ1blxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwia3NvY2tfc2V0dXAgcmV0dmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXFxuK1xcdHNrZWwtXFx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cXHUwMDNlcHJvZ3Mua3NvY2tfc29ja2V0X2JpbmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X2JpbmQsXFxuK1xcdFxcdFxcdCAgIFxcXCJhdHRhY2ggc29ja2V0X2JpbmQgbHNtXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHRmZCwgXFxcInRyaWdnZXIgc29ja2V0XFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xcbitcXHRlcnIgPSBiaW5kKHRmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZ0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0YXJnZXRfcGlkID0gMDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidHJpZ2dlciBiaW5kXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cXG4rXFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9yZXQsIHNpemVvZihza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VzZW5kX2RhdGEpLFxcbitcXHRcXHQgICAgICAgXFxcIkxTTSBzZW5kIGJ5dGVzXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdG4gPSByZWN2ZnJvbShlbnYucmZkLCByZWN2X2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLCAwLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXFxcInJlY3Zmcm9tIGxlblxcXCIpKVxcbitcXHRcXHRBU1NFUlRfTUVNRVEocmVjdl9kYXRhLCBza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJwYXlsb2FkIG1hdGNoXFxcIik7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAodGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHRmZCk7XFxuK1xcdGlmIChlbnYucmZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGVudi5yZmQpO1xcbitcXHRpZiAoZW52Lm5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcXG4rXFx0aWYgKGVudi5uZXRuc19jcmVhdGVkKVxcbitcXHRcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgJXMgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxcIiwgTlNfVEVTVCk7XFxuK1xcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxcbit7XFxuK1xcdFJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YjljNmNjMzAzOTIyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcXG5AQCAtMCwwICsxLDM0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja193cS5za2VsLmhcXFwiXFxuK1xcbit2b2lkIHRlc3Rfa3NvY2tfd3Eodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSBrc29ja193cV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImtzb2NrX3dxIG9wZW4gYW5kIGxvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJydW4ga3NvY2tfd3Ffc3RhcnRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwia3NvY2tfd3Ffc3RhcnQgcmV0dmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d2hpbGUgKCFfX2F0b21pY19sb2FkX24oXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpXFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLFxcbitcXHRcXHQgIFxcXCJ3b3JrcXVldWUgY3JlYXRlIHJlamVjdGVkXFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmhcXG5AQCAtMCwwICsxLDU4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXFxuKyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9IXFxuK1xcbisjaW5jbHVkZSBcXFwiZXJybm8uaFxcXCJcXG4rXFxuKyNkZWZpbmUgU09DS19ER1JBTVxcdDJcXG4rI2RlZmluZSBJUFBST1RPX1VEUFxcdDE3XFxuK1xcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbitcXHRcXHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcXG4rdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xcbitcXG4rc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbit7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXFx1MDAyNmtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIGN0eCk7XFxuK1xcdGlmIChvbGQpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcXG5AQCAtMCwwICsxLDg4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcXG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcXG4rXFxuK2NoYXIgc2VuZF9kYXRhWzMyXSA9IFxcXCJoZWxsbyBmcm9tIGJwZiBrc29ja1xcXCI7XFxuK1xcbitfX2JlMzIgaXB2NF9yZW1vdGU7XFxuK19fdTE2IHJlbW90ZV9wb3J0O1xcbitpbnQgdGFyZ2V0X3BpZDtcXG4raW50IHNlbmRfcmV0ID0gLTE7XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcXG4rXFx0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRjcmVhdGVfb3B0cy5mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcXG4rXFx0Y3JlYXRlX29wdHMucHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcXG4rXFxuK1xcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFxcdTAwMjZlcnIpO1xcbitcXHRpZiAoIWtzKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTtcXG4rXFx0YWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7XFxuK1xcbitcXHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVFWElTVClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtLnMvc29ja2V0X2JpbmRcXFwiKVxcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X2JpbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyxcXG4rXFx0ICAgICBpbnQgYWRkcmxlbiwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xcbitcXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcbitcXHRpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdHNlbmRfcmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0a3MgPSBOVUxMO1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHR0bXAgPSB2LVxcdTAwM2VjdHg7XFxuK1xcdGlmICh0bXApXFxuK1xcdFxcdGtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKCFrcykge1xcbitcXHRcXHRzZW5kX3JldCA9IC1FTk9FTlQ7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbmRfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5NjllMDNiNmQ2OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbitjaGFyIHNlbmRfZGF0YVsxMV0gPSBcXFwiZHVtbXkgZGF0YVxcXCI7XFxuK1xcbitTRUMoXFxcImxzbS5zL3NvY2tldF9zZW5kbXNnXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiYnBmX2tzb2NrX3NlbmQgaXMgcmVqZWN0ZWQgZnJvbSBzb2NrZXRfc2VuZG1zZyBMU00gaG9va1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWRcXFwiKVxcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4rXFx0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0a3MgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIE5VTEwpO1xcbitcXHRpZiAoIWtzKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0YnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2YTE4NzNkMTMyZWRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcXG5AQCAtMCwwICsxLDYyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZXJybm8uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IGtzb2NrX3dxX3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl93cSB3b3JrO1xcbit9O1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIHUzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcXG4rfSB3b3JrX21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitpbnQgY3JlYXRlX2VycjtcXG4rdTMyIGNhbGxiYWNrX2RvbmU7XFxuK1xcbitzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcXG4rXFx0XFx0LmZhbWlseSA9IEFGX0lORVQsXFxuK1xcdFxcdC50eXBlID0gU09DS19ER1JBTSxcXG4rXFx0XFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcXHUwMDI2b3B0cywgc2l6ZW9mKG9wdHMpLCBcXHUwMDI2ZXJyKTtcXG4rXFx0aWYgKGtzKVxcbitcXHRcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcdGNyZWF0ZV9lcnIgPSBlcnI7XFxuK1xcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBrc29ja193cV9zdGFydCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTtcXG4rXFx0dTMyIGtleSA9IDA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNndvcmtfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWx1ZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdGVyciA9IGJwZl93cV9pbml0KFxcdTAwMjZ2YWx1ZS1cXHUwMDNld29yaywgXFx1MDAyNndvcmtfbWFwLCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcXHUwMDI2dmFsdWUtXFx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIGJwZl93cV9zdGFydChcXHUwMDI2dmFsdWUtXFx1MDAzZXdvcmssIDApO1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjE3OjAzLjU3MDY5OTgyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNDU4Njc5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImNvbm5lY3Rfc29ja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIGZvciBjcmVhdGluZyBhbmQgdXNpbmcga2VybmVsIHNvY2tldHMgKGJwZl9rc29jaykuIFRoaXMgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmU0MjlmNjM1N2FkYzBjNDY5NjYzYTZhODFiMDllNTFhZTE0OWFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMjoxNzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuKyAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbisgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4rICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbisgKlx0XHRvZiB0aGUgZ2l2ZW4gdHlwZS5cbisgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xuK1x0X191OCBmYW1pbHk7XG4rXHRfX3U4IHR5cGU7XG4rXHRfX3U4IHByb3RvY29sO1xuK1x0X191OCByZXNlcnZlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbisgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKi9cbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuK307XG4rXG4rI2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXG5pbmRleCAyYThkN2IxNGYxZDExLi44OTY0NTI4ZTM4MjM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuK2V4dGVybiBpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4rXHRcdFx0XHRpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTtcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4gXHRcdFx0ICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKTtcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkOTI1MTk3YzJlNWY3Li5lOThlMzljMjEyZDVmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC00NDcxLDYgKzQ0NzEsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiAjaWZkZWYgQ09ORklHX0NSWVBUT1xuIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfSU5FVFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcbisjZW5kaWZcbiBCVEZfU0VUX0VORChyY3VfcHJvdGVjdGVkX3R5cGVzKVxuIFxuIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlXG5pbmRleCBiM2ZkY2I0ZTM1NWZhLi5hOTI5NWI3ODU5MDEwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcbisrKyBiL25ldC9jb3JlL01ha2VmaWxlXG5AQCAtNDQsNiArNDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICs9IGZhaWxvdmVyLm9cbiBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXG4raWZuZXEgKCQoQ09ORklHX0lORVQpLClcbitvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vXG4rZW5kaWZcbiBvYmotJChDT05GSUdfT0YpXHQrPSBvZl9uZXQub1xuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xuIG9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9rc29jay5jIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Mzc4OTZkYzMyMWQ2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9uZXQvY29yZS9icGZfa3NvY2suY1xuQEAgLTAsMCArMSwzMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2tzb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbisgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4rICogQHVzYWdlOlx0UmVmZXJlbmNlIGNvdW50ZXIuXG4rICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2sge1xuK1x0c3RydWN0IHNvY2tldCAqc29jaztcbitcdHJlZmNvdW50X3QgdXNhZ2U7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzID1cbitcdFx0Y29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgYnBmX2tzb2NrLCByd29yayk7XG4rXG4rXHRzb2NrX3JlbGVhc2Uoa3MtXHUwMDNlc29jayk7XG4rXHRrZnJlZShrcyk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcbit7XG4rXHQvKlxuK1x0ICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKVxuK1x0ICogY2xlYXJlZCBjdXJyZW50LVx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cbitcdCAqL1xuK1x0cmV0dXJuICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2IGN1cnJlbnQtXHUwMDNlbnNwcm94eTtcbit9XG4rXG4rX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqXG4rICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC5cbisgKlxuKyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuKyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrXG4rICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJ3MgbmFtZXNwYWNlIG9yIHNlY3VyaXR5IGNvbnRleHQuXG4rICpcbisgKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxuKyAqIEBvcHRzX19zejpcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0LlxuKyAqIEBlcnJfX3VuaW5pdDpcdEludGVnZXIgdG8gc3RvcmUgZXJyb3IgY29kZSB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuXG4rICovXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXG4rYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXG4rXHRcdCBpbnQgKmVycl9fdW5pbml0KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyO1xuK1xuK1x0LypcbitcdCAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwXG4rXHQgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvXG4rXHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cbitcdCAqL1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcbitcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xuK1x0XHQuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlZmFtaWx5KSxcbitcdFx0LnR5cGUgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2V0eXBlKSxcbitcdFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcHJvdG9jb2wpLFxuK1x0XHQucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZCksXG4rXHR9O1xuK1xuK1x0aWYgKG9wdHNfY29weS5yZXNlcnZlZCkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4rXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2IG9wdHNfY29weS5wcm90b2NvbCAhPSAwKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGtzID0ga3phbGxvY19vYmooKmtzKTtcbitcdGlmICgha3MpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSxcbitcdCAqIHNvY2tldCBsYWJlbHMsIGFuZCB0aGUgYWN0aXZlIG5ldG5zIHJlZmVyZW5jZSBtYXRjaCBhIHNvY2tldCgyKVxuK1x0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0ncyBjYWxsZXIuXG4rXHQgKi9cbitcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXG4rXHRcdFx0ICBcdTAwMjZrcy1cdTAwM2Vzb2NrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXG4rXHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjtcbitcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XG4rXG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2a3MtXHUwMDNldXNhZ2UsIDEpO1xuK1x0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XG4rXHRyZXR1cm4ga3M7XG4rXG4rZXJyX2ZyZWU6XG4rXHRrZnJlZShrcyk7XG4rZXJyX291dDpcbitcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxuKyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4rICogQGFkZHI6XHRQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKiBAYWRkcl9fc3o6XHRTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLlxuKyAqXG4rICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxuK1x0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0XHRcdCAgdTMyIGFkZHJfX3N6KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xuK1x0aW50IGFkZHJsZW47XG4rXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xuK1x0bWVtY3B5KFx1MDAyNnNhLCBhZGRyLCBzaXplb2YoKmFkZHIpKTtcbitcbitcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XG4rXHRjYXNlIEFGX0lORVQ6XG4rXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbitcdFx0YnJlYWs7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRjYXNlIEFGX0lORVQ2OlxuK1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVx1MDAzZXNvY2ssIFx1MDAyNnNhLCBhZGRybGVuLCAwKTtcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGFcbisgKlx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cbisgKlxuKyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxuKyAqL1xuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuK3tcbitcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmtzLVx1MDAzZXVzYWdlKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4ga3M7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbisgKlxuKyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYVxuKyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpXG4re1xuK1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZrcy1cdTAwM2V1c2FnZSkpIHtcbitcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2Vyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTtcbitcdFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2a3MtXHUwMDNlcndvcmspO1xuK1x0fVxuK31cbitcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpXG4re1xuK1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK31cbitDRklfTk9TRUFMKGJwZl9rc29ja19yZWxlYXNlX2R0b3IpO1xuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19zZW5kKCkgLSBTZW5kIGRhdGEgdGhyb3VnaCBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxuKyAqIEBkYXRhOlx0UG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kLlxuKyAqIEBkYXRhX19zejpcdFNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZCAobWF4IDY1NTM1IGJ5dGVzKS5cbisgKlxuKyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXG4rICogKGtlcm5lbF9zZW5kbXNnKSwgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy5cbisgKlxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxuK1x0XHRcdCAgICAgICB1MzIgZGF0YV9fc3opXG4re1xuK1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4rXHRcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXG4rXHR9O1xuK1x0c3RydWN0IGt2ZWMgaW92ID0ge1xuK1x0XHQuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsXG4rXHRcdC5pb3ZfbGVuID0gZGF0YV9fc3osXG4rXHR9O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cbitcdGlmIChkYXRhX19zeiBcdTAwM2UgSVBfTUFYX01UVSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbit9O1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbitcbitzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4re1xuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi4xMjZhNjc0ZjUzNGQwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbiBcdHJldHVybiBfX3N5c19hY2NlcHQ0KGZkLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbiwgMCk7XG4gfVxuIFxuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbitcdFx0XHQgaW50IGFkZHJsZW4sIGludCBmbGFncylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jayxcbitcdFx0XHRcdCAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuK1x0XHRcdFx0ICAgIGFkZHJsZW4sIGZsYWdzKTtcbit9XG4rXG4gLypcbiAgKlx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcbiAgKlx0aXMgaW4gdXNlciBzcGFjZSBzbyB3ZSB2ZXJpZnkgaXQgaXMgT0sgYW5kIG1vdmUgaXQgdG8ga2VybmVsIHNwYWNlLlxuQEAgLTIxMTksMjMgKzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbi1cdGludCBlcnI7XG4gXG4gXHRzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4tXHRpZiAoIXNvY2spIHtcbi1cdFx0ZXJyID0gLUVOT1RTT0NLO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9XG4tXHQgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4rXHRpZiAoIXNvY2spXG4rXHRcdHJldHVybiAtRU5PVFNPQ0s7XG4gXG4tXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi1cdFx0XHRcdFx0ICAgIGFkZHJsZW4sIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tb3V0OlxuLVx0cmV0dXJuIGVycjtcbitcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxuK1x0XHRcdFx0ICAgIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4gfVxuIFxuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZiMWEzMzJlYjNkYTFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcbkBAIC0wLDAgKzEsMTMzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInRlc3RfcHJvZ3MuaFwiXG4rI2luY2x1ZGUgXCJuZXR3b3JrX2hlbHBlcnMuaFwiXG4rI2luY2x1ZGUgXCJrc29ja19sc20uc2tlbC5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2xzbV92ZXJpZmllci5za2VsLmhcIlxuK1xuKyNkZWZpbmUgTlNfVEVTVCBcImtzb2NrX2xzbV9uc1wiXG4rI2RlZmluZSBSRUNWX1BPUlQgNzc3N1xuKyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1XG4rXG4rc3RydWN0IGtzb2NrX3Rlc3RfZW52IHtcbitcdGJvb2wgbmV0bnNfY3JlYXRlZDtcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0aW50IHJmZDtcbit9O1xuK1xuK3N0YXRpYyBib29sIGtzb2NrX3Rlc3RfZW52X3NldHVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0XHQuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLFxuK1x0fTtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xuK1x0aW50IGVycjtcbitcbitcdG1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7XG4rXHRlbnYtXHUwMDNlcmZkID0gLTE7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVEVTVCk7XG4rXHRlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XG4rXHRTWVMoZmFpbCwgXCJpcCAtbmV0ICVzIGxpbmsgc2V0IGxvIHVwXCIsIE5TX1RFU1QpO1xuK1xuK1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cdTAwM2Vuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVx1MDAzZXJmZCwgXCJyZWNlaXZlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYmluZCByZWNlaXZlclwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldCByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rXG4rZmFpbDpcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4rXHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgdGZkID0gLTE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXG4rXHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCxcbitcdFx0XHQgICBcImF0dGFjaCBzb2NrZXRfYmluZCBsc21cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwidHJpZ2dlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcbitcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0cmlnZ2VyIGJpbmRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX3JldCwgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpLFxuK1x0XHQgICAgICAgXCJMU00gc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0biA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCJyZWN2ZnJvbSBsZW5cIikpXG4rXHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuK1x0XHRcdCAgICAgXCJwYXlsb2FkIG1hdGNoXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAodGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGZkKTtcbitcdGlmIChlbnYucmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZW52LnJmZCk7XG4rXHRpZiAoZW52Lm5zdG9rZW4pXG4rXHRcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcbitcdGlmIChlbnYubmV0bnNfY3JlYXRlZClcbitcdFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlcyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcIiwgTlNfVEVTVCk7XG4rXHRrc29ja19sc21fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9rc29ja19sc21fdmVyaWZpZXIodm9pZClcbit7XG4rXHRSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YjljNmNjMzAzOTIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5AQCAtMCwwICsxLDM0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInRlc3RfcHJvZ3MuaFwiXG4rI2luY2x1ZGUgXCJrc29ja193cS5za2VsLmhcIlxuK1xuK3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcbitcdGludCBlcnI7XG4rXG4rXHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImtzb2NrX3dxIG9wZW4gYW5kIGxvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXG4rXHRcdGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicnVuIGtzb2NrX3dxX3N0YXJ0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3aGlsZSAoIV9fYXRvbWljX2xvYWRfbihcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsYmFja19kb25lLCBfX0FUT01JQ19BQ1FVSVJFKSlcbitcdFx0dXNsZWVwKDEwMDApO1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLFxuK1x0XHQgIFwid29ya3F1ZXVlIGNyZWF0ZSByZWplY3RlZFwiKTtcbitcbitvdXQ6XG4rXHRrc29ja193cV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5AQCAtMCwwICsxLDU4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcbisjZGVmaW5lIF9LU09DS19DT01NT05fSFxuK1xuKyNpbmNsdWRlIFwiZXJybm8uaFwiXG4rXG4rI2RlZmluZSBTT0NLX0RHUkFNXHQyXG4rI2RlZmluZSBJUFBST1RPX1VEUFx0MTdcbitcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXG4rXHRcdFx0XHQgICB1MzIgb3B0c19fc3osIGludCAqZXJyX191bmluaXQpIF9fa3N5bTtcbitpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxuK1x0XHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuK3ZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbitpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xuK1xuK3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gX19rc29ja19jdHhfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4re1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2UoY3R4KTtcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHR9XG4rXG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBjdHgpO1xuK1x0aWYgKG9sZCkge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShvbGQpO1xuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5AQCAtMCwwICsxLDg4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJrc29ja19jb21tb24uaFwiXG4rXG4rdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbitcbitjaGFyIHNlbmRfZGF0YVszMl0gPSBcImhlbGxvIGZyb20gYnBmIGtzb2NrXCI7XG4rXG4rX19iZTMyIGlwdjRfcmVtb3RlO1xuK19fdTE2IHJlbW90ZV9wb3J0O1xuK2ludCB0YXJnZXRfcGlkO1xuK2ludCBzZW5kX3JldCA9IC0xO1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcbitcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRjcmVhdGVfb3B0cy5mYW1pbHkgPSBBRl9JTkVUO1xuK1x0Y3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07XG4rXHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xuK1xuK1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcdTAwMjZlcnIpO1xuK1x0aWYgKCFrcylcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuK1x0YWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpO1xuK1x0YWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7XG4rXG4rXHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcbitcdGlmIChlcnIpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0ZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVFWElTVClcbitcdFx0cmV0dXJuIGVycjtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20ucy9zb2NrZXRfYmluZFwiKVxuK2ludCBCUEZfUFJPRyhrc29ja19zb2NrZXRfYmluZCwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLFxuK1x0ICAgICBpbnQgYWRkcmxlbiwgaW50IHJldClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDtcbitcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXG4rXHRpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbitcdGlmICghdikge1xuK1x0XHRzZW5kX3JldCA9IC1FTk9FTlQ7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRrcyA9IE5VTEw7XG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0dG1wID0gdi1cdTAwM2VjdHg7XG4rXHRpZiAodG1wKVxuK1x0XHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIWtzKSB7XG4rXHRcdHNlbmRfcmV0ID0gLUVOT0VOVDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHNlbmRfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xuK1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Yjk2OWUwM2I2ZDY5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbkBAIC0wLDAgKzEsMzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJrc29ja19jb21tb24uaFwiXG4rXG4rY2hhciBzZW5kX2RhdGFbMTFdID0gXCJkdW1teSBkYXRhXCI7XG4rXG4rU0VDKFwibHNtLnMvc29ja2V0X3NlbmRtc2dcIilcbitfX2Rlc2NyaXB0aW9uKFwiYnBmX2tzb2NrX3NlbmQgaXMgcmVqZWN0ZWQgZnJvbSBzb2NrZXRfc2VuZG1zZyBMU00gaG9va1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9rc29ja19zZW5kIGlzIG5vdCBhbGxvd2VkXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4rXHQgICAgIGludCBzaXplLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1xuK1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbitcdGlmICghdilcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGtzID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgTlVMTCk7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0YnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xuK1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9leHBlcmltZW50YWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJlcnJuby5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xuK1x0c3RydWN0IGJwZl93cSB3b3JrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIHUzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XG4rfSB3b3JrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitpbnQgY3JlYXRlX2Vycjtcbit1MzIgY2FsbGJhY2tfZG9uZTtcbitcbitzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbitcdFx0LmZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC50eXBlID0gU09DS19ER1JBTSxcbitcdFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoa3MpXG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcdGNyZWF0ZV9lcnIgPSBlcnI7XG4rXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xuK1x0dTMyIGtleSA9IDA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndvcmtfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWx1ZSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRlcnIgPSBicGZfd3FfaW5pdChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBcdTAwMjZ3b3JrX21hcCwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGJwZl93cV9zdGFydChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCAwKTtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjE3OjAzLjU3MDcwMTA0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzc2NTIzMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEJQRiBLZXJuZWwgU29ja2V0IEFQSSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgYSBCUEYga2Z1bmMgQVBJIGZvciBrZXJuZWwgc29ja2V0cy4gTG9va3MgbGlrZSB3ZSBoYXZlIGZpdmUgbmV3IGZ1bmN0aW9uczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX3NlbmRgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBhbmQgYGJwZl9rc29ja19yZWxlYXNlYC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgYWNjZXNzaWJsZSBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzOiBgbmV0L2NvcmUvYnBmX2tzb2NrLmNgLCBgbmV0L3NvY2tldC5jYCwgdGhlIHZlcmlmaWVyLCBhbmQgYSBjb3VwbGUgb2YgaGVhZGVyIGZpbGVzLlxuXG5GaXJzdCBvcmRlciBvZiBidXNpbmVzczogY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTG9va2luZyBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBpdCBhcHBlYXJzIHdlIG5lZWQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBpdHNlbGYuIFRoZSBuZXcga2Z1bmNzIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzLCBvYnZpb3VzbHkuIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBubyBkb3VidC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiBBbmQsIGZyb20gdGhlIG90aGVyIGZpbGVzLCBgY29ubmVjdF9zb2NrZXRgIGZyb20gYG5ldC9zb2NrZXQuY2Agc2hvdWxkIGFsc28gYmUgb24gdGhlIGxpc3QuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGF0IGBjb25uZWN0X3NvY2tldGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBub3Qgc3RhdGljLiBBbHJpZ2h0LCBxdWljayBjaGVjayBvZiBgbmV0L3NvY2tldC5jYDogeXVwLCBgY29ubmVjdF9zb2NrZXRgIGlzIHRoZXJlIGFuZCBub3Qgc3RhdGljLiBHb29kIHRvIGdvLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZXNlIGRldGFpbHMuXG5cbldhaXQgYSBzZWNvbmQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbmNpZXMuIFNjYW5uaW5nIGBicGZfa3NvY2suY2AsIGl0IGxvb2tzIGxpa2UgaXQgdXNlcyBgcXVldWVfcmN1X3dvcmtgLCBgc29ja19jcmVhdGVgLCBgc29ja19yZWxlYXNlYCwgYW5kIGBrZXJuZWxfc2VuZG1zZ2AuIEl0IGxvb2tzIGxpa2UgaXQgc2hvdWxkIGJlIG9rYXkgd2l0aCB0aGUgdHdvIGNvbmZpZ3MsIGJ1dCBsZXRzIGRvIGEgcXVpY2sgZG91YmxlIGNoZWNrLiBSaWdodCwgYG5ldC9jb3JlL01ha2VmaWxlYCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXAsIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0lORVRgLiBFeGNlbGxlbnQuXG5cblNvLCBqdXN0IHRvIHJlaXRlcmF0ZSwgb3VyIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgd2lsbCBiZTogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX3NlbmRgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBhbmQgYGNvbm5lY3Rfc29ja2V0YC5cblxuT2theSwgKm5vdyogSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjMsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MTc6MTMuOTQ3MjI2NTY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjE0OTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCB1c2luZyBrZXJuZWwgc29ja2V0cyAoYnBmX2tzb2NrKS4gVGhpcyBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCB1c2luZyBrZXJuZWwgc29ja2V0cyAoYnBmX2tzb2NrKS4gVGhpcyBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 22:01:10 +0000 UTC FinishedAt: 2026-08-06 22:17:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET" ], "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": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET" ], "series_id": "0f784152-c860-4589-98f6-be7c17e4f7aa" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ksock_create", "bpf_ksock_connect", "bpf_ksock_send", "bpf_ksock_acquire", "bpf_ksock_release", "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSBmb3IgY3JlYXRpbmcgYW5kIHVzaW5nIGtlcm5lbCBzb2NrZXRzIChicGZfa3NvY2spLiBUaGlzIGFkZHMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyZTQyOWY2MzU3YWRjMGM0Njk2NjNhNmE4MWIwOWU1MWFlMTQ5YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjE3OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCAmIzQzOzEsMzYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSFxuJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luNi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcbiYjNDM7ICogQGZhbWlseTpcdEFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuJiM0MzsgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4mIzQzOyAqIEBwcm90b2NvbDpcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXG4mIzQzOyAqXHRcdG9mIHRoZSBnaXZlbiB0eXBlLlxuJiM0MzsgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG4mIzQzO1x0X191OCBmYW1pbHk7XG4mIzQzO1x0X191OCB0eXBlO1xuJiM0MztcdF9fdTggcHJvdG9jb2w7XG4mIzQzO1x0X191OCByZXNlcnZlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzc1xuJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbiYjNDM7ICovXG4mIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uODk2NDUyOGUzODIzNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdFx0ICAgICBpbnQgYWRkcmxlbik7XG4mIzQzO2V4dGVybiBpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4mIzQzO1x0XHRcdFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZDkyNTE5N2MyZTVmNy4uZTk4ZTM5YzIxMmQ1ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3MSw2ICYjNDM7NDQ3MSw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuICNpZmRlZiBDT05GSUdfQ1JZUFRPXG4gQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfSU5FVFxuJiM0MztCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4mIzQzOyNlbmRpZlxuIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG4gXG4gc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGIzZmRjYjRlMzU1ZmEuLmE5Mjk1Yjc4NTkwMTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGVcbkBAIC00NCw2ICYjNDM7NDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICYjNDM7PSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xuJiM0MztpZm5lcSAoJChDT05GSUdfSU5FVCksKVxuJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2sub1xuJiM0MztlbmRpZlxuIG9iai0kKENPTkZJR19PRilcdCYjNDM7PSBvZl9uZXQub1xuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUzNzg5NmRjMzIxZDZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5AQCAtMCwwICYjNDM7MSwzMzEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfa3NvY2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbiYjNDM7ICogQHNvY2s6XHRUaGUgdW5kZXJseWluZyBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAdXNhZ2U6XHRSZWZlcmVuY2UgY291bnRlci5cbiYjNDM7ICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29jayB7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqc29jaztcbiYjNDM7XHRyZWZjb3VudF90IHVzYWdlO1xuJiM0MztcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbiYjNDM7XG4mIzQzO1x0c29ja19yZWxlYXNlKGtzLVx1MDAzZXNvY2spO1xuJiM0MztcdGtmcmVlKGtzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4mIzQzO1x0ICogY2xlYXJlZCBjdXJyZW50LVx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbiYjNDM7ICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxuJiM0MzsgKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbiYjNDM7ICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKlxuJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbiYjNDM7XHRcdCBpbnQgKmVycl9fdW5pbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxuJiM0MztcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbiYjNDM7XHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuJiM0MztcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xuJiM0MztcdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4mIzQzO1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuJiM0MztcdFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcHJvdG9jb2wpLFxuJiM0MztcdFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xuJiM0MztcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzID0ga3phbGxvY19vYmooKmtzKTtcbiYjNDM7XHRpZiAoIWtzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXG4mIzQzO1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4mIzQzO1x0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXG4mIzQzO1x0XHRcdCAgXHUwMDI2a3MtXHUwMDNlc29jayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuJiM0MztcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XG4mIzQzO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0a2ZyZWUoa3MpO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4mIzQzOyAqIEBhZGRyOlx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXG4mIzQzOyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4mIzQzOyAqXG4mIzQzOyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4mIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbiYjNDM7XHRcdFx0XHQgIHUzMiBhZGRyX19zeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xuJiM0MztcdGludCBhZGRybGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xuJiM0MztcdG1lbWNweShcdTAwMjZzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUOlxuJiM0MztcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25uZWN0X3NvY2tldChrcy1cdTAwM2Vzb2NrLCBcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGFcbiYjNDM7ICpcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4mIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIGtzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbiYjNDM7ICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4mIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbiYjNDM7e1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a3MtXHUwMDNldXNhZ2UpKSB7XG4mIzQzO1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuJiM0MztcdFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2a3MtXHUwMDNlcndvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0Mzt9XG4mIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxuJiM0MzsgKiBAZGF0YTpcdFBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC5cbiYjNDM7ICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIChtYXggNjU1MzUgYnl0ZXMpLlxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxuJiM0MzsgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgdTMyIGRhdGFfX3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGt2ZWMgaW92ID0ge1xuJiM0MztcdFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxuJiM0MztcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cbiYjNDM7XHRpZiAoZGF0YV9fc3ogXHUwMDNlIElQX01BWF9NVFUpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy1cdTAwM2Vzb2NrLCBcdTAwMjZtc2csIFx1MDAyNmlvdiwgMSwgZGF0YV9fc3opO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxuJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG4mIzQzO1xuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiYjNDM7e1xuJiM0MztcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcywga2Z1bmNfaWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQgIT0gYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZFswXSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7XHQuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcylcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbiYjNDM7XHRcdHtcbiYjNDM7XHRcdFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcbiYjNDM7XHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbiYjNDM7XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxuJiM0MztcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi4xMjZhNjc0ZjUzNGQwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgJiM0MzsyMTAzLDIwIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4gXHRyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApO1xuIH1cbiBcbiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuJiM0MztcdFx0XHQgaW50IGFkZHJsZW4sIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLFxuJiM0MztcdFx0XHRcdCAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuJiM0MztcdFx0XHRcdCAgICBhZGRybGVuLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKlx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcbiAgKlx0aXMgaW4gdXNlciBzcGFjZSBzbyB3ZSB2ZXJpZnkgaXQgaXMgT0sgYW5kIG1vdmUgaXQgdG8ga2VybmVsIHNwYWNlLlxuQEAgLTIxMTksMjMgJiM0MzsyMTMzLDEzIEBAIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHQgICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4tXHRpbnQgZXJyO1xuIFxuIFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpO1xuLVx0aWYgKCFzb2NrKSB7XG4tXHRcdGVyciA9IC1FTk9UU09DSztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRlcnIgPVxuLVx0ICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghc29jaylcbiYjNDM7XHRcdHJldHVybiAtRU5PVFNPQ0s7XG4gXG4tXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi1cdFx0XHRcdFx0ICAgIGFkZHJsZW4sIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tb3V0OlxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbiYjNDM7XHRcdFx0XHQgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmIxYTMzMmViM2RhMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCAmIzQzOzEsMTMzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0d29ya19oZWxwZXJzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfbHNtLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19sc21fdmVyaWZpZXIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1RFU1QgXCYjMzQ7a3NvY2tfbHNtX25zXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcbiYjNDM7I2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc29ja190ZXN0X2VudiB7XG4mIzQzO1x0Ym9vbCBuZXRuc19jcmVhdGVkO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuJiM0MztcdGludCByZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0ge1xuJiM0MztcdFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxuJiM0MztcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4mIzQzO1x0XHQuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSBSRUNWX1RJTUVPVVRfU0VDIH07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gLTE7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZXRucyBhZGQgJXNcJiMzNDssIE5TX1RFU1QpO1xuJiM0MztcdGVudi1cdTAwM2VuZXRuc19jcmVhdGVkID0gdHJ1ZTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLW5ldCAlcyBsaW5rIHNldCBsbyB1cFwmIzM0OywgTlNfVEVTVCk7XG4mIzQzO1xuJiM0MztcdGVudi1cdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZW52LVx1MDAzZW5zdG9rZW4sIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlbnYtXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXHUwMDNlcmZkLCBcJiMzNDtyZWNlaXZlciBzb2NrZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBiaW5kKGVudi1cdTAwM2VyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YmluZCByZWNlaXZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldHNvY2tvcHQoZW52LVx1MDAzZXJmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LCBzaXplb2YodHYpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldCByY3Z0aW1lb1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9rc29ja19sc20odm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiB0cmlnZ2VyX2FkZHIgPSB7XG4mIzQzO1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4mIzQzO1x0Y2hhciByZWN2X2RhdGFbc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpXSA9IHt9O1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XHRpbnQgdGZkID0gLTE7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlwdjRfcmVtb3RlID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZW1vdGVfcG9ydCA9IFJFQ1ZfUE9SVDtcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7a3NvY2tfc2V0dXAgcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCYjMzQ7a3NvY2tfc2V0dXAgcmV0dmFsXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAyOiBBdHRhY2ggTFNNIHByb2cgYW5kIHRyaWdnZXIgc29ja2V0X2JpbmQgZnJvbSB1c2Vyc3BhY2UgKi9cbiYjNDM7XHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc29ja2V0X2JpbmQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kLFxuJiM0MztcdFx0XHQgICBcJiMzNDthdHRhY2ggc29ja2V0X2JpbmQgbHNtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0dGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwmIzM0O3RyaWdnZXIgc29ja2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xuJiM0MztcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IDA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0cmlnZ2VyIGJpbmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDM6IFZlcmlmeSB0aGUgTFNNIGhvb2sgc2VudCB0aGUgbm90aWZpY2F0aW9uICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfcmV0LCBzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7TFNNIHNlbmQgYnl0ZXNcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRuID0gcmVjdmZyb20oZW52LnJmZCwgcmVjdl9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCYjMzQ7cmVjdmZyb20gbGVuXCYjMzQ7KSlcbiYjNDM7XHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BheWxvYWQgbWF0Y2hcJiMzNDspO1xuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAodGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHRmZCk7XG4mIzQzO1x0aWYgKGVudi5yZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZW52LnJmZCk7XG4mIzQzO1x0aWYgKGVudi5uc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMoZW52Lm5zdG9rZW4pO1xuJiM0MztcdGlmIChlbnYubmV0bnNfY3JlYXRlZClcbiYjNDM7XHRcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwmIzM0OywgTlNfVEVTVCk7XG4mIzQzO1x0a3NvY2tfbHNtX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5YzZjYzMwMzkyMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xuQEAgLTAsMCAmIzQzOzEsMzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja193cS5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5rc29ja193cV9zdGFydCksIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja193cV9zdGFydCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuJiM0MztcdFx0dXNsZWVwKDEwMDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHQgIFwmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5AQCAtMCwwICYjNDM7MSw1OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSFxuJiM0MzsjZGVmaW5lIF9LU09DS19DT01NT05fSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXJybm8uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTT0NLX0RHUkFNXHQyXG4mIzQzOyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4mIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4mIzQzO1x0XHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcbiYjNDM7c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xuJiM0MztcbiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBfX2tzb2NrX2N0eF9tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2X19rc29ja19jdHhfbWFwLCBcdTAwMjZrZXkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4mIzQzO1xuJiM0MztcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4mIzQzO1x0aWYgKCF2KSB7XG4mIzQzO1x0XHRicGZfa3NvY2tfcmVsZWFzZShjdHgpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBjdHgpO1xuJiM0MztcdGlmIChvbGQpIHtcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKG9sZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSBcJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29ja1wmIzM0OztcbiYjNDM7XG4mIzQzO19fYmUzMiBpcHY0X3JlbW90ZTtcbiYjNDM7X191MTYgcmVtb3RlX3BvcnQ7XG4mIzQzO2ludCB0YXJnZXRfcGlkO1xuJiM0MztpbnQgc2VuZF9yZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuJiM0MztcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbiYjNDM7XHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4mIzQzO1x0aWYgKCFrcylcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTtcbiYjNDM7XHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGtzb2NrX2N0eF9pbnNlcnQoa3MpO1xuJiM0MztcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL3NvY2tldF9iaW5kXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X2JpbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyxcbiYjNDM7XHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xuJiM0MztcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdikge1xuJiM0MztcdFx0c2VuZF9yZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzID0gTlVMTDtcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHRtcCA9IHYtXHUwMDNlY3R4O1xuJiM0MztcdGlmICh0bXApXG4mIzQzO1x0XHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtzKSB7XG4mIzQzO1x0XHRzZW5kX3JldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Yjk2OWUwM2I2ZDY5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbkBAIC0wLDAgJiM0MzsxLDM2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSBcJiMzNDtkdW1teSBkYXRhXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL3NvY2tldF9zZW5kbXNnXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2JwZl9rc29ja19zZW5kIGlzIHJlamVjdGVkIGZyb20gc29ja2V0X3NlbmRtc2cgTFNNIGhvb2tcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfa3NvY2tfc2VuZCBpcyBub3QgYWxsb3dlZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4mIzQzO1x0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XG4mIzQzO1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbiYjNDM7XHRpZiAoIXYpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIE5VTEwpO1xuJiM0MztcdGlmICgha3MpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4mIzQzO1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbkBAIC0wLDAgJiM0MzsxLDYyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3RyYWNpbmdfbmV0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXJybm8uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGtzb2NrX3dxX3ZhbHVlIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3dxIHdvcms7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO1x0X190eXBlKGtleSwgdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XG4mIzQzO30gd29ya19tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2ludCBjcmVhdGVfZXJyO1xuJiM0Mzt1MzIgY2FsbGJhY2tfZG9uZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHMgPSB7XG4mIzQzO1x0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC50eXBlID0gU09DS19ER1JBTSxcbiYjNDM7XHRcdC5wcm90b2NvbCA9IElQUFJPVE9fVURQLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFx1MDAyNmVycik7XG4mIzQzO1x0aWYgKGtzKVxuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcdGNyZWF0ZV9lcnIgPSBlcnI7XG4mIzQzO1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2Y2FsbGJhY2tfZG9uZSwgMSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTtcbiYjNDM7XHR1MzIga2V5ID0gMDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d29ya19tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdGVyciA9IGJwZl93cV9pbml0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIFx1MDAyNndvcmtfbWFwLCAwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9fbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Y29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIGZvciBjcmVhdGluZyBhbmQgdXNpbmcga2VybmVsIHNvY2tldHMgKGJwZl9rc29jaykuIFRoaXMgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJlNDI5ZjYzNTdhZGMwYzQ2OTY2M2E2YTgxYjA5ZTUxYWUxNDlhZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMjI6MTc6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaApAQCAtMCwwICYjNDM7MSwzNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfQlBGX0tTT0NLX0gKJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVycwomIzQzOyAqIEBmYW1pbHk6CUFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LgomIzQzOyAqIEB0eXBlOglTb2NrZXQgdHlwZTogb25seSBTT0NLX0RHUkFNIHN1cHBvcnRlZCBmb3Igbm93LgomIzQzOyAqIEBwcm90b2NvbDoJUHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2wKJiM0MzsgKgkJb2YgdGhlIGdpdmVuIHR5cGUuCiYjNDM7ICogQHJlc2VydmVkOglNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgewomIzQzOwlfX3U4IGZhbWlseTsKJiM0MzsJX191OCB0eXBlOwomIzQzOwlfX3U4IHByb3RvY29sOwomIzQzOwlfX3U4IHJlc2VydmVkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MKJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLgomIzQzOyAqLwomIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMmE4ZDdiMTRmMWQxMS4uODk2NDUyOGUzODIzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7CiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7CiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAogCQkJICAgICBpbnQgYWRkcmxlbik7CiYjNDM7ZXh0ZXJuIGludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKJiM0MzsJCQkJaW50IGFkZHJsZW4sIGludCBmbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiAJCQkgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpOwogZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGQ5MjUxOTdjMmU1ZjcuLmU5OGUzOWMyMTJkNWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTQ0NzEsNiAmIzQzOzQ0NzEsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdCkKICNpZmRlZiBDT05GSUdfQ1JZUFRPCiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eCkKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSU5FVAomIzQzO0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaykKJiM0MzsjZW5kaWYKIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpCiAKIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggYjNmZGNiNGUzNTVmYS4uYTkyOTViNzg1OTAxMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvTWFrZWZpbGUKQEAgLTQ0LDYgJiM0Mzs0NCw5IEBAIG9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm8KIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vCiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vCiYjNDM7aWZuZXEgKCQoQ09ORklHX0lORVQpLCkKJiM0MztvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2subwomIzQzO2VuZGlmCiBvYmotJChDT05GSUdfT0YpCSYjNDM7PSBvZl9uZXQubwogb2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qubwogb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41Mzc4OTZkYzMyMWQ2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvYnBmX2tzb2NrLmMKQEAgLTAsMCAmIzQzOzEsMzMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9rc29jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYnBmX2tzb2NrIC0gcmVmY291bnRlZCBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0CiYjNDM7ICogQHNvY2s6CVRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQHVzYWdlOglSZWZlcmVuY2UgY291bnRlci4KJiM0MzsgKiBAcndvcms6CVJDVSB3b3JrIGZvciBkZWZlcnJlZCBjbGVhbnVwIChzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYnBmX2tzb2NrIHsKJiM0MzsJc3RydWN0IHNvY2tldCAqc29jazsKJiM0MzsJcmVmY291bnRfdCB1c2FnZTsKJiM0MzsJc3RydWN0IHJjdV93b3JrIHJ3b3JrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0KJiM0MzsJCWNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspOwomIzQzOwomIzQzOwlzb2NrX3JlbGVhc2Uoa3MtJmd0O3NvY2spOwomIzQzOwlrZnJlZShrcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKCkKJiM0MzsJICogY2xlYXJlZCBjdXJyZW50LSZndDtuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7IGN1cnJlbnQtJmd0O25zcHJveHk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFjawomIzQzOyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzayYjMzk7cyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIEBvcHRzOglQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy4KJiM0MzsgKiBAb3B0c19fc3o6CVNpemUgb2YgdGhlIG9wdHMgc3RydWN0LgomIzQzOyAqIEBlcnJfX3VuaW5pdDoJSW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICoKJiM0MzticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeiwKJiM0MzsJCSBpbnQgKmVycl9fdW5pbml0KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cAomIzQzOwkgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvCiYjNDM7CSAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpewomIzQzOwkJLmZhbWlseSA9IFJFQURfT05DRShvcHRzLSZndDtmYW1pbHkpLAomIzQzOwkJLnR5cGUgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7dHlwZSksCiYjNDM7CQkucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cHJvdG9jb2wpLAomIzQzOwkJLnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKG9wdHNfY29weS5yZXNlcnZlZCkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUICZhbXA7JmFtcDsgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikgewomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnByb3RvY29sICE9IElQUFJPVE9fVURQICZhbXA7JmFtcDsgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3MgPSBremFsbG9jX29iaigqa3MpOwomIzQzOwlpZiAoIWtzKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSwKJiM0MzsJICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpCiYjNDM7CSAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGNhbGxlci4KJiM0MzsJICovCiYjNDM7CWVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsCiYjNDM7CQkJICAmYW1wO2tzLSZndDtzb2NrKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGOwomIzQzOwlrcy0mZ3Q7c29jay0mZ3Q7c2stJmd0O3NrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLOwomIzQzOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtrcy0mZ3Q7dXNhZ2UsIDEpOwomIzQzOwlwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIGtzOwomIzQzOwomIzQzO2Vycl9mcmVlOgomIzQzOwlrZnJlZShrcyk7CiYjNDM7ZXJyX291dDoKJiM0MzsJcHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4KJiM0MzsgKiBAYWRkcjoJUG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQGFkZHJfX3N6OglTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLgomIzQzOyAqCiYjNDM7ICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkCiYjNDM7ICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLAomIzQzOwkJCQkgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLAomIzQzOwkJCQkgIHUzMiBhZGRyX19zeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhOwomIzQzOwlpbnQgYWRkcmxlbjsKJiM0MzsKJiM0MzsJaWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi8KJiM0MzsJbWVtY3B5KCZhbXA7c2EsIGFkZHIsIHNpemVvZigqYWRkcikpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNhLnNzX2ZhbWlseSkgewomIzQzOwljYXNlIEFGX0lORVQ6CiYjNDM7CQlhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiYjNDM7CQlicmVhazsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKJiM0MzsJY2FzZSBBRl9JTkVUNjoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb25uZWN0X3NvY2tldChrcy0mZ3Q7c29jaywgJmFtcDtzYSwgYWRkcmxlbiwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGEKJiM0MzsgKgl0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IKJiM0MzsgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2tzLSZndDt1c2FnZSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIGtzOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqIEBrczoJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS4KJiM0MzsgKgomIzQzOyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYQomIzQzOyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpCiYjNDM7ewomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3MtJmd0O3VzYWdlKSkgewomIzQzOwkJSU5JVF9SQ1VfV09SSygmYW1wO2tzLSZndDtyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTsKJiM0MzsJCXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsICZhbXA7a3MtJmd0O3J3b3JrKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpCiYjNDM7ewomIzQzOwlicGZfa3NvY2tfcmVsZWFzZShrcyk7CiYjNDM7fQomIzQzO0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOgkJVGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLgomIzQzOyAqIEBkYXRhOglQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuCiYjNDM7ICogQGRhdGFfX3N6OglTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgKG1heCA2NTUzNSBieXRlcykuCiYjNDM7ICoKJiM0MzsgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcAomIzQzOyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwKJiM0MzsJCQkgICAgICAgdTMyIGRhdGFfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3ZlYyBpb3YgPSB7CiYjNDM7CQkuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsCiYjNDM7CQkuaW92X2xlbiA9IGRhdGFfX3N6LAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogRWFybHkgY2hlY2sgZm9yIFVEUC4gRXhhY3QgbGltaXRzIGVuZm9yY2VkIGJ5IGtlcm5lbF9zZW5kbXNnKCkuICovCiYjNDM7CWlmIChkYXRhX19zeiAmZ3Q7IElQX01BWF9NVFUpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy0mZ3Q7c29jaywgJmFtcDttc2csICZhbXA7aW92LCAxLCBkYXRhX19zeik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLAomIzQzO307CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKQomIzQzOwomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDtrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiAtRUFDQ0VTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywKJiM0MzsJLmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzO0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7CiYjNDM7CQl7CiYjNDM7CQkJLmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSwKJiM0MzsJCQkua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2tzb2NrX2luaXRfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLAomIzQzOwkJCQkJICAgICAgICZhbXA7a3NvY2tfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsCiYjNDM7CQkJCQkJICBBUlJBWV9TSVpFKGJwZl9rc29ja19kdG9ycyksCiYjNDM7CQkJCQkJICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzOwomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLjEyNmE2NzRmNTM0ZDAgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIxMDMsNiAmIzQzOzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKIAlyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApOwogfQogCiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJCSBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtjb25uZWN0KHNvY2ssCiYjNDM7CQkJCSAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgYWRkcmxlbiwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qCiAgKglBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzcwogICoJaXMgaW4gdXNlciBzcGFjZSBzbyB3ZSB2ZXJpZnkgaXQgaXMgT0sgYW5kIG1vdmUgaXQgdG8ga2VybmVsIHNwYWNlLgpAQCAtMjExOSwyMyAmIzQzOzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsCiAJCSAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKLQlpbnQgZXJyOwogCiAJc29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUpOwotCWlmICghc29jaykgewotCQllcnIgPSAtRU5PVFNPQ0s7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9Ci0JICAgIHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKCFzb2NrKQomIzQzOwkJcmV0dXJuIC1FTk9UU09DSzsKIAotCWVyciA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsCi0JCQkJCSAgICBhZGRybGVuLCBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sCiYjNDM7CQkJCSAgICBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7CiB9CiAKIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZiMWEzMzJlYjNkYTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCkBAIC0wLDAgJiM0MzsxLDEzMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja19sc20uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2xzbV9ucyYjMzQ7CiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3NwomIzQzOyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1CiYjNDM7CiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHsKJiM0MzsJYm9vbCBuZXRuc19jcmVhdGVkOwomIzQzOwlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjsKJiM0MzsJaW50IHJmZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGtzb2NrX3Rlc3RfZW52X3NldHVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7CiYjNDM7CQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCiYjNDM7CQkuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSwKJiM0MzsJCS5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltZW1zZXQoZW52LCAwLCBzaXplb2YoKmVudikpOwomIzQzOwllbnYtJmd0O3JmZCA9IC0xOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVEVTVCk7CiYjNDM7CWVudi0mZ3Q7bmV0bnNfY3JlYXRlZCA9IHRydWU7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIC1uZXQgJXMgbGluayBzZXQgbG8gdXAmIzM0OywgTlNfVEVTVCk7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7bnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVEVTVCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihlbnYtJmd0O25zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJZW52LSZndDtyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChlbnYtJmd0O3JmZCwgJiMzNDtyZWNlaXZlciBzb2NrZXQmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVyciA9IGJpbmQoZW52LSZndDtyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtiaW5kIHJlY2VpdmVyJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGVudi0mZ3Q7cmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwgc2l6ZW9mKHR2KSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXQgcmN2dGltZW8mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgZW52OwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBrc29ja19sc20gKnNrZWw7CiYjNDM7CWNoYXIgcmVjdl9kYXRhW3NpemVvZihza2VsLSZndDtkYXRhLSZndDtzZW5kX2RhdGEpXSA9IHt9OwomIzQzOwlzc2l6ZV90IG47CiYjNDM7CWludCB0ZmQgPSAtMTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsIG9wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICgha3NvY2tfdGVzdF9lbnZfc2V0dXAoJmFtcDtlbnYpKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSB0aGUga3NvY2sgKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpcHY0X3JlbW90ZSA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmtzb2NrX3NldHVwKSwKJiM0MzsJCQkJICAgICAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7a3NvY2tfc2V0dXAgcnVuJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtrc29ja19zZXR1cCByZXR2YWwmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovCiYjNDM7CXNrZWwtJmd0O2xpbmtzLmtzb2NrX3NvY2tldF9iaW5kID0KJiM0MzsJCWJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtJmd0O3Byb2dzLmtzb2NrX3NvY2tldF9iaW5kKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2xpbmtzLmtzb2NrX3NvY2tldF9iaW5kLAomIzQzOwkJCSAgICYjMzQ7YXR0YWNoIHNvY2tldF9iaW5kIGxzbSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQodGZkLCAmIzM0O3RyaWdnZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RhcmdldF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJZXJyID0gYmluZCh0ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3RyaWdnZXJfYWRkciwgc2l6ZW9mKHRyaWdnZXJfYWRkcikpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3RhcmdldF9waWQgPSAwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dHJpZ2dlciBiaW5kJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDM6IFZlcmlmeSB0aGUgTFNNIGhvb2sgc2VudCB0aGUgbm90aWZpY2F0aW9uICovCiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfcmV0LCBzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKSwKJiM0MzsJCSAgICAgICAmIzM0O0xTTSBzZW5kIGJ5dGVzJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwluID0gcmVjdmZyb20oZW52LnJmZCwgcmVjdl9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChBU1NFUlRfRVEobiwgc2l6ZW9mKHJlY3ZfZGF0YSksICYjMzQ7cmVjdmZyb20gbGVuJiMzNDspKQomIzQzOwkJQVNTRVJUX01FTUVRKHJlY3ZfZGF0YSwgc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwKJiM0MzsJCQkgICAgICYjMzQ7cGF5bG9hZCBtYXRjaCYjMzQ7KTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlpZiAodGZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0ZmQpOwomIzQzOwlpZiAoZW52LnJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZW52LnJmZCk7CiYjNDM7CWlmIChlbnYubnN0b2tlbikKJiM0MzsJCWNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTsKJiM0MzsJaWYgKGVudi5uZXRuc19jcmVhdGVkKQomIzQzOwkJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxJiMzNDssIE5TX1RFU1QpOwomIzQzOwlrc29ja19sc21fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja19sc21fdmVyaWZpZXIodm9pZCkKJiM0Mzt7CiYjNDM7CVJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjViOWM2Y2MzMDM5MjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9wcm9ncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX3dxLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCBrc29ja193cSAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2tzb2NrX3dxIG9wZW4gYW5kIGxvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O2tzb2NrX3dxX3N0YXJ0IHJldHZhbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3aGlsZSAoIV9fYXRvbWljX2xvYWRfbigmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpCiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLAomIzQzOwkJICAmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrc29ja193cV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaApAQCAtMCwwICYjNDM7MSw1OCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9ICiYjNDM7I2RlZmluZSBfS1NPQ0tfQ09NTU9OX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2Vycm5vLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgU09DS19ER1JBTQkyCiYjNDM7I2RlZmluZSBJUFBST1RPX1VEUAkxNwomIzQzOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywKJiM0MzsJCQkJICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07CiYjNDM7aW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkciwKJiM0MzsJCSAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltOwomIzQzO3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3NvY2tfY3R4X2luc2VydChzdHJ1Y3QgYnBmX2tzb2NrICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKm9sZDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KSB7CiYjNDM7CQlicGZfa3NvY2tfcmVsZWFzZShjdHgpOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgY3R4KTsKJiM0MzsJaWYgKG9sZCkgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uob2xkKTsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYwpAQCAtMCwwICYjNDM7MSw4OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NvY2tfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7Y2hhciBzZW5kX2RhdGFbMzJdID0gJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29jayYjMzQ7OwomIzQzOwomIzQzO19fYmUzMiBpcHY0X3JlbW90ZTsKJiM0MztfX3UxNiByZW1vdGVfcG9ydDsKJiM0MztpbnQgdGFyZ2V0X3BpZDsKJiM0MztpbnQgc2VuZF9yZXQgPSAtMTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTsKJiM0MzsJdW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWNyZWF0ZV9vcHRzLnR5cGUgPSBTT0NLX0RHUkFNOwomIzQzOwljcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQOwomIzQzOwomIzQzOwlrcyA9IGJwZl9rc29ja19jcmVhdGUoJmFtcDtjcmVhdGVfb3B0cywgc2l6ZW9mKGNyZWF0ZV9vcHRzKSwgJmFtcDtlcnIpOwomIzQzOwlpZiAoIWtzKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CiYjNDM7CWFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTsKJiM0MzsJYWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCAmYW1wO2FkZHIsIHNpemVvZihhZGRyKSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVFWElTVCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfYmluZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhrc29ja19zb2NrZXRfYmluZCwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLAomIzQzOwkgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KSB7CiYjNDM7CQlzZW5kX3JldCA9IC1FTk9FTlQ7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzID0gTlVMTDsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJdG1wID0gdi0mZ3Q7Y3R4OwomIzQzOwlpZiAodG1wKQomIzQzOwkJa3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCXNlbmRfcmV0ID0gLUVOT0VOVDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41Yjk2OWUwM2I2ZDY5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbV92ZXJpZmllci5jCkBAIC0wLDAgJiM0MzsxLDM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSAmIzM0O2R1bW15IGRhdGEmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDticGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKJiM0MzsJICAgICBpbnQgc2l6ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgTlVMTCk7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3dxIHdvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpOwomIzQzO30gd29ya19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IGNyZWF0ZV9lcnI7CiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHsKJiM0MzsJCS5mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnR5cGUgPSBTT0NLX0RHUkFNLAomIzQzOwkJLnByb3RvY29sID0gSVBQUk9UT19VRFAsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3NvY2tfY3JlYXRlKCZhbXA7b3B0cywgc2l6ZW9mKG9wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmIChrcykKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJY3JlYXRlX2VyciA9IGVycjsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtjYWxsYmFja19kb25lLCAxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dvcmtfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJZXJyID0gYnBmX3dxX2luaXQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgJmFtcDt3b3JrX21hcCwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwllcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsdWUtJmd0O3dvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBicGZfd3Ffc3RhcnQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTYzCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDY5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBCUEYgS2VybmVsIFNvY2tldCBBUEkqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIEJQRiBrZnVuYyBBUEkgZm9yIGtlcm5lbCBzb2NrZXRzLiBMb29rcyBsaWtlIHdlIGhhdmUgZml2ZSBuZXcgZnVuY3Rpb25zOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfc2VuZGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGFuZCBgYnBmX2tzb2NrX3JlbGVhc2VgLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSBhY2Nlc3NpYmxlIGZyb20gQlBGIHByb2dyYW1zLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXM6IGBuZXQvY29yZS9icGZfa3NvY2suY2AsIGBuZXQvc29ja2V0LmNgLCB0aGUgdmVyaWZpZXIsIGFuZCBhIGNvdXBsZSBvZiBoZWFkZXIgZmlsZXMuCgpGaXJzdCBvcmRlciBvZiBidXNpbmVzczogY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTG9va2luZyBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBpdCBhcHBlYXJzIHdlIG5lZWQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBpdHNlbGYuIFRoZSBuZXcga2Z1bmNzIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzLCBvYnZpb3VzbHkuIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBubyBkb3VidC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiBBbmQsIGZyb20gdGhlIG90aGVyIGZpbGVzLCBgY29ubmVjdF9zb2NrZXRgIGZyb20gYG5ldC9zb2NrZXQuY2Agc2hvdWxkIGFsc28gYmUgb24gdGhlIGxpc3QuCgpJIHNob3VsZCB2ZXJpZnkgdGhhdCBgY29ubmVjdF9zb2NrZXRgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgbm90IHN0YXRpYy4gQWxyaWdodCwgcXVpY2sgY2hlY2sgb2YgYG5ldC9zb2NrZXQuY2A6IHl1cCwgYGNvbm5lY3Rfc29ja2V0YCBpcyB0aGVyZSBhbmQgbm90IHN0YXRpYy4gR29vZCB0byBnby4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgZGV0YWlscy4KCldhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzLiBTY2FubmluZyBgYnBmX2tzb2NrLmNgLCBpdCBsb29rcyBsaWtlIGl0IHVzZXMgYHF1ZXVlX3JjdV93b3JrYCwgYHNvY2tfY3JlYXRlYCwgYHNvY2tfcmVsZWFzZWAsIGFuZCBga2VybmVsX3NlbmRtc2dgLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZSBva2F5IHdpdGggdGhlIHR3byBjb25maWdzLCBidXQgbGV0cyBkbyBhIHF1aWNrIGRvdWJsZSBjaGVjay4gUmlnaHQsIGBuZXQvY29yZS9NYWtlZmlsZWAsIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVwLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19JTkVUYC4gRXhjZWxsZW50LgoKU28sIGp1c3QgdG8gcmVpdGVyYXRlLCBvdXIgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB3aWxsIGJlOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfc2VuZGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgY29ubmVjdF9zb2NrZXRgLgoKT2theSwgKm5vdyogSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSBmb3IgY3JlYXRpbmcgYW5kIHVzaW5nIGtlcm5lbCBzb2NrZXRzIChicGZfa3NvY2spLiBUaGlzIGFkZHMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Y29ubmVjdF9zb2NrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIGZvciBjcmVhdGluZyBhbmQgdXNpbmcga2VybmVsIHNvY2tldHMgKGJwZl9rc29jaykuIFRoaXMgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MTc6MDMuMDY5Nzg1MDk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTk2MDgxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCB1c2luZyBrZXJuZWwgc29ja2V0cyAoYnBmX2tzb2NrKS4gVGhpcyBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjE3OjAzLjA2OTgyMjAxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMjU4ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjJlNDI5ZjYzNTdhZGMwYzQ2OTY2M2E2YTgxYjA5ZTUxYWUxNDlhZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjE3OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYjM4N2ZiNzVlNDNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcXG4rI2RlZmluZSBfQlBGX0tTT0NLX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzXFxuKyAqIEBmYW1pbHk6XFx0QWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuXFxuKyAqIEB0eXBlOlxcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXFxuKyAqIEBwcm90b2NvbDpcXHRQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbFxcbisgKlxcdFxcdG9mIHRoZSBnaXZlbiB0eXBlLlxcbisgKiBAcmVzZXJ2ZWQ6XFx0TXVzdCBiZSB6ZXJvLiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS5cXG4rICovXFxuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xcbitcXHRfX3U4IGZhbWlseTtcXG4rXFx0X191OCB0eXBlO1xcbitcXHRfX3U4IHByb3RvY29sO1xcbitcXHRfX3U4IHJlc2VydmVkO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXFxuKyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuXFxuKyAqIEBzaW42OiBJUHY2IHNvY2tldCBhZGRyZXNzLlxcbisgKi9cXG4rdW5pb24gYnBmX2tzb2NrX2FkZHIge1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7XFxuK307XFxuK1xcbisjZW5kaWYgLyogX0JQRl9LU09DS19IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uODk2NDUyOGUzODIzNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxcbkBAIC00NjEsNiArNDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTtcXG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbiBcXHRcXHRcXHQgICAgIGludCBhZGRybGVuKTtcXG4rZXh0ZXJuIGludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcXG4rXFx0XFx0XFx0XFx0aW50IGFkZHJsZW4sIGludCBmbGFncyk7XFxuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcXG4gXFx0XFx0XFx0ICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKTtcXG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBkOTI1MTk3YzJlNWY3Li5lOThlMzljMjEyZDVmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC00NDcxLDYgKzQ0NzEsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcXG4gI2lmZGVmIENPTkZJR19DUllQVE9cXG4gQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0lORVRcXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxcbisjZW5kaWZcXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcXG4gXFxuIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZClcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxcbmluZGV4IGIzZmRjYjRlMzU1ZmEuLmE5Mjk1Yjc4NTkwMTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxcbkBAIC00NCw2ICs0NCw5IEBAIG9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbiBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG4raWZuZXEgKCQoQ09ORklHX0lORVQpLClcXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xcbitlbmRpZlxcbiBvYmotJChDT05GSUdfT0YpXFx0Kz0gb2ZfbmV0Lm9cXG4gb2JqLSQoQ09ORklHX05FVF9URVNUKSArPSBuZXRfdGVzdC5vXFxuIG9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Mzc4OTZkYzMyMWQ2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL25ldC9jb3JlL2JwZl9rc29jay5jXFxuQEAgLTAsMCArMSwzMzEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfa3NvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcXG4rICogQHNvY2s6XFx0VGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC5cXG4rICogQHVzYWdlOlxcdFJlZmVyZW5jZSBjb3VudGVyLlxcbisgKiBAcndvcms6XFx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29jayB7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuK1xcdHJlZmNvdW50X3QgdXNhZ2U7XFxuK1xcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3MgPVxcbitcXHRcXHRjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcXG4rXFxuK1xcdHNvY2tfcmVsZWFzZShrcy1cXHUwMDNlc29jayk7XFxuK1xcdGtmcmVlKGtzKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRhc2sgd29yayBjYW4gcnVuIGZyb20gZG9fZXhpdCgpIGFmdGVyIGV4aXRfbnNwcm94eV9uYW1lc3BhY2VzKClcXG4rXFx0ICogY2xlYXJlZCBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0tUSFJFQUQpIFxcdTAwMjZcXHUwMDI2IGN1cnJlbnQtXFx1MDAzZW5zcHJveHk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICpcXG4rICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC5cXG4rICpcXG4rICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCAoc29ja19jcmVhdGUpLCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxcbisgKiBJdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYSBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBjYWxsYmFja1xcbisgKiBkb2VzIG5vdCByZXRhaW4gdGhlIGludm9raW5nIHRhc2sncyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cXG4rICpcXG4rICogQG9wdHM6XFx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXFxuKyAqIEBvcHRzX19zejpcXHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cXG4rICogQGVycl9fdW5pbml0OlxcdEludGVnZXIgdG8gc3RvcmUgZXJyb3IgY29kZSB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcXG4rYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXFxuK1xcdFxcdCBpbnQgKmVycl9fdW5pbml0KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwXFxuK1xcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cXG4rXFx0ICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xcbitcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW9wdHMgfHwgb3B0c19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpKSB7XFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xcbitcXHRcXHQuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZWZhbWlseSksXFxuK1xcdFxcdC50eXBlID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXR5cGUpLFxcbitcXHRcXHQucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcHJvdG9jb2wpLFxcbitcXHRcXHQucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcmVzZXJ2ZWQpLFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKG9wdHNfY29weS5yZXNlcnZlZCkge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xcbitcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcXHUwMDI2XFx1MDAyNiBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkge1xcbitcXHRcXHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtzID0ga3phbGxvY19vYmooKmtzKTtcXG4rXFx0aWYgKCFrcykge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSxcXG4rXFx0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXFxuK1xcdCAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJ3MgY2FsbGVyLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2a3MtXFx1MDAzZXNvY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbitcXG4rXFx0a3MtXFx1MDAzZXNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7XFxuK1xcdGtzLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XFxuK1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmtzLVxcdTAwM2V1c2FnZSwgMSk7XFxuK1xcdHB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpO1xcbitcXHRyZXR1cm4ga3M7XFxuK1xcbitlcnJfZnJlZTpcXG4rXFx0a2ZyZWUoa3MpO1xcbitlcnJfb3V0OlxcbitcXHRwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19jb25uZWN0KCkgLSBDb25uZWN0IGEgQlBGIGtlcm5lbCBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzcy5cXG4rICogQGtzOlxcdFxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LlxcbisgKiBAYWRkcjpcXHRQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy5cXG4rICogQGFkZHJfX3N6OlxcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXFxuKyAqXFxuKyAqIENvbm5lY3RzIHRoZSBzb2NrZXQgdG8gdGhlIHNwZWNpZmllZCByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydC5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgdTMyIGFkZHJfX3N6KVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xcbitcXHRpbnQgYWRkcmxlbjtcXG4rXFxuK1xcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZiAoIWFkZHIgfHwgYWRkcl9fc3ogIT0gc2l6ZW9mKCphZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBLZnVuYyBtZW1vcnkgYXJndW1lbnRzIG1heSBiZSB1bmFsaWduZWQuICovXFxuK1xcdG1lbWNweShcXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xcbitcXG4rXFx0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcXG4rXFx0Y2FzZSBBRl9JTkVUOlxcbitcXHRcXHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7XFxuK1xcdFxcdGJyZWFrO1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0Y2FzZSBBRl9JTkVUNjpcXG4rXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICogQGtzOlxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxcbisgKlxcdHRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuXFxuKyAqXFxuKyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXFxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cXG4rICovXFxuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbit7XFxuK1xcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIGtzO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICogQGtzOlxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIHJlbGVhc2UuXFxuKyAqXFxuKyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYVxcbisgKiBxdWV1ZV9yY3Vfd29yaygpIChzaW5jZSBzb2NrX3JlbGVhc2UgbWF5IHNsZWVwKS5cXG4rICovXFxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpXFxuK3tcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2a3MtXFx1MDAzZXVzYWdlKSkge1xcbitcXHRcXHRJTklUX1JDVV9XT1JLKFxcdTAwMjZrcy1cXHUwMDNlcndvcmssIGtzb2NrX3JlbGVhc2Vfd29ya19mbik7XFxuK1xcdFxcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZrcy1cXHUwMDNlcndvcmspO1xcbitcXHR9XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcXG4re1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK31cXG4rQ0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cXG4rICogQGtzOlxcdFxcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LiBNdXN0IGJlIGFuIGFjcXVpcmVkIHJlZmVyZW5jZS5cXG4rICogQGRhdGE6XFx0UG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kLlxcbisgKiBAZGF0YV9fc3o6XFx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kIChtYXggNjU1MzUgYnl0ZXMpLlxcbisgKlxcbisgKiBTZW5kcyBkYXRhIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYmVzdC1lZmZvcnQgYW5kIG5vbmJsb2NraW5nLiBUaGlzIG1heSBzbGVlcFxcbisgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxcbisgKlxcbisgKiBSZXR1cm46IE51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfX3N6KVxcbit7XFxuK1xcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xcbitcXHRcXHQubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XFxuK1xcdFxcdC5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSxcXG4rXFx0XFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcXG4rXFx0fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cXG4rXFx0aWYgKGRhdGFfX3N6IFxcdTAwM2UgSVBfTUFYX01UVSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbitcXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcXG4rfTtcXG4rXFxuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxuK1xcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcXG4rXFxuK3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4re1xcbitcXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQgIT0gYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZFswXSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gLUVBQ0NFUztcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5zZXQgPSBcXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcXG4rXFx0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXFxuK307XFxuK1xcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG4rQlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcXG4rXFx0XFx0e1xcbitcXHRcXHRcXHQuYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzBdLFxcbitcXHRcXHRcXHQua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLFxcbitcXHRcXHR9LFxcbitcXHR9O1xcbitcXG4rXFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XFxuK1xcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZrc29ja19rZnVuY19zZXQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZrc29ja19rZnVuY19zZXQpO1xcbitcXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4rfVxcbitcXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xcbmluZGV4IDYzYzY5YTBmYTc0ZTEuLjEyNmE2NzRmNTM0ZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L3NvY2tldC5jXFxuKysrIGIvbmV0L3NvY2tldC5jXFxuQEAgLTIxMDMsNiArMjEwMywyMCBAQCBTWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxcbiBcXHRyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApO1xcbiB9XFxuIFxcbitpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuK1xcdFxcdFxcdCBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyktXFx1MDAzZWNvbm5lY3Qoc29jayxcXG4rXFx0XFx0XFx0XFx0ICAgIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXFxuK1xcdFxcdFxcdFxcdCAgICBhZGRybGVuLCBmbGFncyk7XFxuK31cXG4rXFxuIC8qXFxuICAqXFx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcXG4gICpcXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXFxuQEAgLTIxMTksMjMgKzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tXFx0aW50IGVycjtcXG4gXFxuIFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4tXFx0aWYgKCFzb2NrKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9UU09DSztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9XFxuLVxcdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIXNvY2spXFxuK1xcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuIFxcbi1cXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWRkcmxlbiwgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbitcXHRcXHRcXHRcXHQgICAgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mYjFhMzMyZWIzZGExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcXG5AQCAtMCwwICsxLDEzMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF9wcm9ncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwibmV0d29ya19oZWxwZXJzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19sc20uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfbHNtX3ZlcmlmaWVyLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTlNfVEVTVCBcXFwia3NvY2tfbHNtX25zXFxcIlxcbisjZGVmaW5lIFJFQ1ZfUE9SVCA3Nzc3XFxuKyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1XFxuK1xcbitzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYge1xcbitcXHRib29sIG5ldG5zX2NyZWF0ZWQ7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xcbitcXHRpbnQgcmZkO1xcbit9O1xcbitcXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XFxuK1xcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXFxuK1xcdFxcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcXG4rXFx0ZW52LVxcdTAwM2VyZmQgPSAtMTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVEVTVCk7XFxuK1xcdGVudi1cXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgLW5ldCAlcyBsaW5rIHNldCBsbyB1cFxcXCIsIE5TX1RFU1QpO1xcbitcXG4rXFx0ZW52LVxcdTAwM2Vuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cXHUwMDNlbnN0b2tlbiwgXFxcIm9wZW5fbmV0bnNcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZW52LVxcdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChlbnYtXFx1MDAzZXJmZCwgXFxcInJlY2VpdmVyIHNvY2tldFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRlcnIgPSBiaW5kKGVudi1cXHUwMDNlcmZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJpbmQgcmVjZWl2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gc2V0c29ja29wdChlbnYtXFx1MDAzZXJmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0diwgc2l6ZW9mKHR2KSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldCByY3Z0aW1lb1xcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK2ZhaWw6XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjtcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHtcXG4rXFx0XFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGtzb2NrX2xzbSAqc2tlbDtcXG4rXFx0Y2hhciByZWN2X2RhdGFbc2l6ZW9mKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfZGF0YSldID0ge307XFxuK1xcdHNzaXplX3QgbjtcXG4rXFx0aW50IHRmZCA9IC0xO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWwgb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFxcdTAwMjZlbnYpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDE6IFJ1biB0aGUgc2V0dXAgU1lTQ0FMTCBwcm9nIHRvIGNyZWF0ZSB0aGUga3NvY2sgKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VpcHY0X3JlbW90ZSA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImtzb2NrX3NldHVwIHJ1blxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwia3NvY2tfc2V0dXAgcmV0dmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXFxuK1xcdHNrZWwtXFx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cXHUwMDNlcHJvZ3Mua3NvY2tfc29ja2V0X2JpbmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X2JpbmQsXFxuK1xcdFxcdFxcdCAgIFxcXCJhdHRhY2ggc29ja2V0X2JpbmQgbHNtXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHRmZCwgXFxcInRyaWdnZXIgc29ja2V0XFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xcbitcXHRlcnIgPSBiaW5kKHRmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZ0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0YXJnZXRfcGlkID0gMDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidHJpZ2dlciBiaW5kXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cXG4rXFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9yZXQsIHNpemVvZihza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VzZW5kX2RhdGEpLFxcbitcXHRcXHQgICAgICAgXFxcIkxTTSBzZW5kIGJ5dGVzXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdG4gPSByZWN2ZnJvbShlbnYucmZkLCByZWN2X2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLCAwLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXFxcInJlY3Zmcm9tIGxlblxcXCIpKVxcbitcXHRcXHRBU1NFUlRfTUVNRVEocmVjdl9kYXRhLCBza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJwYXlsb2FkIG1hdGNoXFxcIik7XFxuK1xcbitmYWlsOlxcbitcXHRpZiAodGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHRmZCk7XFxuK1xcdGlmIChlbnYucmZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGVudi5yZmQpO1xcbitcXHRpZiAoZW52Lm5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcXG4rXFx0aWYgKGVudi5uZXRuc19jcmVhdGVkKVxcbitcXHRcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgJXMgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxcIiwgTlNfVEVTVCk7XFxuK1xcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxcbit7XFxuK1xcdFJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YjljNmNjMzAzOTIyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcXG5AQCAtMCwwICsxLDM0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja193cS5za2VsLmhcXFwiXFxuK1xcbit2b2lkIHRlc3Rfa3NvY2tfd3Eodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSBrc29ja193cV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImtzb2NrX3dxIG9wZW4gYW5kIGxvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJydW4ga3NvY2tfd3Ffc3RhcnRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwia3NvY2tfd3Ffc3RhcnQgcmV0dmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d2hpbGUgKCFfX2F0b21pY19sb2FkX24oXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpXFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLFxcbitcXHRcXHQgIFxcXCJ3b3JrcXVldWUgY3JlYXRlIHJlamVjdGVkXFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmhcXG5AQCAtMCwwICsxLDU4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXFxuKyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9IXFxuK1xcbisjaW5jbHVkZSBcXFwiZXJybm8uaFxcXCJcXG4rXFxuKyNkZWZpbmUgU09DS19ER1JBTVxcdDJcXG4rI2RlZmluZSBJUFBST1RPX1VEUFxcdDE3XFxuK1xcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbitcXHRcXHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcXG4rdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbitpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xcbitcXG4rc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbit7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXFx1MDAyNmtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIGN0eCk7XFxuK1xcdGlmIChvbGQpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcXG5AQCAtMCwwICsxLDg4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcXG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcXG4rXFxuK2NoYXIgc2VuZF9kYXRhWzMyXSA9IFxcXCJoZWxsbyBmcm9tIGJwZiBrc29ja1xcXCI7XFxuK1xcbitfX2JlMzIgaXB2NF9yZW1vdGU7XFxuK19fdTE2IHJlbW90ZV9wb3J0O1xcbitpbnQgdGFyZ2V0X3BpZDtcXG4raW50IHNlbmRfcmV0ID0gLTE7XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcXG4rXFx0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRjcmVhdGVfb3B0cy5mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcXG4rXFx0Y3JlYXRlX29wdHMucHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcXG4rXFxuK1xcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFxcdTAwMjZlcnIpO1xcbitcXHRpZiAoIWtzKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTtcXG4rXFx0YWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7XFxuK1xcbitcXHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVFWElTVClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtLnMvc29ja2V0X2JpbmRcXFwiKVxcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X2JpbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyxcXG4rXFx0ICAgICBpbnQgYWRkcmxlbiwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzLCAqdG1wO1xcbitcXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcbitcXHRpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdHNlbmRfcmV0ID0gLUVOT0VOVDtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0a3MgPSBOVUxMO1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHR0bXAgPSB2LVxcdTAwM2VjdHg7XFxuK1xcdGlmICh0bXApXFxuK1xcdFxcdGtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKCFrcykge1xcbitcXHRcXHRzZW5kX3JldCA9IC1FTk9FTlQ7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbmRfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWI5NjllMDNiNmQ2OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbitjaGFyIHNlbmRfZGF0YVsxMV0gPSBcXFwiZHVtbXkgZGF0YVxcXCI7XFxuK1xcbitTRUMoXFxcImxzbS5zL3NvY2tldF9zZW5kbXNnXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiYnBmX2tzb2NrX3NlbmQgaXMgcmVqZWN0ZWQgZnJvbSBzb2NrZXRfc2VuZG1zZyBMU00gaG9va1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWRcXFwiKVxcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4rXFx0ICAgICBpbnQgc2l6ZSwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0a3MgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIE5VTEwpO1xcbitcXHRpZiAoIWtzKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0YnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2YTE4NzNkMTMyZWRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcXG5AQCAtMCwwICsxLDYyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZXJybm8uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IGtzb2NrX3dxX3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl93cSB3b3JrO1xcbit9O1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIHUzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcXG4rfSB3b3JrX21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitpbnQgY3JlYXRlX2VycjtcXG4rdTMyIGNhbGxiYWNrX2RvbmU7XFxuK1xcbitzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcXG4rXFx0XFx0LmZhbWlseSA9IEFGX0lORVQsXFxuK1xcdFxcdC50eXBlID0gU09DS19ER1JBTSxcXG4rXFx0XFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcXHUwMDI2b3B0cywgc2l6ZW9mKG9wdHMpLCBcXHUwMDI2ZXJyKTtcXG4rXFx0aWYgKGtzKVxcbitcXHRcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcdGNyZWF0ZV9lcnIgPSBlcnI7XFxuK1xcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBrc29ja193cV9zdGFydCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTtcXG4rXFx0dTMyIGtleSA9IDA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNndvcmtfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWx1ZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdGVyciA9IGJwZl93cV9pbml0KFxcdTAwMjZ2YWx1ZS1cXHUwMDNld29yaywgXFx1MDAyNndvcmtfbWFwLCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcXHUwMDI2dmFsdWUtXFx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIGJwZl93cV9zdGFydChcXHUwMDI2dmFsdWUtXFx1MDAzZXdvcmssIDApO1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjE3OjAzLjU3MDY5OTgyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNDU4Njc5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImNvbm5lY3Rfc29ja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIGZvciBjcmVhdGluZyBhbmQgdXNpbmcga2VybmVsIHNvY2tldHMgKGJwZl9rc29jaykuIFRoaXMgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmU0MjlmNjM1N2FkYzBjNDY5NjYzYTZhODFiMDllNTFhZTE0OWFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMjoxNzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuKyAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbisgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4rICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbisgKlx0XHRvZiB0aGUgZ2l2ZW4gdHlwZS5cbisgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xuK1x0X191OCBmYW1pbHk7XG4rXHRfX3U4IHR5cGU7XG4rXHRfX3U4IHByb3RvY29sO1xuK1x0X191OCByZXNlcnZlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbisgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKi9cbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuK307XG4rXG4rI2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXG5pbmRleCAyYThkN2IxNGYxZDExLi44OTY0NTI4ZTM4MjM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuK2V4dGVybiBpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4rXHRcdFx0XHRpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTtcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXG4gXHRcdFx0ICAgICAgaW50IGFkZHJsZW4sIGludCBmaWxlX2ZsYWdzKTtcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkOTI1MTk3YzJlNWY3Li5lOThlMzljMjEyZDVmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC00NDcxLDYgKzQ0NzEsOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiAjaWZkZWYgQ09ORklHX0NSWVBUT1xuIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfSU5FVFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcbisjZW5kaWZcbiBCVEZfU0VUX0VORChyY3VfcHJvdGVjdGVkX3R5cGVzKVxuIFxuIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlXG5pbmRleCBiM2ZkY2I0ZTM1NWZhLi5hOTI5NWI3ODU5MDEwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcbisrKyBiL25ldC9jb3JlL01ha2VmaWxlXG5AQCAtNDQsNiArNDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICs9IGZhaWxvdmVyLm9cbiBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXG4raWZuZXEgKCQoQ09ORklHX0lORVQpLClcbitvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vXG4rZW5kaWZcbiBvYmotJChDT05GSUdfT0YpXHQrPSBvZl9uZXQub1xuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xuIG9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9rc29jay5jIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Mzc4OTZkYzMyMWQ2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9uZXQvY29yZS9icGZfa3NvY2suY1xuQEAgLTAsMCArMSwzMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2tzb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbisgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4rICogQHVzYWdlOlx0UmVmZXJlbmNlIGNvdW50ZXIuXG4rICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2sge1xuK1x0c3RydWN0IHNvY2tldCAqc29jaztcbitcdHJlZmNvdW50X3QgdXNhZ2U7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzID1cbitcdFx0Y29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgYnBmX2tzb2NrLCByd29yayk7XG4rXG4rXHRzb2NrX3JlbGVhc2Uoa3MtXHUwMDNlc29jayk7XG4rXHRrZnJlZShrcyk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcbit7XG4rXHQvKlxuK1x0ICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKVxuK1x0ICogY2xlYXJlZCBjdXJyZW50LVx1MDAzZW5zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC5cbitcdCAqL1xuK1x0cmV0dXJuICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2IGN1cnJlbnQtXHUwMDNlbnNwcm94eTtcbit9XG4rXG4rX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqXG4rICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC5cbisgKlxuKyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuKyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLlxuKyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrXG4rICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJ3MgbmFtZXNwYWNlIG9yIHNlY3VyaXR5IGNvbnRleHQuXG4rICpcbisgKiBAb3B0czpcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxuKyAqIEBvcHRzX19zejpcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0LlxuKyAqIEBlcnJfX3VuaW5pdDpcdEludGVnZXIgdG8gc3RvcmUgZXJyb3IgY29kZSB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuXG4rICovXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXG4rYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXG4rXHRcdCBpbnQgKmVycl9fdW5pbml0KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyO1xuK1xuK1x0LypcbitcdCAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwXG4rXHQgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvXG4rXHQgKiBub3QgY2FycnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhc2sgdGhhdCBpbnZva2VkIHRoZSBCUEYgcHJvZ3JhbS5cbitcdCAqL1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcbitcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0b3B0c19jb3B5ID0gKHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMpe1xuK1x0XHQuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlZmFtaWx5KSxcbitcdFx0LnR5cGUgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2V0eXBlKSxcbitcdFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcHJvdG9jb2wpLFxuK1x0XHQucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZCksXG4rXHR9O1xuK1xuK1x0aWYgKG9wdHNfY29weS5yZXNlcnZlZCkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4rXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2IG9wdHNfY29weS5wcm90b2NvbCAhPSAwKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGtzID0ga3phbGxvY19vYmooKmtzKTtcbitcdGlmICgha3MpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFVzZSB0aGUgbm9ybWFsIGN1cnJlbnQtdGFzayBzb2NrZXQgcGF0aCBzbyBMU00vY2dyb3VwIHBvbGljeSxcbitcdCAqIHNvY2tldCBsYWJlbHMsIGFuZCB0aGUgYWN0aXZlIG5ldG5zIHJlZmVyZW5jZSBtYXRjaCBhIHNvY2tldCgyKVxuK1x0ICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0ncyBjYWxsZXIuXG4rXHQgKi9cbitcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXG4rXHRcdFx0ICBcdTAwMjZrcy1cdTAwM2Vzb2NrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXG4rXHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjtcbitcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7XG4rXG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2a3MtXHUwMDNldXNhZ2UsIDEpO1xuK1x0cHV0X3VuYWxpZ25lZCgwLCBlcnJfX3VuaW5pdCk7XG4rXHRyZXR1cm4ga3M7XG4rXG4rZXJyX2ZyZWU6XG4rXHRrZnJlZShrcyk7XG4rZXJyX291dDpcbitcdHB1dF91bmFsaWduZWQoZXJyLCBlcnJfX3VuaW5pdCk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxuKyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuXG4rICogQGFkZHI6XHRQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKiBAYWRkcl9fc3o6XHRTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLlxuKyAqXG4rICogQ29ubmVjdHMgdGhlIHNvY2tldCB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgd2hpbGUgY29ubmVjdGluZyB0aGUgc29ja2V0LCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxuK1x0XHRcdFx0ICBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0XHRcdCAgdTMyIGFkZHJfX3N6KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhO1xuK1x0aW50IGFkZHJsZW47XG4rXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xuK1x0bWVtY3B5KFx1MDAyNnNhLCBhZGRyLCBzaXplb2YoKmFkZHIpKTtcbitcbitcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XG4rXHRjYXNlIEFGX0lORVQ6XG4rXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbitcdFx0YnJlYWs7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRjYXNlIEFGX0lORVQ2OlxuK1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVx1MDAzZXNvY2ssIFx1MDAyNnNhLCBhZGRybGVuLCAwKTtcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byBhY3F1aXJlLiBNdXN0IGJlIGFcbisgKlx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cbisgKlxuKyAqIFRoZSBhY3F1aXJlZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxuKyAqL1xuK19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19hY3F1aXJlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuK3tcbitcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmtzLVx1MDAzZXVzYWdlKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4ga3M7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cbisgKlxuKyAqIFdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyByZWxlYXNlZCwgdGhlIHNvY2tldCBpcyBjbGVhbmVkIHVwIHZpYVxuKyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpXG4re1xuK1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZrcy1cdTAwM2V1c2FnZSkpIHtcbitcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZrcy1cdTAwM2Vyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTtcbitcdFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2a3MtXHUwMDNlcndvcmspO1xuK1x0fVxuK31cbitcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpXG4re1xuK1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK31cbitDRklfTk9TRUFMKGJwZl9rc29ja19yZWxlYXNlX2R0b3IpO1xuK1xuKy8qKlxuKyAqIGJwZl9rc29ja19zZW5kKCkgLSBTZW5kIGRhdGEgdGhyb3VnaCBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxuKyAqIEBkYXRhOlx0UG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kLlxuKyAqIEBkYXRhX19zejpcdFNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZCAobWF4IDY1NTM1IGJ5dGVzKS5cbisgKlxuKyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXG4rICogKGtlcm5lbF9zZW5kbXNnKSwgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy5cbisgKlxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLFxuK1x0XHRcdCAgICAgICB1MzIgZGF0YV9fc3opXG4re1xuK1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4rXHRcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXG4rXHR9O1xuK1x0c3RydWN0IGt2ZWMgaW92ID0ge1xuK1x0XHQuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsXG4rXHRcdC5pb3ZfbGVuID0gZGF0YV9fc3osXG4rXHR9O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBFYXJseSBjaGVjayBmb3IgVURQLiBFeGFjdCBsaW1pdHMgZW5mb3JjZWQgYnkga2VybmVsX3NlbmRtc2coKS4gKi9cbitcdGlmIChkYXRhX19zeiBcdTAwM2UgSVBfTUFYX01UVSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbit9O1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitcbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbitcbitzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4re1xuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi4xMjZhNjc0ZjUzNGQwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbiBcdHJldHVybiBfX3N5c19hY2NlcHQ0KGZkLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbiwgMCk7XG4gfVxuIFxuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbitcdFx0XHQgaW50IGFkZHJsZW4sIGludCBmbGFncylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jayxcbitcdFx0XHRcdCAgICAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuK1x0XHRcdFx0ICAgIGFkZHJsZW4sIGZsYWdzKTtcbit9XG4rXG4gLypcbiAgKlx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcbiAgKlx0aXMgaW4gdXNlciBzcGFjZSBzbyB3ZSB2ZXJpZnkgaXQgaXMgT0sgYW5kIG1vdmUgaXQgdG8ga2VybmVsIHNwYWNlLlxuQEAgLTIxMTksMjMgKzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbi1cdGludCBlcnI7XG4gXG4gXHRzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4tXHRpZiAoIXNvY2spIHtcbi1cdFx0ZXJyID0gLUVOT1RTT0NLO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9XG4tXHQgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4rXHRpZiAoIXNvY2spXG4rXHRcdHJldHVybiAtRU5PVFNPQ0s7XG4gXG4tXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi1cdFx0XHRcdFx0ICAgIGFkZHJsZW4sIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tb3V0OlxuLVx0cmV0dXJuIGVycjtcbitcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxuK1x0XHRcdFx0ICAgIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4gfVxuIFxuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZiMWEzMzJlYjNkYTFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcbkBAIC0wLDAgKzEsMTMzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInRlc3RfcHJvZ3MuaFwiXG4rI2luY2x1ZGUgXCJuZXR3b3JrX2hlbHBlcnMuaFwiXG4rI2luY2x1ZGUgXCJrc29ja19sc20uc2tlbC5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2xzbV92ZXJpZmllci5za2VsLmhcIlxuK1xuKyNkZWZpbmUgTlNfVEVTVCBcImtzb2NrX2xzbV9uc1wiXG4rI2RlZmluZSBSRUNWX1BPUlQgNzc3N1xuKyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1XG4rXG4rc3RydWN0IGtzb2NrX3Rlc3RfZW52IHtcbitcdGJvb2wgbmV0bnNfY3JlYXRlZDtcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0aW50IHJmZDtcbit9O1xuK1xuK3N0YXRpYyBib29sIGtzb2NrX3Rlc3RfZW52X3NldHVwKHN0cnVjdCBrc29ja190ZXN0X2VudiAqZW52KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0XHQuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLFxuK1x0fTtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xuK1x0aW50IGVycjtcbitcbitcdG1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7XG4rXHRlbnYtXHUwMDNlcmZkID0gLTE7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBuZXRucyBhZGQgJXNcIiwgTlNfVEVTVCk7XG4rXHRlbnYtXHUwMDNlbmV0bnNfY3JlYXRlZCA9IHRydWU7XG4rXHRTWVMoZmFpbCwgXCJpcCAtbmV0ICVzIGxpbmsgc2V0IGxvIHVwXCIsIE5TX1RFU1QpO1xuK1xuK1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cdTAwM2Vuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVx1MDAzZXJmZCwgXCJyZWNlaXZlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYmluZCByZWNlaXZlclwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldCByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rXG4rZmFpbDpcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4rXHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgdGZkID0gLTE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXG4rXHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCxcbitcdFx0XHQgICBcImF0dGFjaCBzb2NrZXRfYmluZCBsc21cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwidHJpZ2dlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcbitcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0cmlnZ2VyIGJpbmRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX3JldCwgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpLFxuK1x0XHQgICAgICAgXCJMU00gc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0biA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCJyZWN2ZnJvbSBsZW5cIikpXG4rXHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuK1x0XHRcdCAgICAgXCJwYXlsb2FkIG1hdGNoXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAodGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGZkKTtcbitcdGlmIChlbnYucmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZW52LnJmZCk7XG4rXHRpZiAoZW52Lm5zdG9rZW4pXG4rXHRcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcbitcdGlmIChlbnYubmV0bnNfY3JlYXRlZClcbitcdFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlcyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcIiwgTlNfVEVTVCk7XG4rXHRrc29ja19sc21fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9rc29ja19sc21fdmVyaWZpZXIodm9pZClcbit7XG4rXHRSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YjljNmNjMzAzOTIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jXG5AQCAtMCwwICsxLDM0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInRlc3RfcHJvZ3MuaFwiXG4rI2luY2x1ZGUgXCJrc29ja193cS5za2VsLmhcIlxuK1xuK3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja193cSAqc2tlbDtcbitcdGludCBlcnI7XG4rXG4rXHRza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImtzb2NrX3dxIG9wZW4gYW5kIGxvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoXG4rXHRcdGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicnVuIGtzb2NrX3dxX3N0YXJ0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3aGlsZSAoIV9fYXRvbWljX2xvYWRfbihcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxsYmFja19kb25lLCBfX0FUT01JQ19BQ1FVSVJFKSlcbitcdFx0dXNsZWVwKDEwMDApO1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNyZWF0ZV9lcnIsIC1FT1BOT1RTVVBQLFxuK1x0XHQgIFwid29ya3F1ZXVlIGNyZWF0ZSByZWplY3RlZFwiKTtcbitcbitvdXQ6XG4rXHRrc29ja193cV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTVlYjU4NmUyOWEwMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5AQCAtMCwwICsxLDU4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcbisjZGVmaW5lIF9LU09DS19DT01NT05fSFxuK1xuKyNpbmNsdWRlIFwiZXJybm8uaFwiXG4rXG4rI2RlZmluZSBTT0NLX0RHUkFNXHQyXG4rI2RlZmluZSBJUFBST1RPX1VEUFx0MTdcbitcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXG4rXHRcdFx0XHQgICB1MzIgb3B0c19fc3osIGludCAqZXJyX191bmluaXQpIF9fa3N5bTtcbitpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxuK1x0XHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuK3ZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbitpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xuK1xuK3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gX19rc29ja19jdHhfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4re1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2UoY3R4KTtcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHR9XG4rXG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBjdHgpO1xuK1x0aWYgKG9sZCkge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShvbGQpO1xuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2IzNDQwNjQwNzhiNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jXG5AQCAtMCwwICsxLDg4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJrc29ja19jb21tb24uaFwiXG4rXG4rdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4rdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbitcbitjaGFyIHNlbmRfZGF0YVszMl0gPSBcImhlbGxvIGZyb20gYnBmIGtzb2NrXCI7XG4rXG4rX19iZTMyIGlwdjRfcmVtb3RlO1xuK19fdTE2IHJlbW90ZV9wb3J0O1xuK2ludCB0YXJnZXRfcGlkO1xuK2ludCBzZW5kX3JldCA9IC0xO1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcbitcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRjcmVhdGVfb3B0cy5mYW1pbHkgPSBBRl9JTkVUO1xuK1x0Y3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07XG4rXHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xuK1xuK1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcdTAwMjZlcnIpO1xuK1x0aWYgKCFrcylcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuK1x0YWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpO1xuK1x0YWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXB2NF9yZW1vdGU7XG4rXG4rXHRlcnIgPSBicGZfa3NvY2tfY29ubmVjdChrcywgXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKTtcbitcdGlmIChlcnIpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0ZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVFWElTVClcbitcdFx0cmV0dXJuIGVycjtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20ucy9zb2NrZXRfYmluZFwiKVxuK2ludCBCUEZfUFJPRyhrc29ja19zb2NrZXRfYmluZCwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLFxuK1x0ICAgICBpbnQgYWRkcmxlbiwgaW50IHJldClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcywgKnRtcDtcbitcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXG4rXHRpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbitcdGlmICghdikge1xuK1x0XHRzZW5kX3JldCA9IC1FTk9FTlQ7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRrcyA9IE5VTEw7XG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0dG1wID0gdi1cdTAwM2VjdHg7XG4rXHRpZiAodG1wKVxuK1x0XHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIWtzKSB7XG4rXHRcdHNlbmRfcmV0ID0gLUVOT0VOVDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHNlbmRfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xuK1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41Yjk2OWUwM2I2ZDY5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcbkBAIC0wLDAgKzEsMzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJrc29ja19jb21tb24uaFwiXG4rXG4rY2hhciBzZW5kX2RhdGFbMTFdID0gXCJkdW1teSBkYXRhXCI7XG4rXG4rU0VDKFwibHNtLnMvc29ja2V0X3NlbmRtc2dcIilcbitfX2Rlc2NyaXB0aW9uKFwiYnBmX2tzb2NrX3NlbmQgaXMgcmVqZWN0ZWQgZnJvbSBzb2NrZXRfc2VuZG1zZyBMU00gaG9va1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9rc29ja19zZW5kIGlzIG5vdCBhbGxvd2VkXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4rXHQgICAgIGludCBzaXplLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1xuK1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbitcdGlmICghdilcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGtzID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgTlVMTCk7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0YnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xuK1x0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9leHBlcmltZW50YWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfdHJhY2luZ19uZXQuaFwiXG4rI2luY2x1ZGUgXCJlcnJuby5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xuK1x0c3RydWN0IGJwZl93cSB3b3JrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIHUzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XG4rfSB3b3JrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitpbnQgY3JlYXRlX2Vycjtcbit1MzIgY2FsbGJhY2tfZG9uZTtcbitcbitzdGF0aWMgaW50IGtzb2NrX3dxX2NhbGxiYWNrKHZvaWQgKm1hcCwgaW50ICprZXksIHZvaWQgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbitcdFx0LmZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC50eXBlID0gU09DS19ER1JBTSxcbitcdFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcdTAwMjZvcHRzLCBzaXplb2Yob3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoa3MpXG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcbitcdGNyZWF0ZV9lcnIgPSBlcnI7XG4rXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGtzb2NrX3dxX3N0YXJ0KHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xuK1x0dTMyIGtleSA9IDA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNndvcmtfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWx1ZSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRlcnIgPSBicGZfd3FfaW5pdChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBcdTAwMjZ3b3JrX21hcCwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0ZXJyID0gYnBmX3dxX3NldF9jYWxsYmFjayhcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGJwZl93cV9zdGFydChcdTAwMjZ2YWx1ZS1cdTAwM2V3b3JrLCAwKTtcbit9XG4rXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjE3OjAzLjU3MDcwMTA0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzc2NTIzMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEJQRiBLZXJuZWwgU29ja2V0IEFQSSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgYSBCUEYga2Z1bmMgQVBJIGZvciBrZXJuZWwgc29ja2V0cy4gTG9va3MgbGlrZSB3ZSBoYXZlIGZpdmUgbmV3IGZ1bmN0aW9uczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX3NlbmRgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBhbmQgYGJwZl9rc29ja19yZWxlYXNlYC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgYWNjZXNzaWJsZSBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzOiBgbmV0L2NvcmUvYnBmX2tzb2NrLmNgLCBgbmV0L3NvY2tldC5jYCwgdGhlIHZlcmlmaWVyLCBhbmQgYSBjb3VwbGUgb2YgaGVhZGVyIGZpbGVzLlxuXG5GaXJzdCBvcmRlciBvZiBidXNpbmVzczogY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTG9va2luZyBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBpdCBhcHBlYXJzIHdlIG5lZWQgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL2JwZl9rc29jay5jYCBpdHNlbGYuIFRoZSBuZXcga2Z1bmNzIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzLCBvYnZpb3VzbHkuIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBubyBkb3VidC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiBBbmQsIGZyb20gdGhlIG90aGVyIGZpbGVzLCBgY29ubmVjdF9zb2NrZXRgIGZyb20gYG5ldC9zb2NrZXQuY2Agc2hvdWxkIGFsc28gYmUgb24gdGhlIGxpc3QuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGF0IGBjb25uZWN0X3NvY2tldGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBub3Qgc3RhdGljLiBBbHJpZ2h0LCBxdWljayBjaGVjayBvZiBgbmV0L3NvY2tldC5jYDogeXVwLCBgY29ubmVjdF9zb2NrZXRgIGlzIHRoZXJlIGFuZCBub3Qgc3RhdGljLiBHb29kIHRvIGdvLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZXNlIGRldGFpbHMuXG5cbldhaXQgYSBzZWNvbmQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbmNpZXMuIFNjYW5uaW5nIGBicGZfa3NvY2suY2AsIGl0IGxvb2tzIGxpa2UgaXQgdXNlcyBgcXVldWVfcmN1X3dvcmtgLCBgc29ja19jcmVhdGVgLCBgc29ja19yZWxlYXNlYCwgYW5kIGBrZXJuZWxfc2VuZG1zZ2AuIEl0IGxvb2tzIGxpa2UgaXQgc2hvdWxkIGJlIG9rYXkgd2l0aCB0aGUgdHdvIGNvbmZpZ3MsIGJ1dCBsZXRzIGRvIGEgcXVpY2sgZG91YmxlIGNoZWNrLiBSaWdodCwgYG5ldC9jb3JlL01ha2VmaWxlYCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXAsIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0lORVRgLiBFeGNlbGxlbnQuXG5cblNvLCBqdXN0IHRvIHJlaXRlcmF0ZSwgb3VyIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgd2lsbCBiZTogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX3NlbmRgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBhbmQgYGNvbm5lY3Rfc29ja2V0YC5cblxuT2theSwgKm5vdyogSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjMsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MTc6MTMuOTQ3MjI2NTY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjE0OTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCB1c2luZyBrZXJuZWwgc29ja2V0cyAoYnBmX2tzb2NrKS4gVGhpcyBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCB1c2luZyBrZXJuZWwgc29ja2V0cyAoYnBmX2tzb2NrKS4gVGhpcyBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[1] Phase: Succeeded StartedAt: 2026-08-06 22:17:26 +0000 UTC FinishedAt: 2026-08-06 22:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 22:17:26 +0000 UTC FinishedAt: 2026-08-06 22:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2] Phase: Succeeded StartedAt: 2026-08-06 22:17:26 +0000 UTC FinishedAt: 2026-08-07 02:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:17:26 +0000 UTC FinishedAt: 2026-08-07 02:02:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:17:26 +0000 UTC FinishedAt: 2026-08-06 22:17:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:17:26 +0000 UTC FinishedAt: 2026-08-06 22:17:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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-workflowt9nll/series-workflowt9nll-convert-artifact-3052230628/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:17:36 +0000 UTC FinishedAt: 2026-08-06 22:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:17:36 +0000 UTC FinishedAt: 2026-08-06 22:34:55 +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:*744d39fa-6a17-4db5-905f-1a6f4ca963c4,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-workflowt9nll/series-workflowt9nll-convert-artifact-3052230628/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": "437be23d-32d5-4a53-a6e5-94ee02006b2e", "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-workflowt9nll/series-workflowt9nll-build-action-3776509986/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:17:36 +0000 UTC FinishedAt: 2026-08-06 22:34:45 +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:*744d39fa-6a17-4db5-905f-1a6f4ca963c4,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-workflowt9nll/series-workflowt9nll-convert-artifact-3052230628/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": "437be23d-32d5-4a53-a6e5-94ee02006b2e", "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-workflowt9nll/series-workflowt9nll-build-action-3776509986/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:34:55 +0000 UTC FinishedAt: 2026-08-06 22:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:34:55 +0000 UTC FinishedAt: 2026-08-06 22:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:34:55 +0000 UTC FinishedAt: 2026-08-06 22:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:34:55 +0000 UTC FinishedAt: 2026-08-06 22:35:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-workflowt9nll/series-workflowt9nll-convert-artifact-1819462627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:35:05 +0000 UTC FinishedAt: 2026-08-06 22:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:35:05 +0000 UTC FinishedAt: 2026-08-06 22:37:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*437be23d-32d5-4a53-a6e5-94ee02006b2e,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-workflowt9nll/series-workflowt9nll-build-action-3776509986/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-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:37:14 +0000 UTC FinishedAt: 2026-08-06 22:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:37:14 +0000 UTC FinishedAt: 2026-08-06 22:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:37:14 +0000 UTC FinishedAt: 2026-08-06 22:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:37:14 +0000 UTC FinishedAt: 2026-08-06 22:58:27 +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:*744d39fa-6a17-4db5-905f-1a6f4ca963c4,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-workflowt9nll/series-workflowt9nll-convert-artifact-1819462627/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": "4713c41f-ba1c-40ce-8cfa-47c304fd5859", "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-workflowt9nll/series-workflowt9nll-build-action-4203223191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:37:14 +0000 UTC FinishedAt: 2026-08-06 22:58:17 +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:*744d39fa-6a17-4db5-905f-1a6f4ca963c4,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-workflowt9nll/series-workflowt9nll-convert-artifact-1819462627/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": "4713c41f-ba1c-40ce-8cfa-47c304fd5859", "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-workflowt9nll/series-workflowt9nll-build-action-4203223191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:58:27 +0000 UTC FinishedAt: 2026-08-06 22:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:58:27 +0000 UTC FinishedAt: 2026-08-06 22:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:58:27 +0000 UTC FinishedAt: 2026-08-06 23:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 22:58:27 +0000 UTC FinishedAt: 2026-08-06 23:00:20 +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:*4713c41f-ba1c-40ce-8cfa-47c304fd5859,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-workflowt9nll/series-workflowt9nll-build-action-4203223191/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-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-07 02:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-07 02:02:44 +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_send","bpf_ksock_acquire","bpf_ksock_release","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:*437be23d-32d5-4a53-a6e5-94ee02006b2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4713c41f-ba1c-40ce-8cfa-47c304fd5859,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-workflowt9nll/series-workflowt9nll-build-action-3776509986/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-workflowt9nll/series-workflowt9nll-build-action-4203223191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-06 23:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-06 23:00:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_send","bpf_ksock_acquire","bpf_ksock_release","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-workflowt9nll/series-workflowt9nll-convert-artifact-1031906300/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-06 23:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-06 23:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:29 +0000 UTC FinishedAt: 2026-08-06 23:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:39 +0000 UTC FinishedAt: 2026-08-07 02:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9nll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"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_send","bpf_ksock_acquire","bpf_ksock_release","connect_socket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET"],"series_id":"0f784152-c860-4589-98f6-be7c17e4f7aa","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-06 23:00:39 +0000 UTC FinishedAt: 2026-08-07 02:02:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*437be23d-32d5-4a53-a6e5-94ee02006b2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4713c41f-ba1c-40ce-8cfa-47c304fd5859,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-workflowt9nll/series-workflowt9nll-build-action-3776509986/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-workflowt9nll/series-workflowt9nll-build-action-4203223191/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-workflowt9nll/series-workflowt9nll-convert-artifact-1031906300/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,}