Name: series-workflowbjjvr Phase: Succeeded StartedAt: 2026-07-20 23:18:13 +0000 UTC FinishedAt: 2026-07-21 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[0] Phase: Succeeded StartedAt: 2026-07-20 23:18:13 +0000 UTC FinishedAt: 2026-07-20 23:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 23:18:13 +0000 UTC FinishedAt: 2026-07-20 23:37:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "IEEE802154_SOCKET", "IPV6", "PHONET", "TLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "IEEE802154_SOCKET", "IPV6", "PHONET", "TLS" ], "series_id": "d206534a-c0fa-49bb-93fe-5444f59542ca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_dgram_getsockopt", "dgram_getsockopt", "do_rawv6_getsockopt", "rawv6_getsockopt", "do_pep_getsockopt", "pep_getsockopt", "do_tls_getsockopt_conf", "do_tls_getsockopt_tx_zc", "do_tls_getsockopt_no_pad", "do_tls_getsockopt_tx_payload_len", "do_tls_getsockopt", "tls_getsockopt" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZjExMDMzMDI3NzBkODg0ZDE5OTc3M2U3MGEwMTEyMzBkODQ5MDBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMjM6MzY6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuaW5kZXggODVkY2UyOTZkNzUxMzkuLjc2M2Y2M2U0OGFmZTQ1IDEwMDY0NFxuLS0tIGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG5AQCAtODMxLDIwICYjNDM7ODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7XG4tXG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcbiYjNDM7XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9wdC1cdTAwM2VvcHRsZW4sIHNpemVvZihpbnQpKTtcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBXUEFOX1dBTlRBQ0s6XG5AQCAtODcxLDEwICYjNDM7ODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZG9fZGdyYW1fZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uMWYxNTk0MmQxNDE2M2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xMDUxLDE0ICYjNDM7MTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7XG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQVjZfSERSSU5DTDpcbkBAIC0xMDgyLDkgJiM0MzsxMDgwLDggQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWwsIGxlbikpXG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IGxlbjtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTA5Miw2ICYjNDM7MTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4mIzQzO1x0c29ja29wdF90IG9wdDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHN3aXRjaCAobGV2ZWwpIHtcbiBcdGNhc2UgU09MX1JBVzpcbiBcdFx0YnJlYWs7XG5AQCAtMTEwOSw3ICYjNDM7MTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLmMgYi9uZXQvcGhvbmV0L3BlcC5jXG5pbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0XG4tLS0gYS9uZXQvcGhvbmV0L3BlcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGhvbmV0L3BlcC5jXG5AQCAtMTA3OCwxNyAmIzQzOzEwNzgsMTEgQEAgc3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHRcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcbiBcdGludCBsZW4sIHZhbDtcbiBcbi1cdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuLVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgUE5QSVBFX0VOQ0FQOlxuIFx0XHR2YWwgPSBwbi1cdTAwM2VpZmluZGV4ID8gUE5QSVBFX0VOQ0FQX0lQIDogUE5QSVBFX0VOQ0FQX05PTkU7XG5AQCAtMTExMiwxMSAmIzQzOzExMDYsMzMgQEAgc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihpbnQpLCBsZW4pO1xuLVx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcbiYjNDM7XHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXHUwMDNlb3B0bGVuKTtcbiYjNDM7XHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuJiM0MztcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsLCBsZW4sIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gbGVuKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuJiM0MztcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uZmJiMjc0Mjg3YWE1ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTQyNCwyMCAmIzQzOzQyNCwxNiBAQCBzdGF0aWMgX19wb2xsX3QgdGxzX3NrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgaW50IF9fdXNlciAqb3B0bGVuLCBpbnQgdHgpXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcdGNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjO1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbztcbiBcdHN0cnVjdCBjaXBoZXJfY29udGV4dCAqY2N0eDtcbi1cdGludCBsZW47XG4mIzQzO1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmICghb3B0dmFsIHx8IChsZW4gXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xuJiM0MztcdGlmICghb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgfHwgbGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ2Miw3ICYjNDM7NDU4LDggQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdH1cbiBcbiBcdGlmIChsZW4gPT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpIHtcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSkpXG4mIzQzO1x0XHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcbiBcdFx0XHRyYyA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ3OCw0NCAmIzQzOzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0bWVtY3B5KGNyeXB0b19pbmZvX3JlY19zZXEoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjKSxcbiBcdCAgICAgICBjY3R4LVx1MDAzZXJlY19zZXEsIGNpcGhlcl9kZXNjLVx1MDAzZXJlY19zZXEpO1xuIFxuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cdTAwM2VjcnlwdG9faW5mbykpXG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8sXG4mIzQzO1x0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKVxuIFx0XHRyYyA9IC1FRkFVTFQ7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0dW5zaWduZWQgaW50IHZhbHVlO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHZhbHVlID0gY3R4LVx1MDAzZXplcm9jb3B5X3NlbmRmaWxlO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpKSlcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4tXHRpbnQgdmFsdWUsIGxlbjtcbiYjNDM7XHRpbnQgdmFsdWUsIGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAoY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChsZW4gXHUwMDNjIHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTUyNSwzOCAmIzQzOzUxNiwzMSBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRpZiAodmFsdWUgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWx1ZTtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YodmFsdWUpLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IHNpemVvZih2YWx1ZSk7XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVx1MDAzZXR4X21heF9wYXlsb2FkX2xlbjtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpbnQgbGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdGlmIChsZW4gXHUwMDNjIHNpemVvZihwYXlsb2FkX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnBheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pKSlcbiYjNDM7XHRvcHQtXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnBheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pLFxuJiM0MztcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YocGF5bG9hZF9sZW4pKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC01NjUsMTcgJiM0Mzs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFRMU19UWDpcbiBcdGNhc2UgVExTX1JYOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxuLVx0XHRcdFx0XHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHQsIG9wdG5hbWUgPT0gVExTX1RYKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19UWF9aRVJPQ09QWV9STzpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHQpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJjID0gLUVOT1BST1RPT1BUO1xuQEAgLTU5MSwxMiAmIzQzOzU3NCwyNSBAQCBzdGF0aWMgaW50IHRsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiYjNDM7XHRzb2Nrb3B0X3Qgb3B0O1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAobGV2ZWwgIT0gU09MX1RMUylcbiBcdFx0cmV0dXJuIGN0eC1cdTAwM2Vza19wcm90by1cdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCxcbiBcdFx0XHRcdFx0XHQgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFxuLVx0cmV0dXJuIGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbmluZGV4IGZlNWE1MjY4YmMzNGVjLi45NzQwNjVhMjNmYTgyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG5AQCAtMjgsNyAmIzQzOzI4LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBBRl9WU09DS1xuQEAgLTQwLDYgJiM0Mzs0Myw0NSBAQFxuICNpZm5kZWYgSUNNUF9GSUxURVJcbiAjZGVmaW5lIElDTVBfRklMVEVSIDFcbiAjZW5kaWZcbiYjNDM7I2lmbmRlZiBJUFY2X0hEUklOQ0xcbiYjNDM7I2RlZmluZSBJUFY2X0hEUklOQ0wgMzZcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxuJiM0MzsjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gN1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBBRl9JRUVFODAyMTU0XG4mIzQzOyNkZWZpbmUgQUZfSUVFRTgwMjE1NCAzNlxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxuJiM0MzsjZGVmaW5lIFNPTF9JRUVFODAyMTU0IDBcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgV1BBTl9XQU5UQUNLXG4mIzQzOyNkZWZpbmUgV1BBTl9XQU5UQUNLIDBcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgQUZfUEhPTkVUXG4mIzQzOyNkZWZpbmUgQUZfUEhPTkVUIDM1XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFNPTF9QTlBJUEVcbiYjNDM7I2RlZmluZSBTT0xfUE5QSVBFIDI3NVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTl9QUk9UT19QSVBFXG4mIzQzOyNkZWZpbmUgUE5fUFJPVE9fUElQRSAyXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUFxuJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUCAxXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXG4mIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUgMFxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcbiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVBfSVAgMVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBTT0xfVExTXG4mIzQzOyNkZWZpbmUgU09MX1RMUyAyODJcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgVENQX1VMUFxuJiM0MzsjZGVmaW5lIFRDUF9VTFAgMzFcbiYjNDM7I2VuZGlmXG4gXG4gLyogLS0tLS0tLS0tLSBuZXRsaW5rIC0tLS0tLS0tLS0gKi9cbiBcbkBAIC0zOTQsNCAmIzQzOzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXG4gXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4gfVxuIFxuJiM0MzsvKiAtLS0tLS0tLS0tIHJhdyAoaXB2NikgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShyYXd2NilcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAocmF3djYpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19VRFApO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1NPQ0tfUkFXL0lQdjYgc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihyYXd2NilcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfZXhhY3QpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWwgPSAtMTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuJiM0MztcdFx0XHRcdGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSYXcgaW50IG9wdGlvbnMgY2xhbXAgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlclxuJiM0MzsgKiBpbnN0ZWFkIG9mIHJldHVybmluZyBFSU5WQUwgb24gYSBzaG9ydCBidWZmZXIuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfdW5kZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdC8qIEEgbm9uLUlDTVB2NiByYXcgc29ja2V0IGhhcyB0aGUgY2hlY2tzdW0gZGlzYWJsZWQsIHJlcG9ydGVkIGFzIC0xLiAqL1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihyYXd2NiwgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztGSVhUVVJFKGllZWU4MDIxNTQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKGllZWU4MDIxNTQpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0FGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihpZWVlODAyMTU0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfb3ZlcnNpemVfY2xhbXBlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzE2XSA9IHt9O1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUSgyLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIDB4N2ZmZixcbiYjNDM7XHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqL1xuJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLS0tLS0tLSBwaG9uZXQgKHBlcCkgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShwaG9uZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHBob25ldClcbiYjNDM7e1xuJiM0MztcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfUEhPTkVULCBTT0NLX1NFUVBBQ0tFVCwgUE5fUFJPVE9fUElQRSk7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7QUZfUEhPTkVUIHBpcGUgc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihwaG9uZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfZXhhY3QpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWwgPSAtMTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbiYjNDM7XHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcGVwIGNsYW1wcyB0aGUgcmVwb3J0ZWQgbGVuZ3RoIGRvd24gdG8gdGhlIHVzZXIgYnVmZmVyLiBVc2UgYW5cbiYjNDM7ICogaW50LXNpemVkIGJhY2tpbmcgYnVmZmVyIHdpdGggYSBzaG9ydCBvcHRsZW4gc28gdGhlIGJhc2VsaW5lIGtlcm5lbCxcbiYjNDM7ICogd2hpY2ggd3JpdGVzIGEgZnVsbCBpbnQgdmlhIHB1dF91c2VyKCksIGRvZXMgbm90IHNjcmliYmxlIHBhc3QgaXQuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF91bmRlcnNpemVfY2xhbXBlZClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuJiM0MztcdGludCB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXG4mIzQzO1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCBQTlBJUEVfRU5DQVAsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztGSVhUVVJFKHRscylcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XHRpbnQgc2ZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUCh0bHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYSA9IHtcbiYjNDM7XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XG4mIzQzO1x0aW50IGxmZDtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IC0xO1xuJiM0MztcdHNlbGYtXHUwMDNlc2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGxmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUQ1Agc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBzaXplb2YoYSkpIHx8IGxpc3RlbihsZmQsIDEpIHx8XG4mIzQzO1x0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIFx1MDAyNmFsZW4pKSB7XG4mIzQzO1x0XHRjbG9zZShsZmQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2xpc3RlbmVyIHNldHVwOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHR9XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGNvbm5lY3Qoc2VsZi1cdTAwM2VmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIHNpemVvZihhKSkpIHtcbiYjNDM7XHRcdGNsb3NlKGxmZCk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7Y29ubmVjdDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcdHNlbGYtXHUwMDNlc2ZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0Y2xvc2UobGZkKTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7VENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXCYjMzQ7LFxuJiM0MztcdFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKHRscylcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZXNmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXG4mIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xuJiM0MztcdGludCB2YWwgPSAtMTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoKTogTlVMTCBvcHR2YWwgc3RpbGwgeWllbGRzIEVJTlZBTCAtLSB0aGVcbiYjNDM7ICogY29udmVydGVkIGNvZGUgdGVzdHMgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSA2NDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodGxzLCBjb25mX3Nob3J0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0Y2hhciBidWZbMl07XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUTFNfVFggYmVmb3JlIGNyeXB0byBpcyBzZXQgcmVwb3J0cyBub3QtcmVhZHkuICovXG4mIzQzO1RFU1RfRih0bHMsIGNvbmZfbm90X3JlYWR5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNmluZm8sIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFQlVTWSwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZ1xuJiM0MzsgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggdHggPSB7XG4mIzQzO1x0XHQuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLFxuJiM0MztcdFx0LmluZm8uY2lwaGVyX3R5cGUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IGZ1bGw7XG4mIzQzO1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBiYXNlO1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2dHgsIHNpemVvZih0eCkpKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3NldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YoYmFzZSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZiYXNlLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGJhc2UpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9FUShUTFNfMV8yX1ZFUlNJT04sIGJhc2UudmVyc2lvbik7XG4mIzQzO1x0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YoZnVsbCk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZmdWxsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9FUShUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LCBmdWxsLmluZm8uY2lwaGVyX3R5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodGxzLCBiYWRfb3B0bmFtZSlcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMTEwMzMwMjc3MGQ4ODRkMTk5NzczZTcwYTAxMTIzMGQ4NDkwMGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAyMzozNjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMKaW5kZXggODVkY2UyOTZkNzUxMzkuLjc2M2Y2M2U0OGFmZTQ1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwpAQCAtODMxLDIwICYjNDM7ODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb19kZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKLQogCWludCB2YWwsIGxlbjsKIAotCWlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpOwomIzQzOwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9wdC0mZ3Q7b3B0bGVuLCBzaXplb2YoaW50KSk7CiAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFdQQU5fV0FOVEFDSzoKQEAgLTg3MSwxMCAmIzQzOzg2MywzMiBAQCBzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIAotCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpCiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbGVuOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDt2YWwsIGxlbikpCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAomIzQzOwkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7ewomIzQzOwlzb2Nrb3B0X3Qgb3B0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCAmYW1wO29wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggM2NjNTg2OThjYmJkM2EuLjFmMTU5NDJkMTQxNjNlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMTA1MSwxNCAmIzQzOzEwNTEsMTIgQEAgc3RhdGljIGludCByYXd2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAlyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIH0KIAotc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7CiAJaW50IHZhbCwgbGVuOwogCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBJUFY2X0hEUklOQ0w6CkBAIC0xMDgyLDkgJiM0MzsxMDgwLDggQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAogCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7CiAKLQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDt2YWwsIGxlbikpCiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbGVuOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTIsNiAmIzQzOzEwODksOSBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewomIzQzOwlzb2Nrb3B0X3Qgb3B0OwomIzQzOwlpbnQgZXJyOwomIzQzOwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNPTF9SQVc6CiAJCWJyZWFrOwpAQCAtMTEwOSw3ICYjNDM7MTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQlyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCX0KIAotCXJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwllcnIgPSBzb2Nrb3B0X2luaXRfdXNlcigmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgJmFtcDtvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmF3djZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuYwppbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcGVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Bob25ldC9wZXAuYwpAQCAtMTA3OCwxNyAmIzQzOzEwNzgsMTEgQEAgc3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQomIzQzO3N0YXRpYyBpbnQgZG9fcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHBlcF9zb2NrICpwbiA9IHBlcF9zayhzayk7CiAJaW50IGxlbiwgdmFsOwogCi0JaWYgKGxldmVsICE9IFNPTF9QTlBJUEUpCi0JCXJldHVybiAtRU5PUFJPVE9PUFQ7Ci0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFBOUElQRV9FTkNBUDoKIAkJdmFsID0gcG4tJmd0O2lmaW5kZXggPyBQTlBJUEVfRU5DQVBfSVAgOiBQTlBJUEVfRU5DQVBfTk9ORTsKQEAgLTExMTIsMTEgJiM0MzsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIAotCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7Ci0JaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKJiM0MzsJbGVuID0gdW1pbihzaXplb2YoaW50KSwgb3B0LSZndDtvcHRsZW4pOwomIzQzOwlvcHQtJmd0O29wdGxlbiA9IGxlbjsKJiM0MzsJaWYgKGNvcHlfdG9faXRlcigmYW1wO3ZhbCwgbGVuLCAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9IGxlbikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgb3B0dmFsKSkKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAomIzQzOwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQomIzQzO3sKJiM0MzsJc29ja29wdF90IG9wdDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKGxldmVsICE9IFNPTF9QTlBJUEUpCiYjNDM7CQlyZXR1cm4gLUVOT1BST1RPT1BUOwomIzQzOwomIzQzOwllcnIgPSBzb2Nrb3B0X2luaXRfdXNlcigmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsICZhbXA7b3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IDhjNTg4Y2RhYjczM2RhLi5mYmIyNzQyODdhYTVmMiAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uYwpAQCAtNDI0LDIwICYjNDM7NDI0LDE2IEBAIHN0YXRpYyBfX3BvbGxfdCB0bHNfc2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkgIGludCBfX3VzZXIgKm9wdGxlbiwgaW50IHR4KQomIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpCiB7CiAJaW50IHJjID0gMDsKIAljb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYzsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKIAlzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbzsKIAlzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7Ci0JaW50IGxlbjsKJiM0MzsJaW50IGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIW9wdHZhbCB8fCAobGVuICZsdDsgc2l6ZW9mKCpjcnlwdG9faW5mbykpKSB7CiYjNDM7CWlmICghb3B0LSZndDtpdGVyX291dC51YnVmIHx8IGxlbiAmbHQ7IHNpemVvZigqY3J5cHRvX2luZm8pKSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDYyLDcgJiM0Mzs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCX0KIAogCWlmIChsZW4gPT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSkpCiYjNDM7CQlpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSwKJiM0MzsJCQkJICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpCiAJCQlyYyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ3OCw0NCAmIzQzOzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCW1lbWNweShjcnlwdG9faW5mb19yZWNfc2VxKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYyksCiAJICAgICAgIGNjdHgtJmd0O3JlY19zZXEsIGNpcGhlcl9kZXNjLSZndDtyZWNfc2VxKTsKIAotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtJmd0O2NyeXB0b19pbmZvKSkKJiM0MzsJaWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtJmd0O2NyeXB0b19pbmZvLAomIzQzOwkJCSAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9IGNpcGhlcl9kZXNjLSZndDtjcnlwdG9faW5mbykKIAkJcmMgPSAtRUZBVUxUOwogCiBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkgICBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwogCXVuc2lnbmVkIGludCB2YWx1ZTsKLQlpbnQgbGVuOwotCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWludCBsZW4gPSBvcHQtJmd0O29wdGxlbjsKIAogCWlmIChsZW4gIT0gc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWx1ZSA9IGN0eC0mZ3Q7emVyb2NvcHlfc2VuZGZpbGU7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSkpKQomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSksICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgICBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdCkKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKLQlpbnQgdmFsdWUsIGxlbjsKJiM0MzsJaW50IHZhbHVlLCBsZW4gPSBvcHQtJmd0O29wdGxlbjsKIAogCWlmIChjdHgtJmd0O3Byb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAobGVuICZsdDsgc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTUyNSwzOCAmIzQzOzUxNiwzMSBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJaWYgKHZhbHVlICZsdDsgMCkKIAkJcmV0dXJuIHZhbHVlOwogCi0JaWYgKHB1dF91c2VyKHNpemVvZih2YWx1ZSksIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYW1wO3ZhbHVlLCBzaXplb2YodmFsdWUpKSkKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBzaXplb2YodmFsdWUpOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSksICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCi0JCQkJCSAgICBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwogCXUxNiBwYXlsb2FkX2xlbiA9IGN0eC0mZ3Q7dHhfbWF4X3BheWxvYWRfbGVuOwotCWludCBsZW47Ci0KLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaW50IGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJaWYgKGxlbiAmbHQ7IHNpemVvZihwYXlsb2FkX2xlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhbXA7cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbikpKQomIzQzOwlvcHQtJmd0O29wdGxlbiA9IHNpemVvZihwYXlsb2FkX2xlbik7CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDtwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSwKJiM0MzsJCQkgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YocGF5bG9hZF9sZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsCi0JCQkgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KQogewogCWludCByYyA9IDA7CiAKQEAgLTU2NSwxNyAmIzQzOzU0OSwxNiBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsCiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBUTFNfVFg6CiAJY2FzZSBUTFNfUlg6Ci0JCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sCi0JCQkJCSAgICBvcHRuYW1lID09IFRMU19UWCk7CiYjNDM7CQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpOwogCQlicmVhazsKIAljYXNlIFRMU19UWF9aRVJPQ09QWV9STzoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTsKIAkJYnJlYWs7CiAJY2FzZSBUTFNfUlhfRVhQRUNUX05PX1BBRDoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpOwogCQlicmVhazsKIAljYXNlIFRMU19UWF9NQVhfUEFZTE9BRF9MRU46Ci0JCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVOT1BST1RPT1BUOwpAQCAtNTkxLDEyICYjNDM7NTc0LDI1IEBAIHN0YXRpYyBpbnQgdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7CiYjNDM7CXNvY2tvcHRfdCBvcHQ7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAobGV2ZWwgIT0gU09MX1RMUykKIAkJcmV0dXJuIGN0eC0mZ3Q7c2tfcHJvdG8tJmd0O2dldHNvY2tvcHQoc2ssIGxldmVsLAogCQkJCQkJIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIAotCXJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwllcnIgPSBzb2Nrb3B0X2luaXRfdXNlcigmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsICZhbXA7b3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2NyeXB0b19pbmZvKGNvbnN0IHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jCmluZGV4IGZlNWE1MjY4YmMzNGVjLi45NzQwNjVhMjNmYTgyNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYwpAQCAtMjgsNyAmIzQzOzI4LDEwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdm1fc29ja2V0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ljbXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXRpbmV0L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGxzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwogCiAjaWZuZGVmIEFGX1ZTT0NLCkBAIC00MCw2ICYjNDM7NDMsNDUgQEAKICNpZm5kZWYgSUNNUF9GSUxURVIKICNkZWZpbmUgSUNNUF9GSUxURVIgMQogI2VuZGlmCiYjNDM7I2lmbmRlZiBJUFY2X0hEUklOQ0wKJiM0MzsjZGVmaW5lIElQVjZfSERSSU5DTCAzNgomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgSVBWNl9DSEVDS1NVTQomIzQzOyNkZWZpbmUgSVBWNl9DSEVDS1NVTSA3CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBBRl9JRUVFODAyMTU0CiYjNDM7I2RlZmluZSBBRl9JRUVFODAyMTU0IDM2CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBTT0xfSUVFRTgwMjE1NAomIzQzOyNkZWZpbmUgU09MX0lFRUU4MDIxNTQgMAomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgV1BBTl9XQU5UQUNLCiYjNDM7I2RlZmluZSBXUEFOX1dBTlRBQ0sgMAomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgQUZfUEhPTkVUCiYjNDM7I2RlZmluZSBBRl9QSE9ORVQgMzUKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFNPTF9QTlBJUEUKJiM0MzsjZGVmaW5lIFNPTF9QTlBJUEUgMjc1CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBQTl9QUk9UT19QSVBFCiYjNDM7I2RlZmluZSBQTl9QUk9UT19QSVBFIDIKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUAomIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQIDEKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FCiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVBfTk9ORSAwCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBfSVAKJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUF9JUCAxCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBTT0xfVExTCiYjNDM7I2RlZmluZSBTT0xfVExTIDI4MgomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgVENQX1VMUAomIzQzOyNkZWZpbmUgVENQX1VMUCAzMQomIzQzOyNlbmRpZgogCiAvKiAtLS0tLS0tLS0tIG5ldGxpbmsgLS0tLS0tLS0tLSAqLwogCkBAIC0zOTQsNCAmIzQzOzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpCiAJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwogfQogCiYjNDM7LyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKHJhd3Y2KQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChyYXd2NikKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19VRFApOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7U09DS19SQVcvSVB2NiBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04ocmF3djYpCiYjNDM7ewomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihyYXd2NiwgaGRyaW5jbF9vdmVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTZdID0ge307CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLAomIzQzOwkJCQlidWYsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXIKJiM0MzsgKiBpbnN0ZWFkIG9mIHJldHVybmluZyBFSU5WQUwgb24gYSBzaG9ydCBidWZmZXIuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IDI7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoMiwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwkvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi8KJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX0VRKC0xLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocmF3djYsIGJhZF9vcHRuYW1lKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CS8qIFNPTF9SQVcgcmVhY2hlcyBkb19yYXd2Nl9nZXRzb2Nrb3B0KCkgZGlyZWN0bHkuICovCiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1JBVywgMHg3ZmZmLCAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogLS0tLS0tLS0tLSBpZWVlODAyMTU0IChkZ3JhbSkgLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzO0ZJWFRVUkUoaWVlZTgwMjE1NCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoaWVlZTgwMjE1NCkKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7QUZfSUVFRTgwMjE1NCBkZ3JhbSBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NCkKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWwgPSAtMTsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX292ZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxNl0gPSB7fTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSywKJiM0MzsJCQkJYnVmLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX3VuZGVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IDI7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSywKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUSgyLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgMHg3ZmZmLAomIzQzOwkJCQkgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqLwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCBiYWRfbGV2ZWwpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUkFXLCBXUEFOX1dBTlRBQ0ssCiYjNDM7CQkJCSAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVPUE5PVFNVUFAsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tLS0tLS0tIHBob25ldCAocGVwKSAtLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7RklYVFVSRShwaG9uZXQpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHBob25ldCkKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7QUZfUEhPTkVUIHBpcGUgc29ja2V0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKHBob25ldCkKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWwgPSAtMTsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSBQTlBJUEVfRU5DQVBfTk9ORSB8fCB2YWwgPT0gUE5QSVBFX0VOQ0FQX0lQKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfb3ZlcnNpemVfY2xhbXBlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzE2XSA9IHt9OwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsCiYjNDM7CQkJCWJ1ZiwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwZXAgY2xhbXBzIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXIuIFVzZSBhbgomIzQzOyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsCiYjNDM7ICogd2hpY2ggd3JpdGVzIGEgZnVsbCBpbnQgdmlhIHB1dF91c2VyKCksIGRvZXMgbm90IHNjcmliYmxlIHBhc3QgaXQuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoMiwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCAweDdmZmYsICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwZXBfZ2V0c29ja29wdCgpIHJlamVjdHMgYW55IGxldmVsIG90aGVyIHRoYW4gU09MX1BOUElQRS4gKi8KJiM0MztURVNUX0YocGhvbmV0LCBiYWRfbGV2ZWwpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUkFXLCBQTlBJUEVfRU5DQVAsICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7RklYVFVSRSh0bHMpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CWludCBzZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHRscykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CX07CiYjNDM7CXNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGEpOwomIzQzOwlpbnQgbGZkOwomIzQzOwomIzQzOwlzZWxmLSZndDtmZCA9IC0xOwomIzQzOwlzZWxmLSZndDtzZmQgPSAtMTsKJiM0MzsKJiM0MzsJbGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGxmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtUQ1Agc29ja2V0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2EsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHwKJiM0MzsJICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YSwgJmFtcDthbGVuKSkgewomIzQzOwkJY2xvc2UobGZkKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2xpc3RlbmVyIHNldHVwOiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGNvbm5lY3Qoc2VsZi0mZ3Q7ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2EsIHNpemVvZihhKSkpIHsKJiM0MzsJCWNsb3NlKGxmZCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtjb25uZWN0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CXNlbGYtJmd0O3NmZCA9IGFjY2VwdChsZmQsIE5VTEwsIE5VTEwpOwomIzQzOwljbG9zZShsZmQpOwomIzQzOwlpZiAoc2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsICYjMzQ7dGxzJiMzNDssIHNpemVvZigmIzM0O3RscyYjMzQ7KSkpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtUQ1BfVUxQPXRsczogJXMgKGJ1aWx0IHdpdGhvdXQgVExTPykmIzM0OywKJiM0MzsJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTih0bHMpCiYjNDM7ewomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O2ZkKTsKJiM0MzsJaWYgKHNlbGYtJmd0O3NmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7c2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoKTogZml4ZWQtc2l6ZSBpbnQsIGV4YWN0IGxlbmd0aCByZXF1aXJlZC4gKi8KJiM0MztURVNUX0YodGxzLCB0eF96ZXJvY29weV9leGFjdCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X3dyb25nX2xlbikKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSAyOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywKJiM0MzsJCQkJICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoKTogTlVMTCBvcHR2YWwgc3RpbGwgeWllbGRzIEVJTlZBTCAtLSB0aGUKJiM0MzsgKiBjb252ZXJ0ZWQgY29kZSB0ZXN0cyBvcHQtJmd0O2l0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIGNvbmZfbnVsbF9vcHR2YWwpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCBOVUxMLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJY2hhciBidWZbMl07CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCBidWYsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVExTX1RYIGJlZm9yZSBjcnlwdG8gaXMgc2V0IHJlcG9ydHMgbm90LXJlYWR5LiAqLwomIzQzO1RFU1RfRih0bHMsIGNvbmZfbm90X3JlYWR5KQomIzQzO3sKJiM0MzsJc3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvOwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDtpbmZvLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRUJVU1ksIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2V0IFRYIGNyeXB0bywgdGhlbiByZWFkIGl0IGJhY2sgYXQgdGhlIGJhc2UgYW5kIGZ1bGwgc2l6ZXMsIGV4ZXJjaXNpbmcKJiM0MzsgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgY29uZl9jcnlwdG9fcm91bmR0cmlwKQomIzQzO3sKJiM0MzsJc3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0gewomIzQzOwkJLmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTiwKJiM0MzsJCS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IGZ1bGw7CiYjNDM7CXN0cnVjdCB0bHNfY3J5cHRvX2luZm8gYmFzZTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsKJiM0MzsJaWYgKHNldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDt0eCwgc2l6ZW9mKHR4KSkpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtzZXQgVExTX1RYIGFlc19nY21fMTI4OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YoYmFzZSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsICZhbXA7YmFzZSwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTsKJiM0MzsJQVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YoZnVsbCk7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsICZhbXA7ZnVsbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihmdWxsKSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGZ1bGwuaW5mby5jaXBoZXJfdHlwZSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih0bHMsIGJhZF9vcHRuYW1lKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIDB4N2ZmZiwgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzO30KJiM0MzsKIFRFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uOiBBIERlZXAgRGl2ZSBpbnRvIGdldHNvY2tvcHQgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0OiB0aGUgcmVmYWN0b3Jpbmcgb2YgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9ucy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBhcmVhcywgc3BlY2lmaWNhbGx5IGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGBuZXQvaXB2Ni9yYXcuY2AsIGBuZXQvcGhvbmV0L3BlcC5jYCwgYG5ldC90bHMvdGxzX21haW4uY2AsIGFuZCBldmVuIHRoZSBzZWxmdGVzdHMsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNgLiAgSXQgYXBwZWFycyB0aGV5IGFyZSBtb3ZpbmcgZnJvbSB0aGUgb2xkZXIgYGNvcHlfdG9fdXNlcmAgYW5kIGBwdXRfdXNlcmAgbWV0aG9kcyB0byB0aGUgbmV3IGBzb2Nrb3B0X3RgIGFuZCBgY29weV90b19pdGVyYCBBUEkuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGltcGFjdHMgaG93IGBnZXRzb2Nrb3B0YCBvcGVyYXRlcyBpbnRlcm5hbGx5LgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IHRlc3RhYmlsaXR5LiBDYW4gd2UgYWRlcXVhdGVseSBjb3ZlciB0aGlzIGNoYW5nZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIHRoZXNlIGFyZSBuZXR3b3JrIHByb3RvY29scy4gYGllZWU4MDIxNTRgLCBgaXB2NmAsIGBwaG9uZXRgLCBhbmQgYHRsc2AgYXJlIGFsbCBuZXR3b3JrIHByb3RvY29scywgdGhleSBzaG91bGQgYmUgdGVzdGFibGUgd2l0aGluIFFFTVUuICBTbyBsZXQmIzM5O3MgZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBmb2N1cyBvbiBzb2NrZXQgdHlwZXMgdGhhdCByZWxhdGUgdG8gdGhlIHByb3RvY29scy4KKiAgIGBpZWVlODAyMTU0YCBpcyBoYW5kbGVkIHdpdGggYW4gYEFGX0lFRUU4MDIxNTRgIHNvY2tldC4KKiAgIGBpcHY2YCB1c2VzIGBTT0NLX1JBV2AuCiogICBgcGhvbmV0YCB1c2VzIGBBRl9QSE9ORVRgLgoqICAgYHRsc2AgdXNlcyBgVENQX1VMUGAuCgpPa2F5LCBuZXh0LCB3ZSBoYXZlIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgd2UgbmVlZCB0byBmdXp6LiBUaW1lIHRvIGlkZW50aWZ5IHRhcmdldHM6Ci0gYGRvX2RncmFtX2dldHNvY2tvcHRgCi0gYGRncmFtX2dldHNvY2tvcHRgCi0gYGRvX3Jhd3Y2X2dldHNvY2tvcHRgCi0gYHJhd3Y2X2dldHNvY2tvcHRgCi0gYGRvX3BlcF9nZXRzb2Nrb3B0YAotIGBwZXBfZ2V0c29ja29wdGAKLSBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmAKLSBgZG9fdGxzX2dldHNvY2tvcHRfdHhfemNgCi0gYGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZGAKLSBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gCi0gYGRvX3Rsc19nZXRzb2Nrb3B0YAotIGB0bHNfZ2V0c29ja29wdGAKCkZpbmFsbHksIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSB3aWxsIGhhdmUgdG8gZW5zdXJlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBjb25maWdzIGVuYWJsZWQ6Ci0gYENPTkZJR19JRUVFODAyMTU0YAotIGBDT05GSUdfSUVFRTgwMjE1NF9TT0NLRVRgCi0gYENPTkZJR19JUFY2YAotIGBDT05GSUdfUEhPTkVUYAotIGBDT05GSUdfVExTYAoKV2UmIzM5O2xsIHZlcmlmeSB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWZvcmUgcnVubmluZyB0ZXN0cyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGhpdHRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoZXNlIGNvbmZpZ3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElFRUU4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRfRFJJVkVSU1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IGRyaXZlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTMtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6Y29uZmlnIElFRUU4MDIxNTRfRkFLRUxCXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI0OmNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTI1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zNS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzozNjpjb25maWcgSUVFRTgwMjE1NF9NUkYyNEo0MFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTM3LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIE1SRjI0SjQwIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy00Ny1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo0ODpjb25maWcgSUVFRTgwMjE1NF9DQzI1MjBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNTgtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6NTk6Y29uZmlnIElFRUU4MDIxNTRfQVRVU0JcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0FUVVNCIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo2OTpjb25maWcgSUVFRTgwMjE1NF9BREY3MjQyXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtBREY3MjQyIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy03OS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo4MDpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy04MS1cdHRyaXN0YXRlIFwmIzM0O0Nhc2NvZGEgQ0E4MjEwIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05MS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo5Mjpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGU1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtDQTgyMTAgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTAxLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjEwMjpjb25maWcgSUVFRTgwMjE1NF9NQ1IyMEFcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMDMtXHR0cmlzdGF0ZSBcJiMzNDtNQ1IyMEEgdHJhbnNjZWl2ZXIgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTExMy1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMTQ6Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTUtXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWc6Mjpjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0OzZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjRcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnPTE0PWlmIElFRUU4MDIxNTRcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE2OmNvbmZpZyBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xNy1cdGJvb2wgXCYjMzQ7SUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMC1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjE6Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBhcHByb2FjaCBhIG5ldyBwcm9qZWN0OgoKKipDb25maWd1cmluZyBhIFNlY3VyZSBXaXJlbGVzcyBOZXR3b3JrKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGJ1aWxkaW5nIGEgc2VjdXJlIHdpcmVsZXNzIG5ldHdvcmssIHByb2JhYmx5IGFuIGVtYmVkZGVkIG9yIElvVCBraW5kIG9mIHRoaW5nLCBnaXZlbiB0aGUgY29uZmlndXJhdGlvbnMgbGlzdGVkLgoKRmlyc3QsIGBJRUVFODAyMTU0YCBpcyB0aGUgZm91bmRhdGlvbi4gSXQmIzM5O3MgdGhlIHBoeXNpY2FsIGFuZCBNQUMgbGF5ZXIgc3RhbmRhcmQgZm9yIGxvdy1wb3dlciwgbG93LXJhdGUgd2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3Jrcy4gVGhlbiwgYElFRUU4MDIxNTRfU09DS0VUYCBzdWdnZXN0cyB0aGUgYXBwbGljYXRpb24gbGF5ZXIgd2lsbCBiZSBidWlsdCBvbiBzb2NrZXRzIOKAkyB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBpbnRlcmZhY2luZyB3aXRoIG90aGVyIG5ldHdvcmsgc3RhY2tzLgoKYElQVjZgIHRlbGxzIG1lIHdlJiMzOTtyZSBwbGFubmluZyBmb3IgdGhlIGZ1dHVyZSwgZW1icmFjaW5nIGEgbW9kZXJuIGludGVybmV0IHByb3RvY29sLiBHb29kLiBTY2FsYWJpbGl0eSBhbmQgYSBsYXJnZXIgYWRkcmVzcyBzcGFjZSBhcmUgZGVmaW5pdGVseSBrZXkgY29uc2lkZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGV4cGVjdGluZyBhIG11bHRpdHVkZSBvZiBkZXZpY2VzLiBgUEhPTkVUYCDigJMgbm93IHRoYXTigJlzIGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIHByb3ByaWV0YXJ5IG9yIGFwcGxpY2F0aW9uLXNwZWNpZmljIG5ldHdvcmtpbmcgbGF5ZXIgKmFib3ZlKiA4MDIuMTUuNCBhbmQgcG90ZW50aWFsbHkgKmJlbG93KiBJUHY2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4gSXMgdGhpcyBhYm91dCBtZXNoIG5ldHdvcmtpbmcsIGEgcGFydGljdWxhciByb3V0aW5nIHByb3RvY29sLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2UmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBpdHMgaW1wbGVtZW50YXRpb24uCgpGaW5hbGx5LCBgVExTYC4gUGVyZmVjdC4gRW5kLXRvLWVuZCBzZWN1cml0eSBpcyBlc3NlbnRpYWwgZm9yIGFueSBtb2Rlcm4gbmV0d29yay4gSeKAmW0gdGhpbmtpbmcgZW5jcnlwdGlvbiwgYXV0aGVudGljYXRpb24sIGludGVncml0eSBjaGVja3MuLi4gdGhlIHdob2xlIHNoZWJhbmcuIFNvIHRoZSBhc3N1bXB0aW9uIGlzIHRoZSB1bmRlcmx5aW5nIHJhZGlvIGFuZCBuZXR3b3JrIGxheWVycyBhcmUgY29uc2lkZXJlZCB1bnRydXN0ZWQsIGhlbmNlIHRoZSBuZWNlc3NpdHkgb2YgYSBzZWN1cmUgdHJhbnNwb3J0IGxheWVyLgoKVGhlIGNvcmUgcXVlc3Rpb24gbm93LCBpcyB0byBpbW1lZGlhdGVseSB2ZXJpZnkgdGhlIHNwZWNpZmljcyBvZiBgUEhPTkVUYCBhbmQgYFRMU2AuIEFyZSB0aGV5IGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLCBhbmQgdGhlIGV4cGVjdGVkIGNvbnN0cmFpbnRzIG9mIHRoZSBoYXJkd2FyZT8gSXMgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIGxvdy1wb3dlciBkZXZpY2VzPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBtYWtlIHN1cmUgdGhlIHBpZWNlcyBmaXQgYmVmb3JlIG1vdmluZyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhPTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9waG9uZXQvS2NvbmZpZy01LVxubmV0L3Bob25ldC9LY29uZmlnOjY6Y29uZmlnIFBIT05FVFxubmV0L3Bob25ldC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQaG9uZXQgcHJvdG9jb2xzIGZhbWlseVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vS2NvbmZpZz04NzM9Y29uZmlnIEhBUkRFTl9CUkFOQ0hfSElTVE9SWVxuLS1cbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxuYXJjaC9hcm0vbW0vS2NvbmZpZzo4ODM6Y29uZmlnIFRMU19SRUdfRU1VTFxuYXJjaC9hcm0vbW0vS2NvbmZpZy04ODQtXHRib29sXG4tLVxubmV0L3Rscy9LY29uZmlnLTQtI1xubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xubmV0L3Rscy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xOC1cbm5ldC90bHMvS2NvbmZpZzoxOTpjb25maWcgVExTX0RFVklDRVxubmV0L3Rscy9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTY1CgkJCQkJCQlvdXRwdXQ6IDI3NgoJCQkJCQkJdGhvdWdodHM6IDcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBHZXRzb2Nrb3B0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSByZWZhY3RvciBvZiB0aGUgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9uIGZvciBhIGZldyBrZXkgYXJlYXM6IGBpZWVlODAyMTU0YCwgYGlwdjZgLCBgcGhvbmV0YCwgYW5kIGB0bHNgLiBUaGUgZHJpdmluZyBmb3JjZSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIHNwZWNpZmljYWxseSBzd2l0Y2hpbmcgZnJvbSBgY29weV90b191c2VyYCB0byBgY29weV90b19pdGVyYC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIGEgY29yZSBrZXJuZWwgY2hhbmdlLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zLgoKTXkgZm9jdXMgaXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgZG9fZGdyYW1fZ2V0c29ja29wdGAsIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYGRvX3Jhd3Y2X2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBkb19wZXBfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCB0aGUgdmFyaW91cyBgZG9fdGxzX2dldHNvY2tvcHRfKmAgZnVuY3Rpb25zIGFuZCBgdGxzX2dldHNvY2tvcHRgIGl0c2VsZi4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgpUaGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgYElFRUU4MDIxNTRgLCBgSUVFRTgwMjE1NF9TT0NLRVRgLCBgSVBWNmAsIGBQSE9ORVRgLCBhbmQgYFRMU2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgYXJlIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBjaGVjayB0aGVpciBkZXBlbmRlbmNpZXMuIGBJUFY2YCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLiBgSUVFRTgwMjE1NF9TT0NLRVRgIGNsZWFybHkgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAuIGBQSE9ORVRgIGFuZCBgVExTYCBhcmUgcHJvdG9jb2wgZmFtaWxpZXMsIHNvIHRoYXQmIzM5O3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC4KCkxldCBtZSBwaW5wb2ludCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQuIGBkZ3JhbV9nZXRzb2Nrb3B0YCByZXNpZGVzIGluIGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBpbiBgbmV0L2lwdjYvcmF3LmNgLCBgcGVwX2dldHNvY2tvcHRgIGlzIGluIGBuZXQvcGhvbmV0L3BlcC5jYCwgYW5kIHRoZSBgdGxzX2dldHNvY2tvcHRgIGZ1bmN0aW9ucyBsaXZlIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoIFRMUy4gT2theSwgdGhlcmUmIzM5O3MgYGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmZgLCBgZG9fdGxzX2dldHNvY2tvcHRfdHhfemNgLCBgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkYCwgYGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgYGRvX3Rsc19nZXRzb2Nrb3B0YCwgYW5kIGB0bHNfZ2V0c29ja29wdGAuIEdvdCBpdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGVhY2ggb2YgdGhlICpkb18qIGZ1bmN0aW9ucyBpcyB0aGUgb25seSBvbmUgaW4gaXRzIHJlc3BlY3RpdmUgbW9kdWxlLiBgaWVlZTgwMjE1NGAgb25seSBoYXMgYGRvX2RncmFtX2dldHNvY2tvcHRgLCB0aGF0JiMzOTtzIGdvb2QuIGBpcHY2YCBvbmx5IGhhcyBgZG9fcmF3djZfZ2V0c29ja29wdGAsIHBlcmZlY3QuIGBwaG9uZXRgIGhhcyBgZG9fcGVwX2dldHNvY2tvcHRgLCBmaW5lLiBBbmQgdGhlbiwgdGhlcmUgYXJlIG11bHRpcGxlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggVExTLgoKUmlnaHQsIEkmIzM5O2xsIHVwZGF0ZSBteSBub3RlcyB0byByZWZsZWN0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgdW5kZXIgYEZvY3VzU3ltYm9sc2AuIEFuZCBJJiMzOTtsbCBiZSBjZXJ0YWluIHRvIGxpc3QgdGhlc2UgY29uZmlndXJhdGlvbnMgYXMgYEVuYWJsZUNvbmZpZ3NgIHRvIGtlZXAgdHJhY2suCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMuCmBJRUVFODAyMTU0YApgSUVFRTgwMjE1NF9TT0NLRVRgCmBJUFY2YApgUEhPTkVUYApgVExTYAoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMzozNjo1Mi4yOTY2MTQwNTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM1ODI3MTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X1NPQ0tFVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiUEhPTkVUXCIsXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19kZ3JhbV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkZ3JhbV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19yYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJyYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19wZXBfZ2V0c29ja29wdFwiLFxuICAgIFwicGVwX2dldHNvY2tvcHRcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X2NvbmZcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF9ub19wYWRcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdFwiLFxuICAgIFwidGxzX2dldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM2OjUyLjI5NjYyMjE3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5Nzk5ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2YxMTAzMzAyNzcwZDg4NGQxOTk3NzNlNzBhMDExMjMwZDg0OTAwYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMzozNjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXFxuaW5kZXggODVkY2UyOTZkNzUxMzkuLjc2M2Y2M2U0OGFmZTQ1IDEwMDY0NFxcbi0tLSBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXFxuKysrIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcXG5AQCAtODMxLDIwICs4MzEsMTIgQEAgc3RhdGljIGludCBpZWVlODAyMTU0X2RncmFtX2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19kZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTtcXG4tXFxuIFxcdGludCB2YWwsIGxlbjtcXG4gXFxuLVxcdGlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NClcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXG4tXFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcbi1cXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpO1xcbitcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9wdC1cXHUwMDNlb3B0bGVuLCBzaXplb2YoaW50KSk7XFxuIFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBXUEFOX1dBTlRBQ0s6XFxuQEAgLTg3MSwxMCArODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcXHUwMDI2dmFsLCBsZW4pKVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4re1xcbitcXHRzb2Nrb3B0X3Qgb3B0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcXHUwMDI2b3B0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXFxuaW5kZXggM2NjNTg2OThjYmJkM2EuLjFmMTU5NDJkMTQxNjNlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3Jhdy5jXFxuKysrIGIvbmV0L2lwdjYvcmF3LmNcXG5AQCAtMTA1MSwxNCArMTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7XFxuIFxcdGludCB2YWwsIGxlbjtcXG4gXFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiBcXHRjYXNlIElQVjZfSERSSU5DTDpcXG5AQCAtMTA4Miw5ICsxMDgwLDggQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFxuIFxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWwsIGxlbikpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTEwOTIsNiArMTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuK1xcdHNvY2tvcHRfdCBvcHQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbiBcXHRzd2l0Y2ggKGxldmVsKSB7XFxuIFxcdGNhc2UgU09MX1JBVzpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExMDksNyArMTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gZG9fcmF3djZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG5kaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmNcXG5pbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xcbisrKyBiL25ldC9waG9uZXQvcGVwLmNcXG5AQCAtMTA3OCwxNyArMTA3OCwxMSBAQCBzdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLVxcdFxcdFxcdFxcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcXG4gXFx0aW50IGxlbiwgdmFsO1xcbiBcXG4tXFx0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXFxuLVxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgUE5QSVBFX0VOQ0FQOlxcbiBcXHRcXHR2YWwgPSBwbi1cXHUwMDNlaWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FO1xcbkBAIC0xMTEyLDExICsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiBcXHR9XFxuIFxcbi1cXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihpbnQpLCBsZW4pO1xcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbitcXHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXFx1MDAzZW9wdGxlbik7XFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXFxuK3tcXG4rXFx0c29ja29wdF90IG9wdDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxcbitcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbitcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xcbmluZGV4IDhjNTg4Y2RhYjczM2RhLi5mYmIyNzQyODdhYTVmMiAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5AQCAtNDI0LDIwICs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRyZXR1cm4gbWFzaztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgX191c2VyICpvcHRsZW4sIGludCB0eClcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcXG4gXFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIFxcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvO1xcbiBcXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XFxuLVxcdGludCBsZW47XFxuK1xcdGludCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKCFvcHR2YWwgfHwgKGxlbiBcXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xcbitcXHRpZiAoIW9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1ZiB8fCBsZW4gXFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xcbiBcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTQ2Miw3ICs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxcbitcXHRcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcXG4gXFx0XFx0XFx0cmMgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC00NzgsNDQgKzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRtZW1jcHkoY3J5cHRvX2luZm9fcmVjX3NlcShjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MpLFxcbiBcXHQgICAgICAgY2N0eC1cXHUwMDNlcmVjX3NlcSwgY2lwaGVyX2Rlc2MtXFx1MDAzZXJlY19zZXEpO1xcbiBcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8pKVxcbitcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8sXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvKVxcbiBcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiBcXHR1bnNpZ25lZCBpbnQgdmFsdWU7XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHZhbHVlID0gY3R4LVxcdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi1cXHRcXHRcXHRcXHQgICAgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbi1cXHRpbnQgdmFsdWUsIGxlbjtcXG4rXFx0aW50IHZhbHVlLCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZih2YWx1ZSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNTI1LDM4ICs1MTYsMzEgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRpZiAodmFsdWUgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsdWU7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSkpKVxcbitcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IHNpemVvZih2YWx1ZSk7XFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXFxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gXFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW47XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZihwYXlsb2FkX2xlbikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcXG4rXFx0aWYgKGNvcHlfdG9faXRlcihcXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbiksXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtNTY1LDE3ICs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBUTFNfVFg6XFxuIFxcdGNhc2UgVExTX1JYOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbitcXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyYyA9IC1FTk9QUk9UT09QVDtcXG5AQCAtNTkxLDEyICs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbitcXHRzb2Nrb3B0X3Qgb3B0O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXFxuIFxcdFxcdHJldHVybiBjdHgtXFx1MDAzZXNrX3Byb3RvLVxcdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gXFxuLVxcdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXFxuaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbkBAIC0yOCw3ICsyOCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWNtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGxzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBBRl9WU09DS1xcbkBAIC00MCw2ICs0Myw0NSBAQFxcbiAjaWZuZGVmIElDTVBfRklMVEVSXFxuICNkZWZpbmUgSUNNUF9GSUxURVIgMVxcbiAjZW5kaWZcXG4rI2lmbmRlZiBJUFY2X0hEUklOQ0xcXG4rI2RlZmluZSBJUFY2X0hEUklOQ0wgMzZcXG4rI2VuZGlmXFxuKyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxcbisjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gN1xcbisjZW5kaWZcXG4rI2lmbmRlZiBBRl9JRUVFODAyMTU0XFxuKyNkZWZpbmUgQUZfSUVFRTgwMjE1NCAzNlxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxcbisjZGVmaW5lIFNPTF9JRUVFODAyMTU0IDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgV1BBTl9XQU5UQUNLXFxuKyNkZWZpbmUgV1BBTl9XQU5UQUNLIDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgQUZfUEhPTkVUXFxuKyNkZWZpbmUgQUZfUEhPTkVUIDM1XFxuKyNlbmRpZlxcbisjaWZuZGVmIFNPTF9QTlBJUEVcXG4rI2RlZmluZSBTT0xfUE5QSVBFIDI3NVxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTl9QUk9UT19QSVBFXFxuKyNkZWZpbmUgUE5fUFJPVE9fUElQRSAyXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUFxcbisjZGVmaW5lIFBOUElQRV9FTkNBUCAxXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUgMFxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcXG4rI2RlZmluZSBQTlBJUEVfRU5DQVBfSVAgMVxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfVExTXFxuKyNkZWZpbmUgU09MX1RMUyAyODJcXG4rI2VuZGlmXFxuKyNpZm5kZWYgVENQX1VMUFxcbisjZGVmaW5lIFRDUF9VTFAgMzFcXG4rI2VuZGlmXFxuIFxcbiAvKiAtLS0tLS0tLS0tIG5ldGxpbmsgLS0tLS0tLS0tLSAqL1xcbiBcXG5AQCAtMzk0LDQgKzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXFxuIFxcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4gfVxcbiBcXG4rLyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocmF3djYpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChyYXd2NilcXG4re1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZWZkIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHJhd3Y2KVxcbit7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK31cXG4rXFxuK1RFU1RfRihyYXd2NiwgaGRyaW5jbF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcXG4rICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxcbisgKi9cXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi9cXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9FUSgtMSwgdmFsKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIDB4N2ZmZiwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKGllZWU4MDIxNTQpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChpZWVlODAyMTU0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1xcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19vdmVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdGNoYXIgYnVmWzE2XSA9IHt9O1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKDIsIG9wdGxlbik7XFxuK31cXG4rXFxuK1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqL1xcbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1JBVywgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocGhvbmV0KVxcbit7XFxuK1xcdGludCBmZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAocGhvbmV0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX1BIT05FVCBwaXBlIHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHBob25ldClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XFxuK31cXG4rXFxuK1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuXFxuKyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXFxuKyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxcbisgKi9cXG4rVEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbjtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXFxuK1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKHRscylcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdGludCBzZmQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKHRscylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYSA9IHtcXG4rXFx0XFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcXG4rXFx0fTtcXG4rXFx0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XFxuK1xcdGludCBsZmQ7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IC0xO1xcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSAtMTtcXG4rXFxuK1xcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChsZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRDUCBzb2NrZXQ6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmEsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHxcXG4rXFx0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhLCBcXHUwMDI2YWxlbikpIHtcXG4rXFx0XFx0Y2xvc2UobGZkKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJsaXN0ZW5lciBzZXR1cDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHR9XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNvbm5lY3Qoc2VsZi1cXHUwMDNlZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YSwgc2l6ZW9mKGEpKSkge1xcbitcXHRcXHRjbG9zZShsZmQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImNvbm5lY3Q6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcXG4rXFx0Y2xvc2UobGZkKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiVENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXFxcIixcXG4rXFx0XFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHRscylcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZXNmZCk7XFxuK31cXG4rXFxuKy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXFxuK1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcXG4rXFx0aW50IHZhbCA9IC0xO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcXG4rfVxcbitcXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZVxcbisgKiBjb252ZXJ0ZWQgY29kZSB0ZXN0cyBvcHQtXFx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxcbisgKi9cXG4rVEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuK1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGNoYXIgYnVmWzJdO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuKy8qIFRMU19UWCBiZWZvcmUgY3J5cHRvIGlzIHNldCByZXBvcnRzIG5vdC1yZWFkeS4gKi9cXG4rVEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFxcdTAwMjZpbmZvLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFQlVTWSwgZXJybm8pO1xcbit9XFxuK1xcbisvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZ1xcbisgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXFxuKyAqL1xcbitURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApXFxuK3tcXG4rXFx0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0ge1xcbitcXHRcXHQuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLFxcbitcXHRcXHQuaW5mby5jaXBoZXJfdHlwZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xcbitcXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGJhc2U7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2dHgsIHNpemVvZih0eCkpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZihiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXFx1MDAyNmJhc2UsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTtcXG4rXFx0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2ZnVsbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM2OjUyLjg5NzM0Njc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjg3NTc1MjgzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcGVwX2dldHNvY2tvcHRcIixcbiAgICBcInBlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF9jb25mXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF96Y1wiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlblwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uIGZvciBJRUVFODAyMTU0LCBJUHY2IHJhdyBzb2NrZXRzLCBQaG9uZXQsIGFuZCBUTFMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IEFQSSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmMTEwMzMwMjc3MGQ4ODRkMTk5NzczZTcwYTAxMTIzMGQ4NDkwMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMzozNjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbmluZGV4IDg1ZGNlMjk2ZDc1MTM5Li43NjNmNjNlNDhhZmU0NSAxMDA2NDRcbi0tLSBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG4rKysgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuQEAgLTgzMSwyMCArODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb19kZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTtcbi1cbiBcdGludCB2YWwsIGxlbjtcbiBcbi1cdGlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NClcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpO1xuK1x0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBvcHQtXHUwMDNlb3B0bGVuLCBzaXplb2YoaW50KSk7XG4gXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgV1BBTl9XQU5UQUNLOlxuQEAgLTg3MSwxMCArODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuK1x0b3B0LVx1MDAzZW9wdGxlbiA9IGxlbjtcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsLCBsZW4sIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gbGVuKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWwsIGxlbikpXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbitcdFx0XHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3tcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uMWYxNTk0MmQxNDE2M2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuKysrIGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xMDUxLDE0ICsxMDUxLDEyIEBAIHN0YXRpYyBpbnQgcmF3djZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgcmF3Nl9zb2NrICpycCA9IHJhdzZfc2soc2spO1xuIFx0aW50IHZhbCwgbGVuO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQVjZfSERSSU5DTDpcbkBAIC0xMDgyLDkgKzEwODAsOCBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFxuIFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbiBcbi1cdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTA5Miw2ICsxMDg5LDkgQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuIHtcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuK1xuIFx0c3dpdGNoIChsZXZlbCkge1xuIFx0Y2FzZSBTT0xfUkFXOlxuIFx0XHRicmVhaztcbkBAIC0xMTA5LDcgKzExMDksMTggQEAgc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0cmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdH1cbiBcbi1cdHJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuY1xuaW5kZXggNzA2OTI3MTM5MzkzM2UuLjdlZjRhOWEyNDBlZjhjIDEwMDY0NFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xuKysrIGIvbmV0L3Bob25ldC9wZXAuY1xuQEAgLTEwNzgsMTcgKzEwNzgsMTEgQEAgc3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHRcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3BlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBwZXBfc29jayAqcG4gPSBwZXBfc2soc2spO1xuIFx0aW50IGxlbiwgdmFsO1xuIFxuLVx0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXG4tXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBQTlBJUEVfRU5DQVA6XG4gXHRcdHZhbCA9IHBuLVx1MDAzZWlmaW5kZXggPyBQTlBJUEVfRU5DQVBfSVAgOiBQTlBJUEVfRU5DQVBfTk9ORTtcbkBAIC0xMTEyLDExICsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbi1cdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXG4rXHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXHUwMDNlb3B0bGVuKTtcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAocHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuK1x0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3tcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXG4rXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4rXG4rXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBkb19wZXBfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uZmJiMjc0Mjg3YWE1ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbisrKyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTQyNCwyMCArNDI0LDE2IEBAIHN0YXRpYyBfX3BvbGxfdCB0bHNfc2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbiBcdHJldHVybiBtYXNrO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLVx0XHRcdFx0ICBpbnQgX191c2VyICpvcHRsZW4sIGludCB0eClcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdCwgaW50IHR4KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm87XG4gXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XG4tXHRpbnQgbGVuO1xuK1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmICghb3B0dmFsIHx8IChsZW4gXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xuK1x0aWYgKCFvcHQtXHUwMDNlaXRlcl9vdXQudWJ1ZiB8fCBsZW4gXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSB7XG4gXHRcdHJjID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtNDYyLDcgKzQ1OCw4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHR9XG4gXG4gXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxuK1x0XHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcbitcdFx0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZigqY3J5cHRvX2luZm8pKVxuIFx0XHRcdHJjID0gLUVGQVVMVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtNDc4LDQ0ICs0NzUsMzggQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdG1lbWNweShjcnlwdG9faW5mb19yZWNfc2VxKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYyksXG4gXHQgICAgICAgY2N0eC1cdTAwM2VyZWNfc2VxLCBjaXBoZXJfZGVzYy1cdTAwM2VyZWNfc2VxKTtcbiBcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8pKVxuK1x0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8sXG4rXHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8pXG4gXHRcdHJjID0gLUVGQVVMVDtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLVx0XHRcdFx0ICAgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHVuc2lnbmVkIGludCB2YWx1ZTtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHZhbHVlID0gY3R4LVx1MDAzZXplcm9jb3B5X3NlbmRmaWxlO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpKSlcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSksIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLVx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuLVx0aW50IHZhbHVlLCBsZW47XG4rXHRpbnQgdmFsdWUsIGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAoY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChsZW4gXHUwMDNjIHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTUyNSwzOCArNTE2LDMxIEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdGlmICh2YWx1ZSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHZhbHVlO1xuIFxuLVx0aWYgKHB1dF91c2VyKHNpemVvZih2YWx1ZSksIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpKSlcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBzaXplb2YodmFsdWUpO1xuK1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHR1MTYgcGF5bG9hZF9sZW4gPSBjdHgtXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YocGF5bG9hZF9sZW4pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YocGF5bG9hZF9sZW4pLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbiksXG4rXHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC01NjUsMTcgKzU0OSwxNiBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgVExTX1RYOlxuIFx0Y2FzZSBUTFNfUlg6XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sXG4tXHRcdFx0XHRcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XG4rXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xuK1x0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19UWF9NQVhfUEFZTE9BRF9MRU46XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyYyA9IC1FTk9QUk9UT09QVDtcbkBAIC01OTEsMTIgKzU3NCwyNSBAQCBzdGF0aWMgaW50IHRsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXG4gXHRcdHJldHVybiBjdHgtXHUwMDNlc2tfcHJvdG8tXHUwMDNlZ2V0c29ja29wdChzaywgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcbi1cdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfY3J5cHRvX2luZm8oY29uc3Qgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG5pbmRleCBmZTVhNTI2OGJjMzRlYy4uOTc0MDY1YTIzZmE4MjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuQEAgLTI4LDcgKzI4LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuICNpZm5kZWYgQUZfVlNPQ0tcbkBAIC00MCw2ICs0Myw0NSBAQFxuICNpZm5kZWYgSUNNUF9GSUxURVJcbiAjZGVmaW5lIElDTVBfRklMVEVSIDFcbiAjZW5kaWZcbisjaWZuZGVmIElQVjZfSERSSU5DTFxuKyNkZWZpbmUgSVBWNl9IRFJJTkNMIDM2XG4rI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0NIRUNLU1VNXG4rI2RlZmluZSBJUFY2X0NIRUNLU1VNIDdcbisjZW5kaWZcbisjaWZuZGVmIEFGX0lFRUU4MDIxNTRcbisjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzZcbisjZW5kaWZcbisjaWZuZGVmIFNPTF9JRUVFODAyMTU0XG4rI2RlZmluZSBTT0xfSUVFRTgwMjE1NCAwXG4rI2VuZGlmXG4rI2lmbmRlZiBXUEFOX1dBTlRBQ0tcbisjZGVmaW5lIFdQQU5fV0FOVEFDSyAwXG4rI2VuZGlmXG4rI2lmbmRlZiBBRl9QSE9ORVRcbisjZGVmaW5lIEFGX1BIT05FVCAzNVxuKyNlbmRpZlxuKyNpZm5kZWYgU09MX1BOUElQRVxuKyNkZWZpbmUgU09MX1BOUElQRSAyNzVcbisjZW5kaWZcbisjaWZuZGVmIFBOX1BST1RPX1BJUEVcbisjZGVmaW5lIFBOX1BST1RPX1BJUEUgMlxuKyNlbmRpZlxuKyNpZm5kZWYgUE5QSVBFX0VOQ0FQXG4rI2RlZmluZSBQTlBJUEVfRU5DQVAgMVxuKyNlbmRpZlxuKyNpZm5kZWYgUE5QSVBFX0VOQ0FQX05PTkVcbisjZGVmaW5lIFBOUElQRV9FTkNBUF9OT05FIDBcbisjZW5kaWZcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9JUFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX0lQIDFcbisjZW5kaWZcbisjaWZuZGVmIFNPTF9UTFNcbisjZGVmaW5lIFNPTF9UTFMgMjgyXG4rI2VuZGlmXG4rI2lmbmRlZiBUQ1BfVUxQXG4rI2RlZmluZSBUQ1BfVUxQIDMxXG4rI2VuZGlmXG4gXG4gLyogLS0tLS0tLS0tLSBuZXRsaW5rIC0tLS0tLS0tLS0gKi9cbiBcbkBAIC0zOTQsNCArNDM2LDM4NiBAQCBURVNUX0YocmF3LCBiYWRfb3B0bmFtZSlcbiBcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiB9XG4gXG4rLyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cbitcbitGSVhUVVJFKHJhd3Y2KVxuK3tcbitcdGludCBmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAocmF3djYpXG4re1xuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihyYXd2Nilcbit7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuK31cbitcbitURVNUX0YocmF3djYsIGhkcmluY2xfZXhhY3QpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWwgPSAtMTtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xuK31cbitcbitURVNUX0YocmF3djYsIGhkcmluY2xfb3ZlcnNpemVfY2xhbXBlZClcbit7XG4rXHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuK1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbit9XG4rXG4rLyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcbisgKiBpbnN0ZWFkIG9mIHJldHVybmluZyBFSU5WQUwgb24gYSBzaG9ydCBidWZmZXIuXG4rICovXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gMDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0LyogQSBub24tSUNNUHY2IHJhdyBzb2NrZXQgaGFzIHRoZSBjaGVja3N1bSBkaXNhYmxlZCwgcmVwb3J0ZWQgYXMgLTEuICovXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfQ0hFQ0tTVU0sXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX0VRKC0xLCB2YWwpO1xuK31cbitcbitURVNUX0YocmF3djYsIGJhZF9vcHRuYW1lKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIDB4N2ZmZiwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShpZWVlODAyMTU0KVxuK3tcbitcdGludCBmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoaWVlZTgwMjE1NClcbit7XG4rXHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNjIDApXG4rXHRcdFNLSVAocmV0dXJuLCBcIkFGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKGllZWU4MDIxNTQpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbit9XG4rXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfZXhhY3QpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWwgPSAtMTtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rXHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX292ZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxuK1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbit9XG4rXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRpbnQgdmFsID0gMDtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSlcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXG4rXHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiBkZ3JhbV9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfSUVFRTgwMjE1NC4gKi9cbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgV1BBTl9XQU5UQUNLLFxuK1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiAtLS0tLS0tLS0tIHBob25ldCAocGVwKSAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShwaG9uZXQpXG4re1xuK1x0aW50IGZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChwaG9uZXQpXG4re1xuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9QSE9ORVQsIFNPQ0tfU0VRUEFDS0VULCBQTl9QUk9UT19QSVBFKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJBRl9QSE9ORVQgcGlwZSBzb2NrZXQ6ICVzXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04ocGhvbmV0KVxuK3tcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rfVxuK1xuK1RFU1RfRihwaG9uZXQsIGVuY2FwX2V4YWN0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rXHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XG4rfVxuK1xuK1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4rXHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK31cbitcbisvKiBwZXAgY2xhbXBzIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXIuIFVzZSBhblxuKyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXG4rICogd2hpY2ggd3JpdGVzIGEgZnVsbCBpbnQgdmlhIHB1dF91c2VyKCksIGRvZXMgbm90IHNjcmliYmxlIHBhc3QgaXQuXG4rICovXG4rVEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRpbnQgdmFsID0gMDtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbit9XG4rXG4rVEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWw7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXG4rVEVTVF9GKHBob25ldCwgYmFkX2xldmVsKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgUE5QSVBFX0VOQ0FQLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4rfVxuK1xuKy8qIC0tLS0tLS0tLS0gdGxzIC0tLS0tLS0tLS0gKi9cbitcbitGSVhUVVJFKHRscylcbit7XG4rXHRpbnQgZmQ7XG4rXHRpbnQgc2ZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUCh0bHMpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGEgPSB7XG4rXHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4rXHR9O1xuK1x0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XG4rXHRpbnQgbGZkO1xuK1xuK1x0c2VsZi1cdTAwM2VmZCA9IC0xO1xuK1x0c2VsZi1cdTAwM2VzZmQgPSAtMTtcbitcbitcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAobGZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJUQ1Agc29ja2V0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YSwgc2l6ZW9mKGEpKSB8fCBsaXN0ZW4obGZkLCAxKSB8fFxuK1x0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIFx1MDAyNmFsZW4pKSB7XG4rXHRcdGNsb3NlKGxmZCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImxpc3RlbmVyIHNldHVwOiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoY29ubmVjdChzZWxmLVx1MDAzZWZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YSwgc2l6ZW9mKGEpKSkge1xuK1x0XHRjbG9zZShsZmQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJjb25uZWN0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0c2VsZi1cdTAwM2VzZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcbitcdGNsb3NlKGxmZCk7XG4rXHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCJ0bHNcIiwgc2l6ZW9mKFwidGxzXCIpKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiVENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXCIsXG4rXHRcdCAgICAgc3RyZXJyb3IoZXJybm8pKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih0bHMpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbitcdGlmIChzZWxmLVx1MDAzZXNmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlc2ZkKTtcbit9XG4rXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoKTogZml4ZWQtc2l6ZSBpbnQsIGV4YWN0IGxlbmd0aCByZXF1aXJlZC4gKi9cbitURVNUX0YodGxzLCB0eF96ZXJvY29weV9leGFjdClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGludCk7XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xuK31cbitcbitURVNUX0YodGxzLCB0eF96ZXJvY29weV93cm9uZ19sZW4pXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRpbnQgdmFsO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcbitcdFx0XHRcdCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuK31cbitcbisvKiBkb190bHNfZ2V0c29ja29wdF9jb25mKCk6IE5VTEwgb3B0dmFsIHN0aWxsIHlpZWxkcyBFSU5WQUwgLS0gdGhlXG4rICogY29udmVydGVkIGNvZGUgdGVzdHMgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxuKyAqL1xuK1RFU1RfRih0bHMsIGNvbmZfbnVsbF9vcHR2YWwpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDY0O1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XG4rfVxuK1xuK1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRjaGFyIGJ1ZlsyXTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XG4rfVxuK1xuKy8qIFRMU19UWCBiZWZvcmUgY3J5cHRvIGlzIHNldCByZXBvcnRzIG5vdC1yZWFkeS4gKi9cbitURVNUX0YodGxzLCBjb25mX25vdF9yZWFkeSlcbit7XG4rXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGluZm87XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2aW5mbywgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRUJVU1ksIGVycm5vKTtcbit9XG4rXG4rLyogU2V0IFRYIGNyeXB0bywgdGhlbiByZWFkIGl0IGJhY2sgYXQgdGhlIGJhc2UgYW5kIGZ1bGwgc2l6ZXMsIGV4ZXJjaXNpbmdcbisgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXG4rICovXG4rVEVTVF9GKHRscywgY29uZl9jcnlwdG9fcm91bmR0cmlwKVxuK3tcbitcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCB0eCA9IHtcbitcdFx0LmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTixcbitcdFx0LmluZm8uY2lwaGVyX3R5cGUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LFxuK1x0fTtcbitcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xuK1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBiYXNlO1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcbitcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2dHgsIHNpemVvZih0eCkpKVxuK1x0XHRTS0lQKHJldHVybiwgXCJzZXQgVExTX1RYIGFlc19nY21fMTI4OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKGJhc2UpO1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZiYXNlLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoYmFzZSksIG9wdGxlbik7XG4rXHRBU1NFUlRfRVEoVExTXzFfMl9WRVJTSU9OLCBiYXNlLnZlcnNpb24pO1xuK1x0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZmdWxsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoZnVsbCksIG9wdGxlbik7XG4rXHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcbit9XG4rXG4rVEVTVF9GKHRscywgYmFkX29wdG5hbWUpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xuK1x0aW50IHZhbDtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbit9XG4rXG4gVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM2OjUyLjg5NzM0ODc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5NDI2MzcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogQSBEZWVwIERpdmUgaW50byBnZXRzb2Nrb3B0IFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgbG9va2luZyBhdCBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdDogdGhlIHJlZmFjdG9yaW5nIG9mIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgYXJlYXMsIHNwZWNpZmljYWxseSBgbmV0L2llZWU4MDIxNTQvc29ja2V0LmNgLCBgbmV0L2lwdjYvcmF3LmNgLCBgbmV0L3Bob25ldC9wZXAuY2AsIGBuZXQvdGxzL3Rsc19tYWluLmNgLCBhbmQgZXZlbiB0aGUgc2VsZnRlc3RzLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jYC4gIEl0IGFwcGVhcnMgdGhleSBhcmUgbW92aW5nIGZyb20gdGhlIG9sZGVyIGBjb3B5X3RvX3VzZXJgIGFuZCBgcHV0X3VzZXJgIG1ldGhvZHMgdG8gdGhlIG5ldyBgc29ja29wdF90YCBhbmQgYGNvcHlfdG9faXRlcmAgQVBJLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBpbXBhY3RzIGhvdyBgZ2V0c29ja29wdGAgb3BlcmF0ZXMgaW50ZXJuYWxseS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IHRlc3RhYmlsaXR5LiBDYW4gd2UgYWRlcXVhdGVseSBjb3ZlciB0aGlzIGNoYW5nZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIHRoZXNlIGFyZSBuZXR3b3JrIHByb3RvY29scy4gYGllZWU4MDIxNTRgLCBgaXB2NmAsIGBwaG9uZXRgLCBhbmQgYHRsc2AgYXJlIGFsbCBuZXR3b3JrIHByb3RvY29scywgdGhleSBzaG91bGQgYmUgdGVzdGFibGUgd2l0aGluIFFFTVUuICBTbyBsZXQncyBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LiBXZSBuZWVkIHRvIGZvY3VzIG9uIHNvY2tldCB0eXBlcyB0aGF0IHJlbGF0ZSB0byB0aGUgcHJvdG9jb2xzLlxuKiAgIGBpZWVlODAyMTU0YCBpcyBoYW5kbGVkIHdpdGggYW4gYEFGX0lFRUU4MDIxNTRgIHNvY2tldC5cbiogICBgaXB2NmAgdXNlcyBgU09DS19SQVdgLlxuKiAgIGBwaG9uZXRgIHVzZXMgYEFGX1BIT05FVGAuXG4qICAgYHRsc2AgdXNlcyBgVENQX1VMUGAuXG5cbk9rYXksIG5leHQsIHdlIGhhdmUgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB3ZSBuZWVkIHRvIGZ1enouIFRpbWUgdG8gaWRlbnRpZnkgdGFyZ2V0czpcbi0gYGRvX2RncmFtX2dldHNvY2tvcHRgXG4tIGBkZ3JhbV9nZXRzb2Nrb3B0YFxuLSBgZG9fcmF3djZfZ2V0c29ja29wdGBcbi0gYHJhd3Y2X2dldHNvY2tvcHRgXG4tIGBkb19wZXBfZ2V0c29ja29wdGBcbi0gYHBlcF9nZXRzb2Nrb3B0YFxuLSBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmBcbi0gYGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjYFxuLSBgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkYFxuLSBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gXG4tIGBkb190bHNfZ2V0c29ja29wdGBcbi0gYHRsc19nZXRzb2Nrb3B0YFxuXG5GaW5hbGx5LCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9ucy4gV2Ugd2lsbCBoYXZlIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBlbmFibGVkOlxuLSBgQ09ORklHX0lFRUU4MDIxNTRgXG4tIGBDT05GSUdfSUVFRTgwMjE1NF9TT0NLRVRgXG4tIGBDT05GSUdfSVBWNmBcbi0gYENPTkZJR19QSE9ORVRgXG4tIGBDT05GSUdfVExTYFxuXG5XZSdsbCB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgYmVmb3JlIHJ1bm5pbmcgdGVzdHMgdG8gbWFrZSBzdXJlIHdlJ3JlIGhpdHRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoZXNlIGNvbmZpZ3MhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODMzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6MzY6NTkuODkxNjE2ODI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTczNTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElFRUU4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNDpjb25maWcgSUVFRTgwMjE1NF9GQUtFTEJcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI0OmNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yNS1cXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zNS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MzY6Y29uZmlnIElFRUU4MDIxNTRfTVJGMjRKNDBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBNUkYyNEo0MCB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDctXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjQ4OmNvbmZpZyBJRUVFODAyMTU0X0NDMjUyMFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy00OS1cXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy01OC1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6NTk6Y29uZmlnIElFRUU4MDIxNTRfQVRVU0JcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIkFUVVNCIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy02OC1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6Njk6Y29uZmlnIElFRUU4MDIxNTRfQURGNzI0MlxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiQURGNzI0MiB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzktXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjgwOmNvbmZpZyBJRUVFODAyMTU0X0NBODIxMFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiQ2FzY29kYSBDQTgyMTAgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTkxLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo5Mjpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGU1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDQTgyMTAgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTAxLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMDI6Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEwMy1cXHR0cmlzdGF0ZSBcXFwiTUNSMjBBIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTMtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjExNDpjb25maWcgSUVFRTgwMjE1NF9IV1NJTVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTUtXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWc6Mjpjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIjZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjRcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xNS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE2OmNvbmZpZyBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXFx0Ym9vbCBcXFwiSUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMC1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjItXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6Mzc6MDMuMjQ4OTgzNzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzMzc4MzA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggdGhlbSBhcyBJIHdvdWxkIGFwcHJvYWNoIGEgbmV3IHByb2plY3Q6XG5cbioqQ29uZmlndXJpbmcgYSBTZWN1cmUgV2lyZWxlc3MgTmV0d29yayoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYnVpbGRpbmcgYSBzZWN1cmUgd2lyZWxlc3MgbmV0d29yaywgcHJvYmFibHkgYW4gZW1iZWRkZWQgb3IgSW9UIGtpbmQgb2YgdGhpbmcsIGdpdmVuIHRoZSBjb25maWd1cmF0aW9ucyBsaXN0ZWQuXG5cbkZpcnN0LCBgSUVFRTgwMjE1NGAgaXMgdGhlIGZvdW5kYXRpb24uIEl0J3MgdGhlIHBoeXNpY2FsIGFuZCBNQUMgbGF5ZXIgc3RhbmRhcmQgZm9yIGxvdy1wb3dlciwgbG93LXJhdGUgd2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3Jrcy4gVGhlbiwgYElFRUU4MDIxNTRfU09DS0VUYCBzdWdnZXN0cyB0aGUgYXBwbGljYXRpb24gbGF5ZXIgd2lsbCBiZSBidWlsdCBvbiBzb2NrZXRzIOKAkyB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBpbnRlcmZhY2luZyB3aXRoIG90aGVyIG5ldHdvcmsgc3RhY2tzLlxuXG5gSVBWNmAgdGVsbHMgbWUgd2UncmUgcGxhbm5pbmcgZm9yIHRoZSBmdXR1cmUsIGVtYnJhY2luZyBhIG1vZGVybiBpbnRlcm5ldCBwcm90b2NvbC4gR29vZC4gU2NhbGFiaWxpdHkgYW5kIGEgbGFyZ2VyIGFkZHJlc3Mgc3BhY2UgYXJlIGRlZmluaXRlbHkga2V5IGNvbnNpZGVyYXRpb25zLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBleHBlY3RpbmcgYSBtdWx0aXR1ZGUgb2YgZGV2aWNlcy4gYFBIT05FVGAg4oCTIG5vdyB0aGF04oCZcyBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBwcm9wcmlldGFyeSBvciBhcHBsaWNhdGlvbi1zcGVjaWZpYyBuZXR3b3JraW5nIGxheWVyICphYm92ZSogODAyLjE1LjQgYW5kIHBvdGVudGlhbGx5ICpiZWxvdyogSVB2Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuIElzIHRoaXMgYWJvdXQgbWVzaCBuZXR3b3JraW5nLCBhIHBhcnRpY3VsYXIgcm91dGluZyBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdlJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBpdHMgaW1wbGVtZW50YXRpb24uXG5cbkZpbmFsbHksIGBUTFNgLiBQZXJmZWN0LiBFbmQtdG8tZW5kIHNlY3VyaXR5IGlzIGVzc2VudGlhbCBmb3IgYW55IG1vZGVybiBuZXR3b3JrLiBJ4oCZbSB0aGlua2luZyBlbmNyeXB0aW9uLCBhdXRoZW50aWNhdGlvbiwgaW50ZWdyaXR5IGNoZWNrcy4uLiB0aGUgd2hvbGUgc2hlYmFuZy4gU28gdGhlIGFzc3VtcHRpb24gaXMgdGhlIHVuZGVybHlpbmcgcmFkaW8gYW5kIG5ldHdvcmsgbGF5ZXJzIGFyZSBjb25zaWRlcmVkIHVudHJ1c3RlZCwgaGVuY2UgdGhlIG5lY2Vzc2l0eSBvZiBhIHNlY3VyZSB0cmFuc3BvcnQgbGF5ZXIuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIG5vdywgaXMgdG8gaW1tZWRpYXRlbHkgdmVyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgYFBIT05FVGAgYW5kIGBUTFNgLiBBcmUgdGhleSBjb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlciwgYW5kIHRoZSBleHBlY3RlZCBjb25zdHJhaW50cyBvZiB0aGUgaGFyZHdhcmU/IElzIHRoZSBUTFMgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciBsb3ctcG93ZXIgZGV2aWNlcz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gVGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgbWFrZSBzdXJlIHRoZSBwaWVjZXMgZml0IGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6Mzc6MDcuNDgyNzcxMDU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAyMzY1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIT05FVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGhvbmV0L0tjb25maWctNS1cXG5uZXQvcGhvbmV0L0tjb25maWc6Njpjb25maWcgUEhPTkVUXFxubmV0L3Bob25ldC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBob25ldCBwcm90b2NvbHMgZmFtaWx5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMzozNzowOS42NTMwMTI1MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NDQzNzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL0tjb25maWc9ODczPWNvbmZpZyBIQVJERU5fQlJBTkNIX0hJU1RPUllcXG4tLVxcbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxcbmFyY2gvYXJtL21tL0tjb25maWc6ODgzOmNvbmZpZyBUTFNfUkVHX0VNVUxcXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cXHRib29sXFxuLS1cXG5uZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM3OjExLjUxNzQ2MzI1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDQ3OTE0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIEdldHNvY2tvcHQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Igb2YgdGhlIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBmZXcga2V5IGFyZWFzOiBgaWVlZTgwMjE1NGAsIGBpcHY2YCwgYHBob25ldGAsIGFuZCBgdGxzYC4gVGhlIGRyaXZpbmcgZm9yY2UgYmVoaW5kIHRoZXNlIGNoYW5nZXMgaXMgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBzcGVjaWZpY2FsbHkgc3dpdGNoaW5nIGZyb20gYGNvcHlfdG9fdXNlcmAgdG8gYGNvcHlfdG9faXRlcmAuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGNvcmUga2VybmVsIGNoYW5nZSwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucy5cblxuTXkgZm9jdXMgaXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgZG9fZGdyYW1fZ2V0c29ja29wdGAsIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYGRvX3Jhd3Y2X2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBkb19wZXBfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCB0aGUgdmFyaW91cyBgZG9fdGxzX2dldHNvY2tvcHRfKmAgZnVuY3Rpb25zIGFuZCBgdGxzX2dldHNvY2tvcHRgIGl0c2VsZi4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdGhpcyBtb2RpZmljYXRpb24uXG5cblRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgSUVFRTgwMjE1NGAsIGBJRUVFODAyMTU0X1NPQ0tFVGAsIGBJUFY2YCwgYFBIT05FVGAsIGFuZCBgVExTYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGFyZSB0aGUgb25seSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgY2hlY2sgdGhlaXIgZGVwZW5kZW5jaWVzLiBgSVBWNmAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4gYElFRUU4MDIxNTRfU09DS0VUYCBjbGVhcmx5IGRlcGVuZHMgb24gYElFRUU4MDIxNTRgLiBgUEhPTkVUYCBhbmQgYFRMU2AgYXJlIHByb3RvY29sIGZhbWlsaWVzLCBzbyB0aGF0J3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTGV0IG1lIHBpbnBvaW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gYGRncmFtX2dldHNvY2tvcHRgIHJlc2lkZXMgaW4gYG5ldC9pZWVlODAyMTU0L3NvY2tldC5jYCwgYHJhd3Y2X2dldHNvY2tvcHRgIGlzIGluIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaXMgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgdGhlIGB0bHNfZ2V0c29ja29wdGAgZnVuY3Rpb25zIGxpdmUgaW4gYG5ldC90bHMvdGxzX21haW4uY2AuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGlkZW50aWZpZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoIFRMUy4gT2theSwgdGhlcmUncyBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmAsIGBkb190bHNfZ2V0c29ja29wdF90eF96Y2AsIGBkb190bHNfZ2V0c29ja29wdF9ub19wYWRgLCBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLCBgZG9fdGxzX2dldHNvY2tvcHRgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YC4gR290IGl0LlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdmVyaWZ5IGlmIGVhY2ggb2YgdGhlICpkb18qIGZ1bmN0aW9ucyBpcyB0aGUgb25seSBvbmUgaW4gaXRzIHJlc3BlY3RpdmUgbW9kdWxlLiBgaWVlZTgwMjE1NGAgb25seSBoYXMgYGRvX2RncmFtX2dldHNvY2tvcHRgLCB0aGF0J3MgZ29vZC4gYGlwdjZgIG9ubHkgaGFzIGBkb19yYXd2Nl9nZXRzb2Nrb3B0YCwgcGVyZmVjdC4gYHBob25ldGAgaGFzIGBkb19wZXBfZ2V0c29ja29wdGAsIGZpbmUuIEFuZCB0aGVuLCB0aGVyZSBhcmUgbXVsdGlwbGUgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBUTFMuXG5cblJpZ2h0LCBJJ2xsIHVwZGF0ZSBteSBub3RlcyB0byByZWZsZWN0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgdW5kZXIgYEZvY3VzU3ltYm9sc2AuIEFuZCBJJ2xsIGJlIGNlcnRhaW4gdG8gbGlzdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcyBgRW5hYmxlQ29uZmlnc2AgdG8ga2VlcCB0cmFjay5cblxuU28sIGhlcmUncyBteSB1cGRhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMuXG5gSUVFRTgwMjE1NGBcbmBJRUVFODAyMTU0X1NPQ0tFVGBcbmBJUFY2YFxuYFBIT05FVGBcbmBUTFNgXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTY1LCJPdXRwdXRUb2tlbnMiOjI3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6Mzc6MjEuNTY1MzgwMjQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ4OTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcGVwX2dldHNvY2tvcHRcIixcbiAgICBcInBlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF9jb25mXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF96Y1wiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlblwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uIGZvciBJRUVFODAyMTU0LCBJUHY2IHJhdyBzb2NrZXRzLCBQaG9uZXQsIGFuZCBUTFMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IEFQSSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfU09DS0VUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQSE9ORVRcIixcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX2RncmFtX2dldHNvY2tvcHRcIixcbiAgICBcImRncmFtX2dldHNvY2tvcHRcIixcbiAgICBcImRvX3Jhd3Y2X2dldHNvY2tvcHRcIixcbiAgICBcInJhd3Y2X2dldHNvY2tvcHRcIixcbiAgICBcImRvX3BlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJwZXBfZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfY29uZlwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfdHhfemNcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZFwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5cIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0bHNfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbiBmb3IgSUVFRTgwMjE1NCwgSVB2NiByYXcgc29ja2V0cywgUGhvbmV0LCBhbmQgVExTIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCBBUEkgYW5kIGNvcHlfdG9faXRlciBpbnN0ZWFkIG9mIGNvcHlfdG9fdXNlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBwcm90b2NvbCBoYW5kbGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 23:18:13 +0000 UTC FinishedAt: 2026-07-20 23:37:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "IEEE802154_SOCKET", "IPV6", "PHONET", "TLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "IEEE802154_SOCKET", "IPV6", "PHONET", "TLS" ], "series_id": "d206534a-c0fa-49bb-93fe-5444f59542ca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_dgram_getsockopt", "dgram_getsockopt", "do_rawv6_getsockopt", "rawv6_getsockopt", "do_pep_getsockopt", "pep_getsockopt", "do_tls_getsockopt_conf", "do_tls_getsockopt_tx_zc", "do_tls_getsockopt_no_pad", "do_tls_getsockopt_tx_payload_len", "do_tls_getsockopt", "tls_getsockopt" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZjExMDMzMDI3NzBkODg0ZDE5OTc3M2U3MGEwMTEyMzBkODQ5MDBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMjM6MzY6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuaW5kZXggODVkY2UyOTZkNzUxMzkuLjc2M2Y2M2U0OGFmZTQ1IDEwMDY0NFxuLS0tIGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG5AQCAtODMxLDIwICYjNDM7ODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7XG4tXG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcbiYjNDM7XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9wdC1cdTAwM2VvcHRsZW4sIHNpemVvZihpbnQpKTtcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBXUEFOX1dBTlRBQ0s6XG5AQCAtODcxLDEwICYjNDM7ODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZG9fZGdyYW1fZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uMWYxNTk0MmQxNDE2M2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xMDUxLDE0ICYjNDM7MTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7XG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQVjZfSERSSU5DTDpcbkBAIC0xMDgyLDkgJiM0MzsxMDgwLDggQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWwsIGxlbikpXG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IGxlbjtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTA5Miw2ICYjNDM7MTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4mIzQzO1x0c29ja29wdF90IG9wdDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHN3aXRjaCAobGV2ZWwpIHtcbiBcdGNhc2UgU09MX1JBVzpcbiBcdFx0YnJlYWs7XG5AQCAtMTEwOSw3ICYjNDM7MTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLmMgYi9uZXQvcGhvbmV0L3BlcC5jXG5pbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0XG4tLS0gYS9uZXQvcGhvbmV0L3BlcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGhvbmV0L3BlcC5jXG5AQCAtMTA3OCwxNyAmIzQzOzEwNzgsMTEgQEAgc3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHRcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcbiBcdGludCBsZW4sIHZhbDtcbiBcbi1cdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuLVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgUE5QSVBFX0VOQ0FQOlxuIFx0XHR2YWwgPSBwbi1cdTAwM2VpZmluZGV4ID8gUE5QSVBFX0VOQ0FQX0lQIDogUE5QSVBFX0VOQ0FQX05PTkU7XG5AQCAtMTExMiwxMSAmIzQzOzExMDYsMzMgQEAgc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihpbnQpLCBsZW4pO1xuLVx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcbiYjNDM7XHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXHUwMDNlb3B0bGVuKTtcbiYjNDM7XHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuJiM0MztcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsLCBsZW4sIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gbGVuKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuJiM0MztcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uZmJiMjc0Mjg3YWE1ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTQyNCwyMCAmIzQzOzQyNCwxNiBAQCBzdGF0aWMgX19wb2xsX3QgdGxzX3NrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgaW50IF9fdXNlciAqb3B0bGVuLCBpbnQgdHgpXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcdGNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjO1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbztcbiBcdHN0cnVjdCBjaXBoZXJfY29udGV4dCAqY2N0eDtcbi1cdGludCBsZW47XG4mIzQzO1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmICghb3B0dmFsIHx8IChsZW4gXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xuJiM0MztcdGlmICghb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgfHwgbGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ2Miw3ICYjNDM7NDU4LDggQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdH1cbiBcbiBcdGlmIChsZW4gPT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpIHtcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSkpXG4mIzQzO1x0XHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcbiBcdFx0XHRyYyA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ3OCw0NCAmIzQzOzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0bWVtY3B5KGNyeXB0b19pbmZvX3JlY19zZXEoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjKSxcbiBcdCAgICAgICBjY3R4LVx1MDAzZXJlY19zZXEsIGNpcGhlcl9kZXNjLVx1MDAzZXJlY19zZXEpO1xuIFxuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cdTAwM2VjcnlwdG9faW5mbykpXG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8sXG4mIzQzO1x0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKVxuIFx0XHRyYyA9IC1FRkFVTFQ7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0dW5zaWduZWQgaW50IHZhbHVlO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHZhbHVlID0gY3R4LVx1MDAzZXplcm9jb3B5X3NlbmRmaWxlO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpKSlcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4tXHRpbnQgdmFsdWUsIGxlbjtcbiYjNDM7XHRpbnQgdmFsdWUsIGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAoY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChsZW4gXHUwMDNjIHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTUyNSwzOCAmIzQzOzUxNiwzMSBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRpZiAodmFsdWUgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWx1ZTtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YodmFsdWUpLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IHNpemVvZih2YWx1ZSk7XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVx1MDAzZXR4X21heF9wYXlsb2FkX2xlbjtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpbnQgbGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdGlmIChsZW4gXHUwMDNjIHNpemVvZihwYXlsb2FkX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnBheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pKSlcbiYjNDM7XHRvcHQtXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnBheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pLFxuJiM0MztcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YocGF5bG9hZF9sZW4pKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC01NjUsMTcgJiM0Mzs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFRMU19UWDpcbiBcdGNhc2UgVExTX1JYOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxuLVx0XHRcdFx0XHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHQsIG9wdG5hbWUgPT0gVExTX1RYKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19UWF9aRVJPQ09QWV9STzpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHQpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJjID0gLUVOT1BST1RPT1BUO1xuQEAgLTU5MSwxMiAmIzQzOzU3NCwyNSBAQCBzdGF0aWMgaW50IHRsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiYjNDM7XHRzb2Nrb3B0X3Qgb3B0O1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAobGV2ZWwgIT0gU09MX1RMUylcbiBcdFx0cmV0dXJuIGN0eC1cdTAwM2Vza19wcm90by1cdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCxcbiBcdFx0XHRcdFx0XHQgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFxuLVx0cmV0dXJuIGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbmluZGV4IGZlNWE1MjY4YmMzNGVjLi45NzQwNjVhMjNmYTgyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG5AQCAtMjgsNyAmIzQzOzI4LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBBRl9WU09DS1xuQEAgLTQwLDYgJiM0Mzs0Myw0NSBAQFxuICNpZm5kZWYgSUNNUF9GSUxURVJcbiAjZGVmaW5lIElDTVBfRklMVEVSIDFcbiAjZW5kaWZcbiYjNDM7I2lmbmRlZiBJUFY2X0hEUklOQ0xcbiYjNDM7I2RlZmluZSBJUFY2X0hEUklOQ0wgMzZcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxuJiM0MzsjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gN1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBBRl9JRUVFODAyMTU0XG4mIzQzOyNkZWZpbmUgQUZfSUVFRTgwMjE1NCAzNlxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxuJiM0MzsjZGVmaW5lIFNPTF9JRUVFODAyMTU0IDBcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgV1BBTl9XQU5UQUNLXG4mIzQzOyNkZWZpbmUgV1BBTl9XQU5UQUNLIDBcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgQUZfUEhPTkVUXG4mIzQzOyNkZWZpbmUgQUZfUEhPTkVUIDM1XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFNPTF9QTlBJUEVcbiYjNDM7I2RlZmluZSBTT0xfUE5QSVBFIDI3NVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTl9QUk9UT19QSVBFXG4mIzQzOyNkZWZpbmUgUE5fUFJPVE9fUElQRSAyXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUFxuJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUCAxXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXG4mIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUgMFxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcbiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVBfSVAgMVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBTT0xfVExTXG4mIzQzOyNkZWZpbmUgU09MX1RMUyAyODJcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgVENQX1VMUFxuJiM0MzsjZGVmaW5lIFRDUF9VTFAgMzFcbiYjNDM7I2VuZGlmXG4gXG4gLyogLS0tLS0tLS0tLSBuZXRsaW5rIC0tLS0tLS0tLS0gKi9cbiBcbkBAIC0zOTQsNCAmIzQzOzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXG4gXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4gfVxuIFxuJiM0MzsvKiAtLS0tLS0tLS0tIHJhdyAoaXB2NikgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShyYXd2NilcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAocmF3djYpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19VRFApO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1NPQ0tfUkFXL0lQdjYgc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihyYXd2NilcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfZXhhY3QpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWwgPSAtMTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuJiM0MztcdFx0XHRcdGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSYXcgaW50IG9wdGlvbnMgY2xhbXAgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlclxuJiM0MzsgKiBpbnN0ZWFkIG9mIHJldHVybmluZyBFSU5WQUwgb24gYSBzaG9ydCBidWZmZXIuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfdW5kZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdC8qIEEgbm9uLUlDTVB2NiByYXcgc29ja2V0IGhhcyB0aGUgY2hlY2tzdW0gZGlzYWJsZWQsIHJlcG9ydGVkIGFzIC0xLiAqL1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihyYXd2NiwgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztGSVhUVVJFKGllZWU4MDIxNTQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKGllZWU4MDIxNTQpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0FGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihpZWVlODAyMTU0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfb3ZlcnNpemVfY2xhbXBlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzE2XSA9IHt9O1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUSgyLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIDB4N2ZmZixcbiYjNDM7XHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqL1xuJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLS0tLS0tLSBwaG9uZXQgKHBlcCkgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShwaG9uZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHBob25ldClcbiYjNDM7e1xuJiM0MztcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfUEhPTkVULCBTT0NLX1NFUVBBQ0tFVCwgUE5fUFJPVE9fUElQRSk7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7QUZfUEhPTkVUIHBpcGUgc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihwaG9uZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfZXhhY3QpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWwgPSAtMTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbiYjNDM7XHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcGVwIGNsYW1wcyB0aGUgcmVwb3J0ZWQgbGVuZ3RoIGRvd24gdG8gdGhlIHVzZXIgYnVmZmVyLiBVc2UgYW5cbiYjNDM7ICogaW50LXNpemVkIGJhY2tpbmcgYnVmZmVyIHdpdGggYSBzaG9ydCBvcHRsZW4gc28gdGhlIGJhc2VsaW5lIGtlcm5lbCxcbiYjNDM7ICogd2hpY2ggd3JpdGVzIGEgZnVsbCBpbnQgdmlhIHB1dF91c2VyKCksIGRvZXMgbm90IHNjcmliYmxlIHBhc3QgaXQuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF91bmRlcnNpemVfY2xhbXBlZClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuJiM0MztcdGludCB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXG4mIzQzO1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCBQTlBJUEVfRU5DQVAsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztGSVhUVVJFKHRscylcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XHRpbnQgc2ZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUCh0bHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYSA9IHtcbiYjNDM7XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XG4mIzQzO1x0aW50IGxmZDtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IC0xO1xuJiM0MztcdHNlbGYtXHUwMDNlc2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGxmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUQ1Agc29ja2V0OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBzaXplb2YoYSkpIHx8IGxpc3RlbihsZmQsIDEpIHx8XG4mIzQzO1x0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIFx1MDAyNmFsZW4pKSB7XG4mIzQzO1x0XHRjbG9zZShsZmQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2xpc3RlbmVyIHNldHVwOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHR9XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGNvbm5lY3Qoc2VsZi1cdTAwM2VmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIHNpemVvZihhKSkpIHtcbiYjNDM7XHRcdGNsb3NlKGxmZCk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7Y29ubmVjdDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcdHNlbGYtXHUwMDNlc2ZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0Y2xvc2UobGZkKTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7VENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXCYjMzQ7LFxuJiM0MztcdFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKHRscylcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZXNmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXG4mIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xuJiM0MztcdGludCB2YWwgPSAtMTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoKTogTlVMTCBvcHR2YWwgc3RpbGwgeWllbGRzIEVJTlZBTCAtLSB0aGVcbiYjNDM7ICogY29udmVydGVkIGNvZGUgdGVzdHMgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSA2NDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodGxzLCBjb25mX3Nob3J0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0Y2hhciBidWZbMl07XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUTFNfVFggYmVmb3JlIGNyeXB0byBpcyBzZXQgcmVwb3J0cyBub3QtcmVhZHkuICovXG4mIzQzO1RFU1RfRih0bHMsIGNvbmZfbm90X3JlYWR5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNmluZm8sIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFQlVTWSwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZ1xuJiM0MzsgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggdHggPSB7XG4mIzQzO1x0XHQuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLFxuJiM0MztcdFx0LmluZm8uY2lwaGVyX3R5cGUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IGZ1bGw7XG4mIzQzO1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBiYXNlO1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2dHgsIHNpemVvZih0eCkpKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3NldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YoYmFzZSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZiYXNlLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGJhc2UpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9FUShUTFNfMV8yX1ZFUlNJT04sIGJhc2UudmVyc2lvbik7XG4mIzQzO1x0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YoZnVsbCk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZmdWxsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xuJiM0MztcdEFTU0VSVF9FUShUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LCBmdWxsLmluZm8uY2lwaGVyX3R5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodGxzLCBiYWRfb3B0bmFtZSlcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMTEwMzMwMjc3MGQ4ODRkMTk5NzczZTcwYTAxMTIzMGQ4NDkwMGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAyMzozNjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMKaW5kZXggODVkY2UyOTZkNzUxMzkuLjc2M2Y2M2U0OGFmZTQ1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwpAQCAtODMxLDIwICYjNDM7ODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb19kZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKLQogCWludCB2YWwsIGxlbjsKIAotCWlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpOwomIzQzOwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9wdC0mZ3Q7b3B0bGVuLCBzaXplb2YoaW50KSk7CiAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFdQQU5fV0FOVEFDSzoKQEAgLTg3MSwxMCAmIzQzOzg2MywzMiBAQCBzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIAotCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpCiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbGVuOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDt2YWwsIGxlbikpCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAomIzQzOwkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7ewomIzQzOwlzb2Nrb3B0X3Qgb3B0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCAmYW1wO29wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggM2NjNTg2OThjYmJkM2EuLjFmMTU5NDJkMTQxNjNlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMTA1MSwxNCAmIzQzOzEwNTEsMTIgQEAgc3RhdGljIGludCByYXd2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAlyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIH0KIAotc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7CiAJaW50IHZhbCwgbGVuOwogCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBJUFY2X0hEUklOQ0w6CkBAIC0xMDgyLDkgJiM0MzsxMDgwLDggQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAogCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7CiAKLQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDt2YWwsIGxlbikpCiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbGVuOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTIsNiAmIzQzOzEwODksOSBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewomIzQzOwlzb2Nrb3B0X3Qgb3B0OwomIzQzOwlpbnQgZXJyOwomIzQzOwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNPTF9SQVc6CiAJCWJyZWFrOwpAQCAtMTEwOSw3ICYjNDM7MTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQlyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCX0KIAotCXJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwllcnIgPSBzb2Nrb3B0X2luaXRfdXNlcigmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgJmFtcDtvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmF3djZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuYwppbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcGVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Bob25ldC9wZXAuYwpAQCAtMTA3OCwxNyAmIzQzOzEwNzgsMTEgQEAgc3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQomIzQzO3N0YXRpYyBpbnQgZG9fcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHBlcF9zb2NrICpwbiA9IHBlcF9zayhzayk7CiAJaW50IGxlbiwgdmFsOwogCi0JaWYgKGxldmVsICE9IFNPTF9QTlBJUEUpCi0JCXJldHVybiAtRU5PUFJPVE9PUFQ7Ci0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFBOUElQRV9FTkNBUDoKIAkJdmFsID0gcG4tJmd0O2lmaW5kZXggPyBQTlBJUEVfRU5DQVBfSVAgOiBQTlBJUEVfRU5DQVBfTk9ORTsKQEAgLTExMTIsMTEgJiM0MzsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIAotCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7Ci0JaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKJiM0MzsJbGVuID0gdW1pbihzaXplb2YoaW50KSwgb3B0LSZndDtvcHRsZW4pOwomIzQzOwlvcHQtJmd0O29wdGxlbiA9IGxlbjsKJiM0MzsJaWYgKGNvcHlfdG9faXRlcigmYW1wO3ZhbCwgbGVuLCAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9IGxlbikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgb3B0dmFsKSkKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAomIzQzOwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQomIzQzO3sKJiM0MzsJc29ja29wdF90IG9wdDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKGxldmVsICE9IFNPTF9QTlBJUEUpCiYjNDM7CQlyZXR1cm4gLUVOT1BST1RPT1BUOwomIzQzOwomIzQzOwllcnIgPSBzb2Nrb3B0X2luaXRfdXNlcigmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsICZhbXA7b3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IDhjNTg4Y2RhYjczM2RhLi5mYmIyNzQyODdhYTVmMiAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uYwpAQCAtNDI0LDIwICYjNDM7NDI0LDE2IEBAIHN0YXRpYyBfX3BvbGxfdCB0bHNfc2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkgIGludCBfX3VzZXIgKm9wdGxlbiwgaW50IHR4KQomIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpCiB7CiAJaW50IHJjID0gMDsKIAljb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYzsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKIAlzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbzsKIAlzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7Ci0JaW50IGxlbjsKJiM0MzsJaW50IGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIW9wdHZhbCB8fCAobGVuICZsdDsgc2l6ZW9mKCpjcnlwdG9faW5mbykpKSB7CiYjNDM7CWlmICghb3B0LSZndDtpdGVyX291dC51YnVmIHx8IGxlbiAmbHQ7IHNpemVvZigqY3J5cHRvX2luZm8pKSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDYyLDcgJiM0Mzs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCX0KIAogCWlmIChsZW4gPT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSkpCiYjNDM7CQlpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSwKJiM0MzsJCQkJICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpCiAJCQlyYyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ3OCw0NCAmIzQzOzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCW1lbWNweShjcnlwdG9faW5mb19yZWNfc2VxKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYyksCiAJICAgICAgIGNjdHgtJmd0O3JlY19zZXEsIGNpcGhlcl9kZXNjLSZndDtyZWNfc2VxKTsKIAotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtJmd0O2NyeXB0b19pbmZvKSkKJiM0MzsJaWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtJmd0O2NyeXB0b19pbmZvLAomIzQzOwkJCSAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9IGNpcGhlcl9kZXNjLSZndDtjcnlwdG9faW5mbykKIAkJcmMgPSAtRUZBVUxUOwogCiBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkgICBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwogCXVuc2lnbmVkIGludCB2YWx1ZTsKLQlpbnQgbGVuOwotCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWludCBsZW4gPSBvcHQtJmd0O29wdGxlbjsKIAogCWlmIChsZW4gIT0gc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWx1ZSA9IGN0eC0mZ3Q7emVyb2NvcHlfc2VuZGZpbGU7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSkpKQomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSksICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgICBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdCkKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKLQlpbnQgdmFsdWUsIGxlbjsKJiM0MzsJaW50IHZhbHVlLCBsZW4gPSBvcHQtJmd0O29wdGxlbjsKIAogCWlmIChjdHgtJmd0O3Byb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAobGVuICZsdDsgc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTUyNSwzOCAmIzQzOzUxNiwzMSBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJaWYgKHZhbHVlICZsdDsgMCkKIAkJcmV0dXJuIHZhbHVlOwogCi0JaWYgKHB1dF91c2VyKHNpemVvZih2YWx1ZSksIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYW1wO3ZhbHVlLCBzaXplb2YodmFsdWUpKSkKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBzaXplb2YodmFsdWUpOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSksICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCi0JCQkJCSAgICBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwogCXUxNiBwYXlsb2FkX2xlbiA9IGN0eC0mZ3Q7dHhfbWF4X3BheWxvYWRfbGVuOwotCWludCBsZW47Ci0KLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaW50IGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJaWYgKGxlbiAmbHQ7IHNpemVvZihwYXlsb2FkX2xlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhbXA7cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbikpKQomIzQzOwlvcHQtJmd0O29wdGxlbiA9IHNpemVvZihwYXlsb2FkX2xlbik7CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDtwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSwKJiM0MzsJCQkgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YocGF5bG9hZF9sZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsCi0JCQkgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KQogewogCWludCByYyA9IDA7CiAKQEAgLTU2NSwxNyAmIzQzOzU0OSwxNiBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsCiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBUTFNfVFg6CiAJY2FzZSBUTFNfUlg6Ci0JCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sCi0JCQkJCSAgICBvcHRuYW1lID09IFRMU19UWCk7CiYjNDM7CQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpOwogCQlicmVhazsKIAljYXNlIFRMU19UWF9aRVJPQ09QWV9STzoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTsKIAkJYnJlYWs7CiAJY2FzZSBUTFNfUlhfRVhQRUNUX05PX1BBRDoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpOwogCQlicmVhazsKIAljYXNlIFRMU19UWF9NQVhfUEFZTE9BRF9MRU46Ci0JCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVOT1BST1RPT1BUOwpAQCAtNTkxLDEyICYjNDM7NTc0LDI1IEBAIHN0YXRpYyBpbnQgdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7CiYjNDM7CXNvY2tvcHRfdCBvcHQ7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAobGV2ZWwgIT0gU09MX1RMUykKIAkJcmV0dXJuIGN0eC0mZ3Q7c2tfcHJvdG8tJmd0O2dldHNvY2tvcHQoc2ssIGxldmVsLAogCQkJCQkJIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIAotCXJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwllcnIgPSBzb2Nrb3B0X2luaXRfdXNlcigmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsICZhbXA7b3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2NyeXB0b19pbmZvKGNvbnN0IHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jCmluZGV4IGZlNWE1MjY4YmMzNGVjLi45NzQwNjVhMjNmYTgyNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYwpAQCAtMjgsNyAmIzQzOzI4LDEwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdm1fc29ja2V0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ljbXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXRpbmV0L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGxzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwogCiAjaWZuZGVmIEFGX1ZTT0NLCkBAIC00MCw2ICYjNDM7NDMsNDUgQEAKICNpZm5kZWYgSUNNUF9GSUxURVIKICNkZWZpbmUgSUNNUF9GSUxURVIgMQogI2VuZGlmCiYjNDM7I2lmbmRlZiBJUFY2X0hEUklOQ0wKJiM0MzsjZGVmaW5lIElQVjZfSERSSU5DTCAzNgomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgSVBWNl9DSEVDS1NVTQomIzQzOyNkZWZpbmUgSVBWNl9DSEVDS1NVTSA3CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBBRl9JRUVFODAyMTU0CiYjNDM7I2RlZmluZSBBRl9JRUVFODAyMTU0IDM2CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBTT0xfSUVFRTgwMjE1NAomIzQzOyNkZWZpbmUgU09MX0lFRUU4MDIxNTQgMAomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgV1BBTl9XQU5UQUNLCiYjNDM7I2RlZmluZSBXUEFOX1dBTlRBQ0sgMAomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgQUZfUEhPTkVUCiYjNDM7I2RlZmluZSBBRl9QSE9ORVQgMzUKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFNPTF9QTlBJUEUKJiM0MzsjZGVmaW5lIFNPTF9QTlBJUEUgMjc1CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBQTl9QUk9UT19QSVBFCiYjNDM7I2RlZmluZSBQTl9QUk9UT19QSVBFIDIKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUAomIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQIDEKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FCiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVBfTk9ORSAwCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBfSVAKJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUF9JUCAxCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBTT0xfVExTCiYjNDM7I2RlZmluZSBTT0xfVExTIDI4MgomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgVENQX1VMUAomIzQzOyNkZWZpbmUgVENQX1VMUCAzMQomIzQzOyNlbmRpZgogCiAvKiAtLS0tLS0tLS0tIG5ldGxpbmsgLS0tLS0tLS0tLSAqLwogCkBAIC0zOTQsNCAmIzQzOzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpCiAJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwogfQogCiYjNDM7LyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKHJhd3Y2KQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChyYXd2NikKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19VRFApOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7U09DS19SQVcvSVB2NiBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04ocmF3djYpCiYjNDM7ewomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihyYXd2NiwgaGRyaW5jbF9vdmVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTZdID0ge307CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLAomIzQzOwkJCQlidWYsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXIKJiM0MzsgKiBpbnN0ZWFkIG9mIHJldHVybmluZyBFSU5WQUwgb24gYSBzaG9ydCBidWZmZXIuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IDI7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoMiwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwkvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi8KJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX0VRKC0xLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocmF3djYsIGJhZF9vcHRuYW1lKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CS8qIFNPTF9SQVcgcmVhY2hlcyBkb19yYXd2Nl9nZXRzb2Nrb3B0KCkgZGlyZWN0bHkuICovCiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1JBVywgMHg3ZmZmLCAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogLS0tLS0tLS0tLSBpZWVlODAyMTU0IChkZ3JhbSkgLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzO0ZJWFRVUkUoaWVlZTgwMjE1NCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoaWVlZTgwMjE1NCkKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7QUZfSUVFRTgwMjE1NCBkZ3JhbSBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NCkKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWwgPSAtMTsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX292ZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxNl0gPSB7fTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSywKJiM0MzsJCQkJYnVmLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX3VuZGVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IDI7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSywKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUSgyLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgMHg3ZmZmLAomIzQzOwkJCQkgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqLwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCBiYWRfbGV2ZWwpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUkFXLCBXUEFOX1dBTlRBQ0ssCiYjNDM7CQkJCSAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVPUE5PVFNVUFAsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tLS0tLS0tIHBob25ldCAocGVwKSAtLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7RklYVFVSRShwaG9uZXQpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHBob25ldCkKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7QUZfUEhPTkVUIHBpcGUgc29ja2V0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKHBob25ldCkKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWwgPSAtMTsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSBQTlBJUEVfRU5DQVBfTk9ORSB8fCB2YWwgPT0gUE5QSVBFX0VOQ0FQX0lQKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfb3ZlcnNpemVfY2xhbXBlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzE2XSA9IHt9OwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsCiYjNDM7CQkJCWJ1ZiwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwZXAgY2xhbXBzIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXIuIFVzZSBhbgomIzQzOyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsCiYjNDM7ICogd2hpY2ggd3JpdGVzIGEgZnVsbCBpbnQgdmlhIHB1dF91c2VyKCksIGRvZXMgbm90IHNjcmliYmxlIHBhc3QgaXQuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoMiwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUE5QSVBFLCAweDdmZmYsICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwZXBfZ2V0c29ja29wdCgpIHJlamVjdHMgYW55IGxldmVsIG90aGVyIHRoYW4gU09MX1BOUElQRS4gKi8KJiM0MztURVNUX0YocGhvbmV0LCBiYWRfbGV2ZWwpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUkFXLCBQTlBJUEVfRU5DQVAsICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7RklYVFVSRSh0bHMpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CWludCBzZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHRscykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CX07CiYjNDM7CXNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGEpOwomIzQzOwlpbnQgbGZkOwomIzQzOwomIzQzOwlzZWxmLSZndDtmZCA9IC0xOwomIzQzOwlzZWxmLSZndDtzZmQgPSAtMTsKJiM0MzsKJiM0MzsJbGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGxmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtUQ1Agc29ja2V0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoYmluZChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2EsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHwKJiM0MzsJICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YSwgJmFtcDthbGVuKSkgewomIzQzOwkJY2xvc2UobGZkKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2xpc3RlbmVyIHNldHVwOiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CXNlbGYtJmd0O2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGNvbm5lY3Qoc2VsZi0mZ3Q7ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2EsIHNpemVvZihhKSkpIHsKJiM0MzsJCWNsb3NlKGxmZCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtjb25uZWN0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CXNlbGYtJmd0O3NmZCA9IGFjY2VwdChsZmQsIE5VTEwsIE5VTEwpOwomIzQzOwljbG9zZShsZmQpOwomIzQzOwlpZiAoc2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsICYjMzQ7dGxzJiMzNDssIHNpemVvZigmIzM0O3RscyYjMzQ7KSkpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtUQ1BfVUxQPXRsczogJXMgKGJ1aWx0IHdpdGhvdXQgVExTPykmIzM0OywKJiM0MzsJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTih0bHMpCiYjNDM7ewomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O2ZkKTsKJiM0MzsJaWYgKHNlbGYtJmd0O3NmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7c2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoKTogZml4ZWQtc2l6ZSBpbnQsIGV4YWN0IGxlbmd0aCByZXF1aXJlZC4gKi8KJiM0MztURVNUX0YodGxzLCB0eF96ZXJvY29weV9leGFjdCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X3dyb25nX2xlbikKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSAyOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STywKJiM0MzsJCQkJICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoKTogTlVMTCBvcHR2YWwgc3RpbGwgeWllbGRzIEVJTlZBTCAtLSB0aGUKJiM0MzsgKiBjb252ZXJ0ZWQgY29kZSB0ZXN0cyBvcHQtJmd0O2l0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIGNvbmZfbnVsbF9vcHR2YWwpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCBOVUxMLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJY2hhciBidWZbMl07CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCBidWYsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVExTX1RYIGJlZm9yZSBjcnlwdG8gaXMgc2V0IHJlcG9ydHMgbm90LXJlYWR5LiAqLwomIzQzO1RFU1RfRih0bHMsIGNvbmZfbm90X3JlYWR5KQomIzQzO3sKJiM0MzsJc3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvOwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDtpbmZvLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRUJVU1ksIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2V0IFRYIGNyeXB0bywgdGhlbiByZWFkIGl0IGJhY2sgYXQgdGhlIGJhc2UgYW5kIGZ1bGwgc2l6ZXMsIGV4ZXJjaXNpbmcKJiM0MzsgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgY29uZl9jcnlwdG9fcm91bmR0cmlwKQomIzQzO3sKJiM0MzsJc3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0gewomIzQzOwkJLmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTiwKJiM0MzsJCS5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IGZ1bGw7CiYjNDM7CXN0cnVjdCB0bHNfY3J5cHRvX2luZm8gYmFzZTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsKJiM0MzsJaWYgKHNldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDt0eCwgc2l6ZW9mKHR4KSkpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtzZXQgVExTX1RYIGFlc19nY21fMTI4OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YoYmFzZSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsICZhbXA7YmFzZSwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTsKJiM0MzsJQVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YoZnVsbCk7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsICZhbXA7ZnVsbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihmdWxsKSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGZ1bGwuaW5mby5jaXBoZXJfdHlwZSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih0bHMsIGJhZF9vcHRuYW1lKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIDB4N2ZmZiwgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzO30KJiM0MzsKIFRFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uOiBBIERlZXAgRGl2ZSBpbnRvIGdldHNvY2tvcHQgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0OiB0aGUgcmVmYWN0b3Jpbmcgb2YgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9ucy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBhcmVhcywgc3BlY2lmaWNhbGx5IGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGBuZXQvaXB2Ni9yYXcuY2AsIGBuZXQvcGhvbmV0L3BlcC5jYCwgYG5ldC90bHMvdGxzX21haW4uY2AsIGFuZCBldmVuIHRoZSBzZWxmdGVzdHMsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNgLiAgSXQgYXBwZWFycyB0aGV5IGFyZSBtb3ZpbmcgZnJvbSB0aGUgb2xkZXIgYGNvcHlfdG9fdXNlcmAgYW5kIGBwdXRfdXNlcmAgbWV0aG9kcyB0byB0aGUgbmV3IGBzb2Nrb3B0X3RgIGFuZCBgY29weV90b19pdGVyYCBBUEkuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGltcGFjdHMgaG93IGBnZXRzb2Nrb3B0YCBvcGVyYXRlcyBpbnRlcm5hbGx5LgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IHRlc3RhYmlsaXR5LiBDYW4gd2UgYWRlcXVhdGVseSBjb3ZlciB0aGlzIGNoYW5nZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIHRoZXNlIGFyZSBuZXR3b3JrIHByb3RvY29scy4gYGllZWU4MDIxNTRgLCBgaXB2NmAsIGBwaG9uZXRgLCBhbmQgYHRsc2AgYXJlIGFsbCBuZXR3b3JrIHByb3RvY29scywgdGhleSBzaG91bGQgYmUgdGVzdGFibGUgd2l0aGluIFFFTVUuICBTbyBsZXQmIzM5O3MgZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBmb2N1cyBvbiBzb2NrZXQgdHlwZXMgdGhhdCByZWxhdGUgdG8gdGhlIHByb3RvY29scy4KKiAgIGBpZWVlODAyMTU0YCBpcyBoYW5kbGVkIHdpdGggYW4gYEFGX0lFRUU4MDIxNTRgIHNvY2tldC4KKiAgIGBpcHY2YCB1c2VzIGBTT0NLX1JBV2AuCiogICBgcGhvbmV0YCB1c2VzIGBBRl9QSE9ORVRgLgoqICAgYHRsc2AgdXNlcyBgVENQX1VMUGAuCgpPa2F5LCBuZXh0LCB3ZSBoYXZlIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgd2UgbmVlZCB0byBmdXp6LiBUaW1lIHRvIGlkZW50aWZ5IHRhcmdldHM6Ci0gYGRvX2RncmFtX2dldHNvY2tvcHRgCi0gYGRncmFtX2dldHNvY2tvcHRgCi0gYGRvX3Jhd3Y2X2dldHNvY2tvcHRgCi0gYHJhd3Y2X2dldHNvY2tvcHRgCi0gYGRvX3BlcF9nZXRzb2Nrb3B0YAotIGBwZXBfZ2V0c29ja29wdGAKLSBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmAKLSBgZG9fdGxzX2dldHNvY2tvcHRfdHhfemNgCi0gYGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZGAKLSBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gCi0gYGRvX3Rsc19nZXRzb2Nrb3B0YAotIGB0bHNfZ2V0c29ja29wdGAKCkZpbmFsbHksIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSB3aWxsIGhhdmUgdG8gZW5zdXJlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBjb25maWdzIGVuYWJsZWQ6Ci0gYENPTkZJR19JRUVFODAyMTU0YAotIGBDT05GSUdfSUVFRTgwMjE1NF9TT0NLRVRgCi0gYENPTkZJR19JUFY2YAotIGBDT05GSUdfUEhPTkVUYAotIGBDT05GSUdfVExTYAoKV2UmIzM5O2xsIHZlcmlmeSB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWZvcmUgcnVubmluZyB0ZXN0cyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGhpdHRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoZXNlIGNvbmZpZ3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElFRUU4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRfRFJJVkVSU1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IGRyaXZlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTMtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6Y29uZmlnIElFRUU4MDIxNTRfRkFLRUxCXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI0OmNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTI1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zNS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzozNjpjb25maWcgSUVFRTgwMjE1NF9NUkYyNEo0MFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTM3LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIE1SRjI0SjQwIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy00Ny1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo0ODpjb25maWcgSUVFRTgwMjE1NF9DQzI1MjBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNTgtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6NTk6Y29uZmlnIElFRUU4MDIxNTRfQVRVU0JcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0FUVVNCIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo2OTpjb25maWcgSUVFRTgwMjE1NF9BREY3MjQyXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtBREY3MjQyIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy03OS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo4MDpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy04MS1cdHRyaXN0YXRlIFwmIzM0O0Nhc2NvZGEgQ0E4MjEwIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05MS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo5Mjpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGU1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtDQTgyMTAgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTAxLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjEwMjpjb25maWcgSUVFRTgwMjE1NF9NQ1IyMEFcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMDMtXHR0cmlzdGF0ZSBcJiMzNDtNQ1IyMEEgdHJhbnNjZWl2ZXIgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTExMy1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMTQ6Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTUtXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWc6Mjpjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0OzZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjRcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnPTE0PWlmIElFRUU4MDIxNTRcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE2OmNvbmZpZyBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xNy1cdGJvb2wgXCYjMzQ7SUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMC1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjE6Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBhcHByb2FjaCBhIG5ldyBwcm9qZWN0OgoKKipDb25maWd1cmluZyBhIFNlY3VyZSBXaXJlbGVzcyBOZXR3b3JrKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGJ1aWxkaW5nIGEgc2VjdXJlIHdpcmVsZXNzIG5ldHdvcmssIHByb2JhYmx5IGFuIGVtYmVkZGVkIG9yIElvVCBraW5kIG9mIHRoaW5nLCBnaXZlbiB0aGUgY29uZmlndXJhdGlvbnMgbGlzdGVkLgoKRmlyc3QsIGBJRUVFODAyMTU0YCBpcyB0aGUgZm91bmRhdGlvbi4gSXQmIzM5O3MgdGhlIHBoeXNpY2FsIGFuZCBNQUMgbGF5ZXIgc3RhbmRhcmQgZm9yIGxvdy1wb3dlciwgbG93LXJhdGUgd2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3Jrcy4gVGhlbiwgYElFRUU4MDIxNTRfU09DS0VUYCBzdWdnZXN0cyB0aGUgYXBwbGljYXRpb24gbGF5ZXIgd2lsbCBiZSBidWlsdCBvbiBzb2NrZXRzIOKAkyB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBpbnRlcmZhY2luZyB3aXRoIG90aGVyIG5ldHdvcmsgc3RhY2tzLgoKYElQVjZgIHRlbGxzIG1lIHdlJiMzOTtyZSBwbGFubmluZyBmb3IgdGhlIGZ1dHVyZSwgZW1icmFjaW5nIGEgbW9kZXJuIGludGVybmV0IHByb3RvY29sLiBHb29kLiBTY2FsYWJpbGl0eSBhbmQgYSBsYXJnZXIgYWRkcmVzcyBzcGFjZSBhcmUgZGVmaW5pdGVseSBrZXkgY29uc2lkZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGV4cGVjdGluZyBhIG11bHRpdHVkZSBvZiBkZXZpY2VzLiBgUEhPTkVUYCDigJMgbm93IHRoYXTigJlzIGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIHByb3ByaWV0YXJ5IG9yIGFwcGxpY2F0aW9uLXNwZWNpZmljIG5ldHdvcmtpbmcgbGF5ZXIgKmFib3ZlKiA4MDIuMTUuNCBhbmQgcG90ZW50aWFsbHkgKmJlbG93KiBJUHY2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4gSXMgdGhpcyBhYm91dCBtZXNoIG5ldHdvcmtpbmcsIGEgcGFydGljdWxhciByb3V0aW5nIHByb3RvY29sLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2UmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBpdHMgaW1wbGVtZW50YXRpb24uCgpGaW5hbGx5LCBgVExTYC4gUGVyZmVjdC4gRW5kLXRvLWVuZCBzZWN1cml0eSBpcyBlc3NlbnRpYWwgZm9yIGFueSBtb2Rlcm4gbmV0d29yay4gSeKAmW0gdGhpbmtpbmcgZW5jcnlwdGlvbiwgYXV0aGVudGljYXRpb24sIGludGVncml0eSBjaGVja3MuLi4gdGhlIHdob2xlIHNoZWJhbmcuIFNvIHRoZSBhc3N1bXB0aW9uIGlzIHRoZSB1bmRlcmx5aW5nIHJhZGlvIGFuZCBuZXR3b3JrIGxheWVycyBhcmUgY29uc2lkZXJlZCB1bnRydXN0ZWQsIGhlbmNlIHRoZSBuZWNlc3NpdHkgb2YgYSBzZWN1cmUgdHJhbnNwb3J0IGxheWVyLgoKVGhlIGNvcmUgcXVlc3Rpb24gbm93LCBpcyB0byBpbW1lZGlhdGVseSB2ZXJpZnkgdGhlIHNwZWNpZmljcyBvZiBgUEhPTkVUYCBhbmQgYFRMU2AuIEFyZSB0aGV5IGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLCBhbmQgdGhlIGV4cGVjdGVkIGNvbnN0cmFpbnRzIG9mIHRoZSBoYXJkd2FyZT8gSXMgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIGxvdy1wb3dlciBkZXZpY2VzPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBtYWtlIHN1cmUgdGhlIHBpZWNlcyBmaXQgYmVmb3JlIG1vdmluZyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhPTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9waG9uZXQvS2NvbmZpZy01LVxubmV0L3Bob25ldC9LY29uZmlnOjY6Y29uZmlnIFBIT05FVFxubmV0L3Bob25ldC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQaG9uZXQgcHJvdG9jb2xzIGZhbWlseVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vS2NvbmZpZz04NzM9Y29uZmlnIEhBUkRFTl9CUkFOQ0hfSElTVE9SWVxuLS1cbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxuYXJjaC9hcm0vbW0vS2NvbmZpZzo4ODM6Y29uZmlnIFRMU19SRUdfRU1VTFxuYXJjaC9hcm0vbW0vS2NvbmZpZy04ODQtXHRib29sXG4tLVxubmV0L3Rscy9LY29uZmlnLTQtI1xubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xubmV0L3Rscy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xOC1cbm5ldC90bHMvS2NvbmZpZzoxOTpjb25maWcgVExTX0RFVklDRVxubmV0L3Rscy9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTY1CgkJCQkJCQlvdXRwdXQ6IDI3NgoJCQkJCQkJdGhvdWdodHM6IDcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBHZXRzb2Nrb3B0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSByZWZhY3RvciBvZiB0aGUgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9uIGZvciBhIGZldyBrZXkgYXJlYXM6IGBpZWVlODAyMTU0YCwgYGlwdjZgLCBgcGhvbmV0YCwgYW5kIGB0bHNgLiBUaGUgZHJpdmluZyBmb3JjZSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBpcyBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIHNwZWNpZmljYWxseSBzd2l0Y2hpbmcgZnJvbSBgY29weV90b191c2VyYCB0byBgY29weV90b19pdGVyYC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIGEgY29yZSBrZXJuZWwgY2hhbmdlLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zLgoKTXkgZm9jdXMgaXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgZG9fZGdyYW1fZ2V0c29ja29wdGAsIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYGRvX3Jhd3Y2X2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBkb19wZXBfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCB0aGUgdmFyaW91cyBgZG9fdGxzX2dldHNvY2tvcHRfKmAgZnVuY3Rpb25zIGFuZCBgdGxzX2dldHNvY2tvcHRgIGl0c2VsZi4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgpUaGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgYElFRUU4MDIxNTRgLCBgSUVFRTgwMjE1NF9TT0NLRVRgLCBgSVBWNmAsIGBQSE9ORVRgLCBhbmQgYFRMU2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgYXJlIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBjaGVjayB0aGVpciBkZXBlbmRlbmNpZXMuIGBJUFY2YCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLiBgSUVFRTgwMjE1NF9TT0NLRVRgIGNsZWFybHkgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAuIGBQSE9ORVRgIGFuZCBgVExTYCBhcmUgcHJvdG9jb2wgZmFtaWxpZXMsIHNvIHRoYXQmIzM5O3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC4KCkxldCBtZSBwaW5wb2ludCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQuIGBkZ3JhbV9nZXRzb2Nrb3B0YCByZXNpZGVzIGluIGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBpbiBgbmV0L2lwdjYvcmF3LmNgLCBgcGVwX2dldHNvY2tvcHRgIGlzIGluIGBuZXQvcGhvbmV0L3BlcC5jYCwgYW5kIHRoZSBgdGxzX2dldHNvY2tvcHRgIGZ1bmN0aW9ucyBsaXZlIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoIFRMUy4gT2theSwgdGhlcmUmIzM5O3MgYGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmZgLCBgZG9fdGxzX2dldHNvY2tvcHRfdHhfemNgLCBgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkYCwgYGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgYGRvX3Rsc19nZXRzb2Nrb3B0YCwgYW5kIGB0bHNfZ2V0c29ja29wdGAuIEdvdCBpdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGVhY2ggb2YgdGhlICpkb18qIGZ1bmN0aW9ucyBpcyB0aGUgb25seSBvbmUgaW4gaXRzIHJlc3BlY3RpdmUgbW9kdWxlLiBgaWVlZTgwMjE1NGAgb25seSBoYXMgYGRvX2RncmFtX2dldHNvY2tvcHRgLCB0aGF0JiMzOTtzIGdvb2QuIGBpcHY2YCBvbmx5IGhhcyBgZG9fcmF3djZfZ2V0c29ja29wdGAsIHBlcmZlY3QuIGBwaG9uZXRgIGhhcyBgZG9fcGVwX2dldHNvY2tvcHRgLCBmaW5lLiBBbmQgdGhlbiwgdGhlcmUgYXJlIG11bHRpcGxlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggVExTLgoKUmlnaHQsIEkmIzM5O2xsIHVwZGF0ZSBteSBub3RlcyB0byByZWZsZWN0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgdW5kZXIgYEZvY3VzU3ltYm9sc2AuIEFuZCBJJiMzOTtsbCBiZSBjZXJ0YWluIHRvIGxpc3QgdGhlc2UgY29uZmlndXJhdGlvbnMgYXMgYEVuYWJsZUNvbmZpZ3NgIHRvIGtlZXAgdHJhY2suCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMuCmBJRUVFODAyMTU0YApgSUVFRTgwMjE1NF9TT0NLRVRgCmBJUFY2YApgUEhPTkVUYApgVExTYAoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3Jhd3Y2X2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19wZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF9jb25mJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjJiMzNDssCiAgICAmIzM0O2RvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZCYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiYjMzQ7LAogICAgJiMzNDtkb190bHNfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMzozNjo1Mi4yOTY2MTQwNTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM1ODI3MTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X1NPQ0tFVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiUEhPTkVUXCIsXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19kZ3JhbV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkZ3JhbV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19yYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJyYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19wZXBfZ2V0c29ja29wdFwiLFxuICAgIFwicGVwX2dldHNvY2tvcHRcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X2NvbmZcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF9ub19wYWRcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdFwiLFxuICAgIFwidGxzX2dldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24gZm9yIElFRUU4MDIxNTQsIElQdjYgcmF3IHNvY2tldHMsIFBob25ldCwgYW5kIFRMUyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgQVBJIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM2OjUyLjI5NjYyMjE3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5Nzk5ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2YxMTAzMzAyNzcwZDg4NGQxOTk3NzNlNzBhMDExMjMwZDg0OTAwYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMzozNjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXFxuaW5kZXggODVkY2UyOTZkNzUxMzkuLjc2M2Y2M2U0OGFmZTQ1IDEwMDY0NFxcbi0tLSBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXFxuKysrIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcXG5AQCAtODMxLDIwICs4MzEsMTIgQEAgc3RhdGljIGludCBpZWVlODAyMTU0X2RncmFtX2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19kZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTtcXG4tXFxuIFxcdGludCB2YWwsIGxlbjtcXG4gXFxuLVxcdGlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NClcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXG4tXFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcbi1cXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpO1xcbitcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9wdC1cXHUwMDNlb3B0bGVuLCBzaXplb2YoaW50KSk7XFxuIFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBXUEFOX1dBTlRBQ0s6XFxuQEAgLTg3MSwxMCArODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcXHUwMDI2dmFsLCBsZW4pKVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4re1xcbitcXHRzb2Nrb3B0X3Qgb3B0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcXHUwMDI2b3B0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXFxuaW5kZXggM2NjNTg2OThjYmJkM2EuLjFmMTU5NDJkMTQxNjNlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3Jhdy5jXFxuKysrIGIvbmV0L2lwdjYvcmF3LmNcXG5AQCAtMTA1MSwxNCArMTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7XFxuIFxcdGludCB2YWwsIGxlbjtcXG4gXFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiBcXHRjYXNlIElQVjZfSERSSU5DTDpcXG5AQCAtMTA4Miw5ICsxMDgwLDggQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFxuIFxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWwsIGxlbikpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTEwOTIsNiArMTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuK1xcdHNvY2tvcHRfdCBvcHQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbiBcXHRzd2l0Y2ggKGxldmVsKSB7XFxuIFxcdGNhc2UgU09MX1JBVzpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExMDksNyArMTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gZG9fcmF3djZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG5kaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmNcXG5pbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xcbisrKyBiL25ldC9waG9uZXQvcGVwLmNcXG5AQCAtMTA3OCwxNyArMTA3OCwxMSBAQCBzdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLVxcdFxcdFxcdFxcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcXG4gXFx0aW50IGxlbiwgdmFsO1xcbiBcXG4tXFx0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXFxuLVxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgUE5QSVBFX0VOQ0FQOlxcbiBcXHRcXHR2YWwgPSBwbi1cXHUwMDNlaWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FO1xcbkBAIC0xMTEyLDExICsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiBcXHR9XFxuIFxcbi1cXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihpbnQpLCBsZW4pO1xcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbitcXHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXFx1MDAzZW9wdGxlbik7XFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXFxuK3tcXG4rXFx0c29ja29wdF90IG9wdDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxcbitcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbitcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xcbmluZGV4IDhjNTg4Y2RhYjczM2RhLi5mYmIyNzQyODdhYTVmMiAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5AQCAtNDI0LDIwICs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRyZXR1cm4gbWFzaztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgX191c2VyICpvcHRsZW4sIGludCB0eClcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcXG4gXFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIFxcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvO1xcbiBcXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XFxuLVxcdGludCBsZW47XFxuK1xcdGludCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKCFvcHR2YWwgfHwgKGxlbiBcXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xcbitcXHRpZiAoIW9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1ZiB8fCBsZW4gXFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xcbiBcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTQ2Miw3ICs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxcbitcXHRcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcXG4gXFx0XFx0XFx0cmMgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC00NzgsNDQgKzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRtZW1jcHkoY3J5cHRvX2luZm9fcmVjX3NlcShjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MpLFxcbiBcXHQgICAgICAgY2N0eC1cXHUwMDNlcmVjX3NlcSwgY2lwaGVyX2Rlc2MtXFx1MDAzZXJlY19zZXEpO1xcbiBcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8pKVxcbitcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8sXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvKVxcbiBcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiBcXHR1bnNpZ25lZCBpbnQgdmFsdWU7XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHZhbHVlID0gY3R4LVxcdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi1cXHRcXHRcXHRcXHQgICAgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbi1cXHRpbnQgdmFsdWUsIGxlbjtcXG4rXFx0aW50IHZhbHVlLCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZih2YWx1ZSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNTI1LDM4ICs1MTYsMzEgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRpZiAodmFsdWUgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsdWU7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSkpKVxcbitcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IHNpemVvZih2YWx1ZSk7XFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXFxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gXFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW47XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZihwYXlsb2FkX2xlbikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcXG4rXFx0aWYgKGNvcHlfdG9faXRlcihcXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbiksXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtNTY1LDE3ICs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBUTFNfVFg6XFxuIFxcdGNhc2UgVExTX1JYOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbitcXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyYyA9IC1FTk9QUk9UT09QVDtcXG5AQCAtNTkxLDEyICs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbitcXHRzb2Nrb3B0X3Qgb3B0O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXFxuIFxcdFxcdHJldHVybiBjdHgtXFx1MDAzZXNrX3Byb3RvLVxcdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gXFxuLVxcdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXFxuaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbkBAIC0yOCw3ICsyOCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWNtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGxzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBBRl9WU09DS1xcbkBAIC00MCw2ICs0Myw0NSBAQFxcbiAjaWZuZGVmIElDTVBfRklMVEVSXFxuICNkZWZpbmUgSUNNUF9GSUxURVIgMVxcbiAjZW5kaWZcXG4rI2lmbmRlZiBJUFY2X0hEUklOQ0xcXG4rI2RlZmluZSBJUFY2X0hEUklOQ0wgMzZcXG4rI2VuZGlmXFxuKyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxcbisjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gN1xcbisjZW5kaWZcXG4rI2lmbmRlZiBBRl9JRUVFODAyMTU0XFxuKyNkZWZpbmUgQUZfSUVFRTgwMjE1NCAzNlxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxcbisjZGVmaW5lIFNPTF9JRUVFODAyMTU0IDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgV1BBTl9XQU5UQUNLXFxuKyNkZWZpbmUgV1BBTl9XQU5UQUNLIDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgQUZfUEhPTkVUXFxuKyNkZWZpbmUgQUZfUEhPTkVUIDM1XFxuKyNlbmRpZlxcbisjaWZuZGVmIFNPTF9QTlBJUEVcXG4rI2RlZmluZSBTT0xfUE5QSVBFIDI3NVxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTl9QUk9UT19QSVBFXFxuKyNkZWZpbmUgUE5fUFJPVE9fUElQRSAyXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUFxcbisjZGVmaW5lIFBOUElQRV9FTkNBUCAxXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUgMFxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcXG4rI2RlZmluZSBQTlBJUEVfRU5DQVBfSVAgMVxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfVExTXFxuKyNkZWZpbmUgU09MX1RMUyAyODJcXG4rI2VuZGlmXFxuKyNpZm5kZWYgVENQX1VMUFxcbisjZGVmaW5lIFRDUF9VTFAgMzFcXG4rI2VuZGlmXFxuIFxcbiAvKiAtLS0tLS0tLS0tIG5ldGxpbmsgLS0tLS0tLS0tLSAqL1xcbiBcXG5AQCAtMzk0LDQgKzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXFxuIFxcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4gfVxcbiBcXG4rLyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocmF3djYpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChyYXd2NilcXG4re1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZWZkIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHJhd3Y2KVxcbit7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK31cXG4rXFxuK1RFU1RfRihyYXd2NiwgaGRyaW5jbF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcXG4rICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxcbisgKi9cXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi9cXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9FUSgtMSwgdmFsKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIDB4N2ZmZiwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKGllZWU4MDIxNTQpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChpZWVlODAyMTU0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1xcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19vdmVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdGNoYXIgYnVmWzE2XSA9IHt9O1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKDIsIG9wdGxlbik7XFxuK31cXG4rXFxuK1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqL1xcbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1JBVywgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocGhvbmV0KVxcbit7XFxuK1xcdGludCBmZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAocGhvbmV0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX1BIT05FVCBwaXBlIHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHBob25ldClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XFxuK31cXG4rXFxuK1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuXFxuKyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXFxuKyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxcbisgKi9cXG4rVEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbjtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXFxuK1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKHRscylcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdGludCBzZmQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKHRscylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYSA9IHtcXG4rXFx0XFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcXG4rXFx0fTtcXG4rXFx0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XFxuK1xcdGludCBsZmQ7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IC0xO1xcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSAtMTtcXG4rXFxuK1xcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChsZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRDUCBzb2NrZXQ6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmEsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHxcXG4rXFx0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhLCBcXHUwMDI2YWxlbikpIHtcXG4rXFx0XFx0Y2xvc2UobGZkKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJsaXN0ZW5lciBzZXR1cDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHR9XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNvbm5lY3Qoc2VsZi1cXHUwMDNlZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YSwgc2l6ZW9mKGEpKSkge1xcbitcXHRcXHRjbG9zZShsZmQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImNvbm5lY3Q6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcXG4rXFx0Y2xvc2UobGZkKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiVENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXFxcIixcXG4rXFx0XFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHRscylcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZXNmZCk7XFxuK31cXG4rXFxuKy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXFxuK1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcXG4rXFx0aW50IHZhbCA9IC0xO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcXG4rfVxcbitcXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZVxcbisgKiBjb252ZXJ0ZWQgY29kZSB0ZXN0cyBvcHQtXFx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxcbisgKi9cXG4rVEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuK1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGNoYXIgYnVmWzJdO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuKy8qIFRMU19UWCBiZWZvcmUgY3J5cHRvIGlzIHNldCByZXBvcnRzIG5vdC1yZWFkeS4gKi9cXG4rVEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFxcdTAwMjZpbmZvLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFQlVTWSwgZXJybm8pO1xcbit9XFxuK1xcbisvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZ1xcbisgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXFxuKyAqL1xcbitURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApXFxuK3tcXG4rXFx0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0ge1xcbitcXHRcXHQuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLFxcbitcXHRcXHQuaW5mby5jaXBoZXJfdHlwZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xcbitcXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGJhc2U7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2dHgsIHNpemVvZih0eCkpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZihiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXFx1MDAyNmJhc2UsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTtcXG4rXFx0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2ZnVsbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM2OjUyLjg5NzM0Njc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjg3NTc1MjgzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcGVwX2dldHNvY2tvcHRcIixcbiAgICBcInBlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF9jb25mXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF96Y1wiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlblwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uIGZvciBJRUVFODAyMTU0LCBJUHY2IHJhdyBzb2NrZXRzLCBQaG9uZXQsIGFuZCBUTFMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IEFQSSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmMTEwMzMwMjc3MGQ4ODRkMTk5NzczZTcwYTAxMTIzMGQ4NDkwMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMzozNjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbmluZGV4IDg1ZGNlMjk2ZDc1MTM5Li43NjNmNjNlNDhhZmU0NSAxMDA2NDRcbi0tLSBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG4rKysgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuQEAgLTgzMSwyMCArODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb19kZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTtcbi1cbiBcdGludCB2YWwsIGxlbjtcbiBcbi1cdGlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NClcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpO1xuK1x0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBvcHQtXHUwMDNlb3B0bGVuLCBzaXplb2YoaW50KSk7XG4gXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgV1BBTl9XQU5UQUNLOlxuQEAgLTg3MSwxMCArODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuK1x0b3B0LVx1MDAzZW9wdGxlbiA9IGxlbjtcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsLCBsZW4sIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gbGVuKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWwsIGxlbikpXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbitcdFx0XHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3tcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uMWYxNTk0MmQxNDE2M2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuKysrIGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xMDUxLDE0ICsxMDUxLDEyIEBAIHN0YXRpYyBpbnQgcmF3djZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgcmF3Nl9zb2NrICpycCA9IHJhdzZfc2soc2spO1xuIFx0aW50IHZhbCwgbGVuO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQVjZfSERSSU5DTDpcbkBAIC0xMDgyLDkgKzEwODAsOCBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFxuIFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbiBcbi1cdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTA5Miw2ICsxMDg5LDkgQEAgc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuIHtcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuK1xuIFx0c3dpdGNoIChsZXZlbCkge1xuIFx0Y2FzZSBTT0xfUkFXOlxuIFx0XHRicmVhaztcbkBAIC0xMTA5LDcgKzExMDksMTggQEAgc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0cmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdH1cbiBcbi1cdHJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuY1xuaW5kZXggNzA2OTI3MTM5MzkzM2UuLjdlZjRhOWEyNDBlZjhjIDEwMDY0NFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xuKysrIGIvbmV0L3Bob25ldC9wZXAuY1xuQEAgLTEwNzgsMTcgKzEwNzgsMTEgQEAgc3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHRcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3BlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBwZXBfc29jayAqcG4gPSBwZXBfc2soc2spO1xuIFx0aW50IGxlbiwgdmFsO1xuIFxuLVx0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXG4tXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBQTlBJUEVfRU5DQVA6XG4gXHRcdHZhbCA9IHBuLVx1MDAzZWlmaW5kZXggPyBQTlBJUEVfRU5DQVBfSVAgOiBQTlBJUEVfRU5DQVBfTk9ORTtcbkBAIC0xMTEyLDExICsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbi1cdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXG4rXHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXHUwMDNlb3B0bGVuKTtcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAocHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuK1x0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3tcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXG4rXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4rXG4rXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBkb19wZXBfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uZmJiMjc0Mjg3YWE1ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbisrKyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTQyNCwyMCArNDI0LDE2IEBAIHN0YXRpYyBfX3BvbGxfdCB0bHNfc2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbiBcdHJldHVybiBtYXNrO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLVx0XHRcdFx0ICBpbnQgX191c2VyICpvcHRsZW4sIGludCB0eClcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdCwgaW50IHR4KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm87XG4gXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XG4tXHRpbnQgbGVuO1xuK1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmICghb3B0dmFsIHx8IChsZW4gXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xuK1x0aWYgKCFvcHQtXHUwMDNlaXRlcl9vdXQudWJ1ZiB8fCBsZW4gXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSB7XG4gXHRcdHJjID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtNDYyLDcgKzQ1OCw4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHR9XG4gXG4gXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxuK1x0XHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcbitcdFx0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZigqY3J5cHRvX2luZm8pKVxuIFx0XHRcdHJjID0gLUVGQVVMVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtNDc4LDQ0ICs0NzUsMzggQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdG1lbWNweShjcnlwdG9faW5mb19yZWNfc2VxKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYyksXG4gXHQgICAgICAgY2N0eC1cdTAwM2VyZWNfc2VxLCBjaXBoZXJfZGVzYy1cdTAwM2VyZWNfc2VxKTtcbiBcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8pKVxuK1x0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8sXG4rXHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8pXG4gXHRcdHJjID0gLUVGQVVMVDtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLVx0XHRcdFx0ICAgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHVuc2lnbmVkIGludCB2YWx1ZTtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHZhbHVlID0gY3R4LVx1MDAzZXplcm9jb3B5X3NlbmRmaWxlO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpKSlcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSksIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLVx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuLVx0aW50IHZhbHVlLCBsZW47XG4rXHRpbnQgdmFsdWUsIGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAoY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChsZW4gXHUwMDNjIHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTUyNSwzOCArNTE2LDMxIEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdGlmICh2YWx1ZSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHZhbHVlO1xuIFxuLVx0aWYgKHB1dF91c2VyKHNpemVvZih2YWx1ZSksIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpKSlcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBzaXplb2YodmFsdWUpO1xuK1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHR1MTYgcGF5bG9hZF9sZW4gPSBjdHgtXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YocGF5bG9hZF9sZW4pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YocGF5bG9hZF9sZW4pLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbiksXG4rXHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC01NjUsMTcgKzU0OSwxNiBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgVExTX1RYOlxuIFx0Y2FzZSBUTFNfUlg6XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sXG4tXHRcdFx0XHRcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XG4rXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xuK1x0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFRMU19UWF9NQVhfUEFZTE9BRF9MRU46XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyYyA9IC1FTk9QUk9UT09QVDtcbkBAIC01OTEsMTIgKzU3NCwyNSBAQCBzdGF0aWMgaW50IHRsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbitcdHNvY2tvcHRfdCBvcHQ7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXG4gXHRcdHJldHVybiBjdHgtXHUwMDNlc2tfcHJvdG8tXHUwMDNlZ2V0c29ja29wdChzaywgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcbi1cdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfY3J5cHRvX2luZm8oY29uc3Qgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG5pbmRleCBmZTVhNTI2OGJjMzRlYy4uOTc0MDY1YTIzZmE4MjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuQEAgLTI4LDcgKzI4LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuICNpZm5kZWYgQUZfVlNPQ0tcbkBAIC00MCw2ICs0Myw0NSBAQFxuICNpZm5kZWYgSUNNUF9GSUxURVJcbiAjZGVmaW5lIElDTVBfRklMVEVSIDFcbiAjZW5kaWZcbisjaWZuZGVmIElQVjZfSERSSU5DTFxuKyNkZWZpbmUgSVBWNl9IRFJJTkNMIDM2XG4rI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0NIRUNLU1VNXG4rI2RlZmluZSBJUFY2X0NIRUNLU1VNIDdcbisjZW5kaWZcbisjaWZuZGVmIEFGX0lFRUU4MDIxNTRcbisjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzZcbisjZW5kaWZcbisjaWZuZGVmIFNPTF9JRUVFODAyMTU0XG4rI2RlZmluZSBTT0xfSUVFRTgwMjE1NCAwXG4rI2VuZGlmXG4rI2lmbmRlZiBXUEFOX1dBTlRBQ0tcbisjZGVmaW5lIFdQQU5fV0FOVEFDSyAwXG4rI2VuZGlmXG4rI2lmbmRlZiBBRl9QSE9ORVRcbisjZGVmaW5lIEFGX1BIT05FVCAzNVxuKyNlbmRpZlxuKyNpZm5kZWYgU09MX1BOUElQRVxuKyNkZWZpbmUgU09MX1BOUElQRSAyNzVcbisjZW5kaWZcbisjaWZuZGVmIFBOX1BST1RPX1BJUEVcbisjZGVmaW5lIFBOX1BST1RPX1BJUEUgMlxuKyNlbmRpZlxuKyNpZm5kZWYgUE5QSVBFX0VOQ0FQXG4rI2RlZmluZSBQTlBJUEVfRU5DQVAgMVxuKyNlbmRpZlxuKyNpZm5kZWYgUE5QSVBFX0VOQ0FQX05PTkVcbisjZGVmaW5lIFBOUElQRV9FTkNBUF9OT05FIDBcbisjZW5kaWZcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9JUFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX0lQIDFcbisjZW5kaWZcbisjaWZuZGVmIFNPTF9UTFNcbisjZGVmaW5lIFNPTF9UTFMgMjgyXG4rI2VuZGlmXG4rI2lmbmRlZiBUQ1BfVUxQXG4rI2RlZmluZSBUQ1BfVUxQIDMxXG4rI2VuZGlmXG4gXG4gLyogLS0tLS0tLS0tLSBuZXRsaW5rIC0tLS0tLS0tLS0gKi9cbiBcbkBAIC0zOTQsNCArNDM2LDM4NiBAQCBURVNUX0YocmF3LCBiYWRfb3B0bmFtZSlcbiBcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiB9XG4gXG4rLyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cbitcbitGSVhUVVJFKHJhd3Y2KVxuK3tcbitcdGludCBmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAocmF3djYpXG4re1xuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihyYXd2Nilcbit7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuK31cbitcbitURVNUX0YocmF3djYsIGhkcmluY2xfZXhhY3QpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWwgPSAtMTtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xuK31cbitcbitURVNUX0YocmF3djYsIGhkcmluY2xfb3ZlcnNpemVfY2xhbXBlZClcbit7XG4rXHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuK1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbit9XG4rXG4rLyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcbisgKiBpbnN0ZWFkIG9mIHJldHVybmluZyBFSU5WQUwgb24gYSBzaG9ydCBidWZmZXIuXG4rICovXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gMDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0LyogQSBub24tSUNNUHY2IHJhdyBzb2NrZXQgaGFzIHRoZSBjaGVja3N1bSBkaXNhYmxlZCwgcmVwb3J0ZWQgYXMgLTEuICovXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfQ0hFQ0tTVU0sXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX0VRKC0xLCB2YWwpO1xuK31cbitcbitURVNUX0YocmF3djYsIGJhZF9vcHRuYW1lKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIDB4N2ZmZiwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShpZWVlODAyMTU0KVxuK3tcbitcdGludCBmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoaWVlZTgwMjE1NClcbit7XG4rXHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNjIDApXG4rXHRcdFNLSVAocmV0dXJuLCBcIkFGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKGllZWU4MDIxNTQpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbit9XG4rXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfZXhhY3QpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWwgPSAtMTtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rXHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX292ZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxuK1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbit9XG4rXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRpbnQgdmFsID0gMDtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSlcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXG4rXHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiBkZ3JhbV9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfSUVFRTgwMjE1NC4gKi9cbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgV1BBTl9XQU5UQUNLLFxuK1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiAtLS0tLS0tLS0tIHBob25ldCAocGVwKSAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShwaG9uZXQpXG4re1xuK1x0aW50IGZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChwaG9uZXQpXG4re1xuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9QSE9ORVQsIFNPQ0tfU0VRUEFDS0VULCBQTl9QUk9UT19QSVBFKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJBRl9QSE9ORVQgcGlwZSBzb2NrZXQ6ICVzXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04ocGhvbmV0KVxuK3tcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rfVxuK1xuK1RFU1RfRihwaG9uZXQsIGVuY2FwX2V4YWN0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rXHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XG4rfVxuK1xuK1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4rXHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK31cbitcbisvKiBwZXAgY2xhbXBzIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXIuIFVzZSBhblxuKyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXG4rICogd2hpY2ggd3JpdGVzIGEgZnVsbCBpbnQgdmlhIHB1dF91c2VyKCksIGRvZXMgbm90IHNjcmliYmxlIHBhc3QgaXQuXG4rICovXG4rVEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRpbnQgdmFsID0gMDtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcbitcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbit9XG4rXG4rVEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWw7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXG4rVEVTVF9GKHBob25ldCwgYmFkX2xldmVsKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgUE5QSVBFX0VOQ0FQLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4rfVxuK1xuKy8qIC0tLS0tLS0tLS0gdGxzIC0tLS0tLS0tLS0gKi9cbitcbitGSVhUVVJFKHRscylcbit7XG4rXHRpbnQgZmQ7XG4rXHRpbnQgc2ZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUCh0bHMpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGEgPSB7XG4rXHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4rXHR9O1xuK1x0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XG4rXHRpbnQgbGZkO1xuK1xuK1x0c2VsZi1cdTAwM2VmZCA9IC0xO1xuK1x0c2VsZi1cdTAwM2VzZmQgPSAtMTtcbitcbitcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAobGZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJUQ1Agc29ja2V0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YSwgc2l6ZW9mKGEpKSB8fCBsaXN0ZW4obGZkLCAxKSB8fFxuK1x0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIFx1MDAyNmFsZW4pKSB7XG4rXHRcdGNsb3NlKGxmZCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImxpc3RlbmVyIHNldHVwOiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoY29ubmVjdChzZWxmLVx1MDAzZWZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YSwgc2l6ZW9mKGEpKSkge1xuK1x0XHRjbG9zZShsZmQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJjb25uZWN0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0c2VsZi1cdTAwM2VzZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcbitcdGNsb3NlKGxmZCk7XG4rXHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCJ0bHNcIiwgc2l6ZW9mKFwidGxzXCIpKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiVENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXCIsXG4rXHRcdCAgICAgc3RyZXJyb3IoZXJybm8pKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih0bHMpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbitcdGlmIChzZWxmLVx1MDAzZXNmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlc2ZkKTtcbit9XG4rXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoKTogZml4ZWQtc2l6ZSBpbnQsIGV4YWN0IGxlbmd0aCByZXF1aXJlZC4gKi9cbitURVNUX0YodGxzLCB0eF96ZXJvY29weV9leGFjdClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGludCk7XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xuK31cbitcbitURVNUX0YodGxzLCB0eF96ZXJvY29weV93cm9uZ19sZW4pXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRpbnQgdmFsO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcbitcdFx0XHRcdCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuK31cbitcbisvKiBkb190bHNfZ2V0c29ja29wdF9jb25mKCk6IE5VTEwgb3B0dmFsIHN0aWxsIHlpZWxkcyBFSU5WQUwgLS0gdGhlXG4rICogY29udmVydGVkIGNvZGUgdGVzdHMgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxuKyAqL1xuK1RFU1RfRih0bHMsIGNvbmZfbnVsbF9vcHR2YWwpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDY0O1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XG4rfVxuK1xuK1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4rXHRjaGFyIGJ1ZlsyXTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XG4rfVxuK1xuKy8qIFRMU19UWCBiZWZvcmUgY3J5cHRvIGlzIHNldCByZXBvcnRzIG5vdC1yZWFkeS4gKi9cbitURVNUX0YodGxzLCBjb25mX25vdF9yZWFkeSlcbit7XG4rXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGluZm87XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2aW5mbywgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRUJVU1ksIGVycm5vKTtcbit9XG4rXG4rLyogU2V0IFRYIGNyeXB0bywgdGhlbiByZWFkIGl0IGJhY2sgYXQgdGhlIGJhc2UgYW5kIGZ1bGwgc2l6ZXMsIGV4ZXJjaXNpbmdcbisgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXG4rICovXG4rVEVTVF9GKHRscywgY29uZl9jcnlwdG9fcm91bmR0cmlwKVxuK3tcbitcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCB0eCA9IHtcbitcdFx0LmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTixcbitcdFx0LmluZm8uY2lwaGVyX3R5cGUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LFxuK1x0fTtcbitcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xuK1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBiYXNlO1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcbitcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2dHgsIHNpemVvZih0eCkpKVxuK1x0XHRTS0lQKHJldHVybiwgXCJzZXQgVExTX1RYIGFlc19nY21fMTI4OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKGJhc2UpO1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZiYXNlLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoYmFzZSksIG9wdGxlbik7XG4rXHRBU1NFUlRfRVEoVExTXzFfMl9WRVJTSU9OLCBiYXNlLnZlcnNpb24pO1xuK1x0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZmdWxsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoZnVsbCksIG9wdGxlbik7XG4rXHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcbit9XG4rXG4rVEVTVF9GKHRscywgYmFkX29wdG5hbWUpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xuK1x0aW50IHZhbDtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbit9XG4rXG4gVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM2OjUyLjg5NzM0ODc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5NDI2MzcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogQSBEZWVwIERpdmUgaW50byBnZXRzb2Nrb3B0IFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgbG9va2luZyBhdCBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdDogdGhlIHJlZmFjdG9yaW5nIG9mIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgYXJlYXMsIHNwZWNpZmljYWxseSBgbmV0L2llZWU4MDIxNTQvc29ja2V0LmNgLCBgbmV0L2lwdjYvcmF3LmNgLCBgbmV0L3Bob25ldC9wZXAuY2AsIGBuZXQvdGxzL3Rsc19tYWluLmNgLCBhbmQgZXZlbiB0aGUgc2VsZnRlc3RzLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jYC4gIEl0IGFwcGVhcnMgdGhleSBhcmUgbW92aW5nIGZyb20gdGhlIG9sZGVyIGBjb3B5X3RvX3VzZXJgIGFuZCBgcHV0X3VzZXJgIG1ldGhvZHMgdG8gdGhlIG5ldyBgc29ja29wdF90YCBhbmQgYGNvcHlfdG9faXRlcmAgQVBJLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBpbXBhY3RzIGhvdyBgZ2V0c29ja29wdGAgb3BlcmF0ZXMgaW50ZXJuYWxseS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IHRlc3RhYmlsaXR5LiBDYW4gd2UgYWRlcXVhdGVseSBjb3ZlciB0aGlzIGNoYW5nZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIHRoZXNlIGFyZSBuZXR3b3JrIHByb3RvY29scy4gYGllZWU4MDIxNTRgLCBgaXB2NmAsIGBwaG9uZXRgLCBhbmQgYHRsc2AgYXJlIGFsbCBuZXR3b3JrIHByb3RvY29scywgdGhleSBzaG91bGQgYmUgdGVzdGFibGUgd2l0aGluIFFFTVUuICBTbyBsZXQncyBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LiBXZSBuZWVkIHRvIGZvY3VzIG9uIHNvY2tldCB0eXBlcyB0aGF0IHJlbGF0ZSB0byB0aGUgcHJvdG9jb2xzLlxuKiAgIGBpZWVlODAyMTU0YCBpcyBoYW5kbGVkIHdpdGggYW4gYEFGX0lFRUU4MDIxNTRgIHNvY2tldC5cbiogICBgaXB2NmAgdXNlcyBgU09DS19SQVdgLlxuKiAgIGBwaG9uZXRgIHVzZXMgYEFGX1BIT05FVGAuXG4qICAgYHRsc2AgdXNlcyBgVENQX1VMUGAuXG5cbk9rYXksIG5leHQsIHdlIGhhdmUgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB3ZSBuZWVkIHRvIGZ1enouIFRpbWUgdG8gaWRlbnRpZnkgdGFyZ2V0czpcbi0gYGRvX2RncmFtX2dldHNvY2tvcHRgXG4tIGBkZ3JhbV9nZXRzb2Nrb3B0YFxuLSBgZG9fcmF3djZfZ2V0c29ja29wdGBcbi0gYHJhd3Y2X2dldHNvY2tvcHRgXG4tIGBkb19wZXBfZ2V0c29ja29wdGBcbi0gYHBlcF9nZXRzb2Nrb3B0YFxuLSBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmBcbi0gYGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjYFxuLSBgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkYFxuLSBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gXG4tIGBkb190bHNfZ2V0c29ja29wdGBcbi0gYHRsc19nZXRzb2Nrb3B0YFxuXG5GaW5hbGx5LCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9ucy4gV2Ugd2lsbCBoYXZlIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBlbmFibGVkOlxuLSBgQ09ORklHX0lFRUU4MDIxNTRgXG4tIGBDT05GSUdfSUVFRTgwMjE1NF9TT0NLRVRgXG4tIGBDT05GSUdfSVBWNmBcbi0gYENPTkZJR19QSE9ORVRgXG4tIGBDT05GSUdfVExTYFxuXG5XZSdsbCB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgYmVmb3JlIHJ1bm5pbmcgdGVzdHMgdG8gbWFrZSBzdXJlIHdlJ3JlIGhpdHRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoZXNlIGNvbmZpZ3MhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODMzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6MzY6NTkuODkxNjE2ODI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTczNTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElFRUU4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNDpjb25maWcgSUVFRTgwMjE1NF9GQUtFTEJcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI0OmNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yNS1cXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zNS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MzY6Y29uZmlnIElFRUU4MDIxNTRfTVJGMjRKNDBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBNUkYyNEo0MCB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDctXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjQ4OmNvbmZpZyBJRUVFODAyMTU0X0NDMjUyMFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy00OS1cXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy01OC1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6NTk6Y29uZmlnIElFRUU4MDIxNTRfQVRVU0JcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIkFUVVNCIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy02OC1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6Njk6Y29uZmlnIElFRUU4MDIxNTRfQURGNzI0MlxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiQURGNzI0MiB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzktXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjgwOmNvbmZpZyBJRUVFODAyMTU0X0NBODIxMFxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiQ2FzY29kYSBDQTgyMTAgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTkxLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo5Mjpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGU1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDQTgyMTAgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTAxLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMDI6Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEwMy1cXHR0cmlzdGF0ZSBcXFwiTUNSMjBBIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTMtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjExNDpjb25maWcgSUVFRTgwMjE1NF9IV1NJTVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTUtXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWc6Mjpjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIjZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjRcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xNS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE2OmNvbmZpZyBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXFx0Ym9vbCBcXFwiSUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMC1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjItXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6Mzc6MDMuMjQ4OTgzNzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzMzc4MzA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggdGhlbSBhcyBJIHdvdWxkIGFwcHJvYWNoIGEgbmV3IHByb2plY3Q6XG5cbioqQ29uZmlndXJpbmcgYSBTZWN1cmUgV2lyZWxlc3MgTmV0d29yayoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYnVpbGRpbmcgYSBzZWN1cmUgd2lyZWxlc3MgbmV0d29yaywgcHJvYmFibHkgYW4gZW1iZWRkZWQgb3IgSW9UIGtpbmQgb2YgdGhpbmcsIGdpdmVuIHRoZSBjb25maWd1cmF0aW9ucyBsaXN0ZWQuXG5cbkZpcnN0LCBgSUVFRTgwMjE1NGAgaXMgdGhlIGZvdW5kYXRpb24uIEl0J3MgdGhlIHBoeXNpY2FsIGFuZCBNQUMgbGF5ZXIgc3RhbmRhcmQgZm9yIGxvdy1wb3dlciwgbG93LXJhdGUgd2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3Jrcy4gVGhlbiwgYElFRUU4MDIxNTRfU09DS0VUYCBzdWdnZXN0cyB0aGUgYXBwbGljYXRpb24gbGF5ZXIgd2lsbCBiZSBidWlsdCBvbiBzb2NrZXRzIOKAkyB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCBpbnRlcmZhY2luZyB3aXRoIG90aGVyIG5ldHdvcmsgc3RhY2tzLlxuXG5gSVBWNmAgdGVsbHMgbWUgd2UncmUgcGxhbm5pbmcgZm9yIHRoZSBmdXR1cmUsIGVtYnJhY2luZyBhIG1vZGVybiBpbnRlcm5ldCBwcm90b2NvbC4gR29vZC4gU2NhbGFiaWxpdHkgYW5kIGEgbGFyZ2VyIGFkZHJlc3Mgc3BhY2UgYXJlIGRlZmluaXRlbHkga2V5IGNvbnNpZGVyYXRpb25zLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBleHBlY3RpbmcgYSBtdWx0aXR1ZGUgb2YgZGV2aWNlcy4gYFBIT05FVGAg4oCTIG5vdyB0aGF04oCZcyBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBwcm9wcmlldGFyeSBvciBhcHBsaWNhdGlvbi1zcGVjaWZpYyBuZXR3b3JraW5nIGxheWVyICphYm92ZSogODAyLjE1LjQgYW5kIHBvdGVudGlhbGx5ICpiZWxvdyogSVB2Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuIElzIHRoaXMgYWJvdXQgbWVzaCBuZXR3b3JraW5nLCBhIHBhcnRpY3VsYXIgcm91dGluZyBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdlJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiBpdHMgaW1wbGVtZW50YXRpb24uXG5cbkZpbmFsbHksIGBUTFNgLiBQZXJmZWN0LiBFbmQtdG8tZW5kIHNlY3VyaXR5IGlzIGVzc2VudGlhbCBmb3IgYW55IG1vZGVybiBuZXR3b3JrLiBJ4oCZbSB0aGlua2luZyBlbmNyeXB0aW9uLCBhdXRoZW50aWNhdGlvbiwgaW50ZWdyaXR5IGNoZWNrcy4uLiB0aGUgd2hvbGUgc2hlYmFuZy4gU28gdGhlIGFzc3VtcHRpb24gaXMgdGhlIHVuZGVybHlpbmcgcmFkaW8gYW5kIG5ldHdvcmsgbGF5ZXJzIGFyZSBjb25zaWRlcmVkIHVudHJ1c3RlZCwgaGVuY2UgdGhlIG5lY2Vzc2l0eSBvZiBhIHNlY3VyZSB0cmFuc3BvcnQgbGF5ZXIuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIG5vdywgaXMgdG8gaW1tZWRpYXRlbHkgdmVyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgYFBIT05FVGAgYW5kIGBUTFNgLiBBcmUgdGhleSBjb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlciwgYW5kIHRoZSBleHBlY3RlZCBjb25zdHJhaW50cyBvZiB0aGUgaGFyZHdhcmU/IElzIHRoZSBUTFMgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciBsb3ctcG93ZXIgZGV2aWNlcz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gVGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgbWFrZSBzdXJlIHRoZSBwaWVjZXMgZml0IGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6Mzc6MDcuNDgyNzcxMDU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAyMzY1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIT05FVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGhvbmV0L0tjb25maWctNS1cXG5uZXQvcGhvbmV0L0tjb25maWc6Njpjb25maWcgUEhPTkVUXFxubmV0L3Bob25ldC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBob25ldCBwcm90b2NvbHMgZmFtaWx5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMzozNzowOS42NTMwMTI1MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NDQzNzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL0tjb25maWc9ODczPWNvbmZpZyBIQVJERU5fQlJBTkNIX0hJU1RPUllcXG4tLVxcbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxcbmFyY2gvYXJtL21tL0tjb25maWc6ODgzOmNvbmZpZyBUTFNfUkVHX0VNVUxcXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cXHRib29sXFxuLS1cXG5uZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIzOjM3OjExLjUxNzQ2MzI1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDQ3OTE0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIEdldHNvY2tvcHQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Igb2YgdGhlIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBmZXcga2V5IGFyZWFzOiBgaWVlZTgwMjE1NGAsIGBpcHY2YCwgYHBob25ldGAsIGFuZCBgdGxzYC4gVGhlIGRyaXZpbmcgZm9yY2UgYmVoaW5kIHRoZXNlIGNoYW5nZXMgaXMgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBzcGVjaWZpY2FsbHkgc3dpdGNoaW5nIGZyb20gYGNvcHlfdG9fdXNlcmAgdG8gYGNvcHlfdG9faXRlcmAuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGNvcmUga2VybmVsIGNoYW5nZSwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucy5cblxuTXkgZm9jdXMgaXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgZG9fZGdyYW1fZ2V0c29ja29wdGAsIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYGRvX3Jhd3Y2X2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBkb19wZXBfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCB0aGUgdmFyaW91cyBgZG9fdGxzX2dldHNvY2tvcHRfKmAgZnVuY3Rpb25zIGFuZCBgdGxzX2dldHNvY2tvcHRgIGl0c2VsZi4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdGhpcyBtb2RpZmljYXRpb24uXG5cblRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgSUVFRTgwMjE1NGAsIGBJRUVFODAyMTU0X1NPQ0tFVGAsIGBJUFY2YCwgYFBIT05FVGAsIGFuZCBgVExTYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGFyZSB0aGUgb25seSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgY2hlY2sgdGhlaXIgZGVwZW5kZW5jaWVzLiBgSVBWNmAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4gYElFRUU4MDIxNTRfU09DS0VUYCBjbGVhcmx5IGRlcGVuZHMgb24gYElFRUU4MDIxNTRgLiBgUEhPTkVUYCBhbmQgYFRMU2AgYXJlIHByb3RvY29sIGZhbWlsaWVzLCBzbyB0aGF0J3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTGV0IG1lIHBpbnBvaW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gYGRncmFtX2dldHNvY2tvcHRgIHJlc2lkZXMgaW4gYG5ldC9pZWVlODAyMTU0L3NvY2tldC5jYCwgYHJhd3Y2X2dldHNvY2tvcHRgIGlzIGluIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaXMgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgdGhlIGB0bHNfZ2V0c29ja29wdGAgZnVuY3Rpb25zIGxpdmUgaW4gYG5ldC90bHMvdGxzX21haW4uY2AuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGlkZW50aWZpZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoIFRMUy4gT2theSwgdGhlcmUncyBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmAsIGBkb190bHNfZ2V0c29ja29wdF90eF96Y2AsIGBkb190bHNfZ2V0c29ja29wdF9ub19wYWRgLCBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLCBgZG9fdGxzX2dldHNvY2tvcHRgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YC4gR290IGl0LlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdmVyaWZ5IGlmIGVhY2ggb2YgdGhlICpkb18qIGZ1bmN0aW9ucyBpcyB0aGUgb25seSBvbmUgaW4gaXRzIHJlc3BlY3RpdmUgbW9kdWxlLiBgaWVlZTgwMjE1NGAgb25seSBoYXMgYGRvX2RncmFtX2dldHNvY2tvcHRgLCB0aGF0J3MgZ29vZC4gYGlwdjZgIG9ubHkgaGFzIGBkb19yYXd2Nl9nZXRzb2Nrb3B0YCwgcGVyZmVjdC4gYHBob25ldGAgaGFzIGBkb19wZXBfZ2V0c29ja29wdGAsIGZpbmUuIEFuZCB0aGVuLCB0aGVyZSBhcmUgbXVsdGlwbGUgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBUTFMuXG5cblJpZ2h0LCBJJ2xsIHVwZGF0ZSBteSBub3RlcyB0byByZWZsZWN0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgdW5kZXIgYEZvY3VzU3ltYm9sc2AuIEFuZCBJJ2xsIGJlIGNlcnRhaW4gdG8gbGlzdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcyBgRW5hYmxlQ29uZmlnc2AgdG8ga2VlcCB0cmFjay5cblxuU28sIGhlcmUncyBteSB1cGRhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMuXG5gSUVFRTgwMjE1NGBcbmBJRUVFODAyMTU0X1NPQ0tFVGBcbmBJUFY2YFxuYFBIT05FVGBcbmBUTFNgXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTY1LCJPdXRwdXRUb2tlbnMiOjI3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjM6Mzc6MjEuNTY1MzgwMjQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ4OTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fcGVwX2dldHNvY2tvcHRcIixcbiAgICBcInBlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF9jb25mXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF96Y1wiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkXCIsXG4gICAgXCJkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlblwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uIGZvciBJRUVFODAyMTU0LCBJUHY2IHJhdyBzb2NrZXRzLCBQaG9uZXQsIGFuZCBUTFMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IEFQSSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfU09DS0VUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQSE9ORVRcIixcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX2RncmFtX2dldHNvY2tvcHRcIixcbiAgICBcImRncmFtX2dldHNvY2tvcHRcIixcbiAgICBcImRvX3Jhd3Y2X2dldHNvY2tvcHRcIixcbiAgICBcInJhd3Y2X2dldHNvY2tvcHRcIixcbiAgICBcImRvX3BlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJwZXBfZ2V0c29ja29wdFwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfY29uZlwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfdHhfemNcIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZFwiLFxuICAgIFwiZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5cIixcbiAgICBcImRvX3Rsc19nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0bHNfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbiBmb3IgSUVFRTgwMjE1NCwgSVB2NiByYXcgc29ja2V0cywgUGhvbmV0LCBhbmQgVExTIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCBBUEkgYW5kIGNvcHlfdG9faXRlciBpbnN0ZWFkIG9mIGNvcHlfdG9fdXNlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBwcm90b2NvbCBoYW5kbGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[1] Phase: Succeeded StartedAt: 2026-07-20 23:37:47 +0000 UTC FinishedAt: 2026-07-20 23:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 23:37:47 +0000 UTC FinishedAt: 2026-07-20 23:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2] Phase: Succeeded StartedAt: 2026-07-20 23:37:47 +0000 UTC FinishedAt: 2026-07-21 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 23:37:47 +0000 UTC FinishedAt: 2026-07-21 04:12:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 23:37:47 +0000 UTC FinishedAt: 2026-07-20 23:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 23:37:47 +0000 UTC FinishedAt: 2026-07-20 23:38:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbjjvr/series-workflowbjjvr-convert-artifact-3547384854/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 23:38:08 +0000 UTC FinishedAt: 2026-07-21 00:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 23:38:08 +0000 UTC FinishedAt: 2026-07-21 00:21:33 +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:*6fc4dc7e-c549-4ec7-b194-416780d734eb,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-workflowbjjvr/series-workflowbjjvr-convert-artifact-3547384854/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": "19b72151-fcd5-4b23-ba2a-21db3c77d4fe", "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-workflowbjjvr/series-workflowbjjvr-build-action-4232838060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 23:38:08 +0000 UTC FinishedAt: 2026-07-21 00:21:23 +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:*6fc4dc7e-c549-4ec7-b194-416780d734eb,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-workflowbjjvr/series-workflowbjjvr-convert-artifact-3547384854/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": "19b72151-fcd5-4b23-ba2a-21db3c77d4fe", "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-workflowbjjvr/series-workflowbjjvr-build-action-4232838060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 00:21:33 +0000 UTC FinishedAt: 2026-07-21 00:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 00:21:33 +0000 UTC FinishedAt: 2026-07-21 00:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 00:21:33 +0000 UTC FinishedAt: 2026-07-21 00:21:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 00:21:33 +0000 UTC FinishedAt: 2026-07-21 00:21:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbjjvr/series-workflowbjjvr-convert-artifact-1620134313/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 00:21:43 +0000 UTC FinishedAt: 2026-07-21 00:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 00:21:43 +0000 UTC FinishedAt: 2026-07-21 00:23:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19b72151-fcd5-4b23-ba2a-21db3c77d4fe,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-workflowbjjvr/series-workflowbjjvr-build-action-4232838060/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-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 00:23:42 +0000 UTC FinishedAt: 2026-07-21 00:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 00:23:42 +0000 UTC FinishedAt: 2026-07-21 00:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 00:23:42 +0000 UTC FinishedAt: 2026-07-21 01:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 00:23:42 +0000 UTC FinishedAt: 2026-07-21 01:08:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6fc4dc7e-c549-4ec7-b194-416780d734eb,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-workflowbjjvr/series-workflowbjjvr-convert-artifact-1620134313/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": "aeb5bae6-8a29-42ea-999f-d0ab7e642e0e", "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-workflowbjjvr/series-workflowbjjvr-build-action-3476590213/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 00:23:42 +0000 UTC FinishedAt: 2026-07-21 01:07:59 +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:*6fc4dc7e-c549-4ec7-b194-416780d734eb,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-workflowbjjvr/series-workflowbjjvr-convert-artifact-1620134313/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": "aeb5bae6-8a29-42ea-999f-d0ab7e642e0e", "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-workflowbjjvr/series-workflowbjjvr-build-action-3476590213/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 01:08:10 +0000 UTC FinishedAt: 2026-07-21 01:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 01:08:10 +0000 UTC FinishedAt: 2026-07-21 01:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 01:08:10 +0000 UTC FinishedAt: 2026-07-21 01:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 01:08:10 +0000 UTC FinishedAt: 2026-07-21 01:10:06 +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:*aeb5bae6-8a29-42ea-999f-d0ab7e642e0e,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-workflowbjjvr/series-workflowbjjvr-build-action-3476590213/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-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 01:10:20 +0000 UTC FinishedAt: 2026-07-21 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 01:10:20 +0000 UTC FinishedAt: 2026-07-21 01:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 01:10:20 +0000 UTC FinishedAt: 2026-07-21 01:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 01:10:21 +0000 UTC FinishedAt: 2026-07-21 04:12:28 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"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:*19b72151-fcd5-4b23-ba2a-21db3c77d4fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aeb5bae6-8a29-42ea-999f-d0ab7e642e0e,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-workflowbjjvr/series-workflowbjjvr-build-action-4232838060/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-workflowbjjvr/series-workflowbjjvr-build-action-3476590213/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 01:10:21 +0000 UTC FinishedAt: 2026-07-21 01:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 01:10:21 +0000 UTC FinishedAt: 2026-07-21 01:10:45 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"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-workflowbjjvr/series-workflowbjjvr-convert-artifact-1461610750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 01:10:21 +0000 UTC FinishedAt: 2026-07-21 01:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 01:10:55 +0000 UTC FinishedAt: 2026-07-21 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjjvr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_dgram_getsockopt","dgram_getsockopt","do_rawv6_getsockopt","rawv6_getsockopt","do_pep_getsockopt","pep_getsockopt","do_tls_getsockopt_conf","do_tls_getsockopt_tx_zc","do_tls_getsockopt_no_pad","do_tls_getsockopt_tx_payload_len","do_tls_getsockopt","tls_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","IEEE802154_SOCKET","IPV6","PHONET","TLS"],"series_id":"d206534a-c0fa-49bb-93fe-5444f59542ca","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 01:10:55 +0000 UTC FinishedAt: 2026-07-21 04:12:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19b72151-fcd5-4b23-ba2a-21db3c77d4fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aeb5bae6-8a29-42ea-999f-d0ab7e642e0e,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-workflowbjjvr/series-workflowbjjvr-build-action-4232838060/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-workflowbjjvr/series-workflowbjjvr-build-action-3476590213/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-workflowbjjvr/series-workflowbjjvr-convert-artifact-1461610750/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,}