Name: series-workflow4pzcg Phase: Succeeded StartedAt: 2026-07-27 20:49:35 +0000 UTC FinishedAt: 2026-07-28 01:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[0] Phase: Succeeded StartedAt: 2026-07-27 20:49:35 +0000 UTC FinishedAt: 2026-07-27 21:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 20:49:35 +0000 UTC FinishedAt: 2026-07-27 21:19:04 +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": "3a33bf32-43af-4239-bcf1-a2fcb74bcd51" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dgram_getsockopt", "rawv6_getsockopt", "pep_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+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtyYXd2Nl9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3BlcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3Rsc19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBkZ3JhbSwgSVB2NiByYXcsIFBob25ldCBQRVAsIGFuZCBUTFMgc29ja2V0cyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgaW50ZXJmYWNlIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgc29ja2V0IG9wdGlvbnMgYXJlIHJlYWQgYnkgdXNlciBzcGFjZSwgYW5kIGl0IGFmZmVjdHMgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gRnV6emluZyB0aGVzZSBnZXRzb2Nrb3B0IGhhbmRsZXJzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNDcyNGE1NDg2ZjJiN2U5OThhMzcwMDVkZmJiNjY3ODFkZmZiZTJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMjE6MTc6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuaW5kZXggODVkY2UyOTZkNzUxMzkuLjVhMzZlODc4OTNmNjQ3IDEwMDY0NFxuLS0tIGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG5AQCAtODMxLDIwICYjNDM7ODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7XG4tXG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcbiYjNDM7XHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXHUwMDNlb3B0bGVuKTtcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBXUEFOX1dBTlRBQ0s6XG5AQCAtODcxLDEwICYjNDM7ODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZG9fZGdyYW1fZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uYzM2MTUyZDIyOTViODkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xMDUxLDE0ICYjNDM7MTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7XG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQVjZfSERSSU5DTDpcbkBAIC0xMDgwLDExICYjNDM7MTA3OCwxMCBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbiYjNDM7XHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBsZW4pO1xuIFxuLVx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2dmFsLCBsZW4pKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEwOTIsNiAmIzQzOzEwODksOSBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4ge1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4gXHRzd2l0Y2ggKGxldmVsKSB7XG4gXHRjYXNlIFNPTF9SQVc6XG4gXHRcdGJyZWFrO1xuQEAgLTExMDksNyAmIzQzOzExMDksMTggQEAgc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0cmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdH1cbiBcbi1cdHJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuY1xuaW5kZXggNzA2OTI3MTM5MzkzM2UuLjdlZjRhOWEyNDBlZjhjIDEwMDY0NFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Bob25ldC9wZXAuY1xuQEAgLTEwNzgsMTcgJiM0MzsxMDc4LDExIEBAIHN0YXRpYyBpbnQgcGVwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0XHRjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHBlcF9zb2NrICpwbiA9IHBlcF9zayhzayk7XG4gXHRpbnQgbGVuLCB2YWw7XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX1BOUElQRSlcbi1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFBOUElQRV9FTkNBUDpcbiBcdFx0dmFsID0gcG4tXHUwMDNlaWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FO1xuQEAgLTExMTIsMTEgJiM0MzsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbi1cdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXG4mIzQzO1x0bGVuID0gdW1pbihzaXplb2YoaW50KSwgb3B0LVx1MDAzZW9wdGxlbik7XG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IGxlbjtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAocHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3tcbiYjNDM7XHRzb2Nrb3B0X3Qgb3B0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRvX3BlcF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggOGM1ODhjZGFiNzMzZGEuLmZiYjI3NDI4N2FhNWYyIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC00MjQsMjAgJiM0Mzs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0cmV0dXJuIG1hc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHQgIGludCBfX3VzZXIgKm9wdGxlbiwgaW50IHR4KVxuJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdCwgaW50IHR4KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm87XG4gXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XG4tXHRpbnQgbGVuO1xuJiM0MztcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRpZiAoIW9wdHZhbCB8fCAobGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkpIHtcbiYjNDM7XHRpZiAoIW9wdC1cdTAwM2VpdGVyX291dC51YnVmIHx8IGxlbiBcdTAwM2Mgc2l6ZW9mKCpjcnlwdG9faW5mbykpIHtcbiBcdFx0cmMgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC00NjIsNyAmIzQzOzQ1OCw4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHR9XG4gXG4gXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxuJiM0MztcdFx0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbyksXG4mIzQzO1x0XHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpXG4gXHRcdFx0cmMgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC00NzgsNDQgJiM0Mzs0NzUsMzggQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdG1lbWNweShjcnlwdG9faW5mb19yZWNfc2VxKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYyksXG4gXHQgICAgICAgY2N0eC1cdTAwM2VyZWNfc2VxLCBjaXBoZXJfZGVzYy1cdTAwM2VyZWNfc2VxKTtcbiBcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8pKVxuJiM0MztcdGlmIChjb3B5X3RvX2l0ZXIoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvLFxuJiM0MztcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBjaXBoZXJfZGVzYy1cdTAwM2VjcnlwdG9faW5mbylcbiBcdFx0cmMgPSAtRUZBVUxUO1xuIFxuIG91dDpcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHQgICBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHVuc2lnbmVkIGludCB2YWx1ZTtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpbnQgbGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdGlmIChsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR2YWx1ZSA9IGN0eC1cdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHQgICAgaW50IF9fdXNlciAqb3B0bGVuKVxuJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuLVx0aW50IHZhbHVlLCBsZW47XG4mIzQzO1x0aW50IHZhbHVlLCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiAhPSBUTFNfMV8zX1ZFUlNJT04pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC01MjUsMzggJiM0Mzs1MTYsMzEgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0aWYgKHZhbHVlIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdmFsdWU7XG4gXG4tXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSkpKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBzaXplb2YodmFsdWUpO1xuJiM0MztcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSksIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHUxNiBwYXlsb2FkX2xlbiA9IGN0eC1cdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW47XG4tXHRpbnQgbGVuO1xuLVxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YocGF5bG9hZF9sZW4pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YocGF5bG9hZF9sZW4pLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IHNpemVvZihwYXlsb2FkX2xlbik7XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSxcbiYjNDM7XHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTY1LDE3ICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBUTFNfVFg6XG4gXHRjYXNlIFRMU19SWDpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbixcbi1cdFx0XHRcdFx0ICAgIG9wdG5hbWUgPT0gVExTX1RYKTtcbiYjNDM7XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfUlhfRVhQRUNUX05PX1BBRDpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyYyA9IC1FTk9QUk9UT09QVDtcbkBAIC01OTEsMTIgJiM0Mzs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4mIzQzO1x0c29ja29wdF90IG9wdDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXG4gXHRcdHJldHVybiBjdHgtXHUwMDNlc2tfcHJvdG8tXHUwMDNlZ2V0c29ja29wdChzaywgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcbi1cdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfY3J5cHRvX2luZm8oY29uc3Qgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG5pbmRleCBmZTVhNTI2OGJjMzRlYy4uOTc0MDY1YTIzZmE4MjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuQEAgLTI4LDcgJiM0MzsyOCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtX3NvY2tldHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuICNpZm5kZWYgQUZfVlNPQ0tcbkBAIC00MCw2ICYjNDM7NDMsNDUgQEBcbiAjaWZuZGVmIElDTVBfRklMVEVSXG4gI2RlZmluZSBJQ01QX0ZJTFRFUiAxXG4gI2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9IRFJJTkNMXG4mIzQzOyNkZWZpbmUgSVBWNl9IRFJJTkNMIDM2XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIElQVjZfQ0hFQ0tTVU1cbiYjNDM7I2RlZmluZSBJUFY2X0NIRUNLU1VNIDdcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgQUZfSUVFRTgwMjE1NFxuJiM0MzsjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzZcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgU09MX0lFRUU4MDIxNTRcbiYjNDM7I2RlZmluZSBTT0xfSUVFRTgwMjE1NCAwXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFdQQU5fV0FOVEFDS1xuJiM0MzsjZGVmaW5lIFdQQU5fV0FOVEFDSyAwXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIEFGX1BIT05FVFxuJiM0MzsjZGVmaW5lIEFGX1BIT05FVCAzNVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBTT0xfUE5QSVBFXG4mIzQzOyNkZWZpbmUgU09MX1BOUElQRSAyNzVcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgUE5fUFJPVE9fUElQRVxuJiM0MzsjZGVmaW5lIFBOX1BST1RPX1BJUEUgMlxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBcbiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVAgMVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBfTk9ORVxuJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUF9OT05FIDBcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgUE5QSVBFX0VOQ0FQX0lQXG4mIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQX0lQIDFcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgU09MX1RMU1xuJiM0MzsjZGVmaW5lIFNPTF9UTFMgMjgyXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFRDUF9VTFBcbiYjNDM7I2RlZmluZSBUQ1BfVUxQIDMxXG4mIzQzOyNlbmRpZlxuIFxuIC8qIC0tLS0tLS0tLS0gbmV0bGluayAtLS0tLS0tLS0tICovXG4gXG5AQCAtMzk0LDQgJiM0Mzs0MzYsMzg2IEBAIFRFU1RfRihyYXcsIGJhZF9vcHRuYW1lKVxuIFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuIH1cbiBcbiYjNDM7LyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cbiYjNDM7XG4mIzQzO0ZJWFRVUkUocmF3djYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHJhd3Y2KVxuJiM0Mzt7XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04ocmF3djYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihyYXd2NiwgaGRyaW5jbF9vdmVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTZdID0ge307XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbiYjNDM7XHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcbiYjNDM7ICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihyYXd2NiwgY2hlY2tzdW1fZGVmYXVsdClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHQvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfQ0hFQ0tTVU0sXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YocmF3djYsIGJhZF9vcHRuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0LyogU09MX1JBVyByZWFjaGVzIGRvX3Jhd3Y2X2dldHNvY2tvcHQoKSBkaXJlY3RseS4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLS0tLS0tLSBpZWVlODAyMTU0IChkZ3JhbSkgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShpZWVlODAyMTU0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChpZWVlODAyMTU0KVxuJiM0Mzt7XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JRUVFODAyMTU0LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtBRl9JRUVFODAyMTU0IGRncmFtIHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NClcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbCA9IC0xO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX292ZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4mIzQzO1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX3VuZGVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIGJhZF9vcHRuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBkZ3JhbV9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfSUVFRTgwMjE1NC4gKi9cbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIGJhZF9sZXZlbClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCBXUEFOX1dBTlRBQ0ssXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVPUE5PVFNVUFAsIGVycm5vKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi9cbiYjNDM7XG4mIzQzO0ZJWFRVUkUocGhvbmV0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChwaG9uZXQpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0FGX1BIT05FVCBwaXBlIHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04ocGhvbmV0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihwaG9uZXQsIGVuY2FwX2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO1x0QVNTRVJUX1RSVUUodmFsID09IFBOUElQRV9FTkNBUF9OT05FIHx8IHZhbCA9PSBQTlBJUEVfRU5DQVBfSVApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF9vdmVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTZdID0ge307XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4mIzQzO1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuXG4mIzQzOyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXG4mIzQzOyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgUE5QSVBFX0VOQ0FQLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihwaG9uZXQsIGJhZF9vcHRuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIDB4N2ZmZiwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHBlcF9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfUE5QSVBFLiAqL1xuJiM0MztURVNUX0YocGhvbmV0LCBiYWRfbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgUE5QSVBFX0VOQ0FQLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLS0tLS0tLSB0bHMgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRSh0bHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0aW50IHNmZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodGxzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGEgPSB7XG4mIzQzO1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGEpO1xuJiM0MztcdGludCBsZmQ7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlZmQgPSAtMTtcbiYjNDM7XHRzZWxmLVx1MDAzZXNmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChsZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7VENQIHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YSwgc2l6ZW9mKGEpKSB8fCBsaXN0ZW4obGZkLCAxKSB8fFxuJiM0MztcdCAgICBnZXRzb2NrbmFtZShsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBcdTAwMjZhbGVuKSkge1xuJiM0MztcdFx0Y2xvc2UobGZkKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtsaXN0ZW5lciBzZXR1cDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChjb25uZWN0KHNlbGYtXHUwMDNlZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBzaXplb2YoYSkpKSB7XG4mIzQzO1x0XHRjbG9zZShsZmQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2Nvbm5lY3Q6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRzZWxmLVx1MDAzZXNmZCA9IGFjY2VwdChsZmQsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGNsb3NlKGxmZCk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1RDUF9VTFA9dGxzOiAlcyAoYnVpbHQgd2l0aG91dCBUTFM/KVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTih0bHMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VzZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VzZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBkb190bHNfZ2V0c29ja29wdF90eF96YygpOiBmaXhlZC1zaXplIGludCwgZXhhY3QgbGVuZ3RoIHJlcXVpcmVkLiAqL1xuJiM0MztURVNUX0YodGxzLCB0eF96ZXJvY29weV9leGFjdClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X3dyb25nX2xlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBkb190bHNfZ2V0c29ja29wdF9jb25mKCk6IE5VTEwgb3B0dmFsIHN0aWxsIHlpZWxkcyBFSU5WQUwgLS0gdGhlXG4mIzQzOyAqIGNvbnZlcnRlZCBjb2RlIHRlc3RzIG9wdC1cdTAwM2VpdGVyX291dC51YnVmIGluIHBsYWNlIG9mIG9wdHZhbC5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih0bHMsIGNvbmZfbnVsbF9vcHR2YWwpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIE5VTEwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHRscywgY29uZl9zaG9ydClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuJiM0MztcdGNoYXIgYnVmWzJdO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVExTX1RYIGJlZm9yZSBjcnlwdG8gaXMgc2V0IHJlcG9ydHMgbm90LXJlYWR5LiAqL1xuJiM0MztURVNUX0YodGxzLCBjb25mX25vdF9yZWFkeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gaW5mbztcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZpbmZvLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRUJVU1ksIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2V0IFRYIGNyeXB0bywgdGhlbiByZWFkIGl0IGJhY2sgYXQgdGhlIGJhc2UgYW5kIGZ1bGwgc2l6ZXMsIGV4ZXJjaXNpbmdcbiYjNDM7ICogYm90aCBjb3B5X3RvX2l0ZXIoKSBicmFuY2hlcy4gU0tJUCBpZiBBRVMtR0NNIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgY29uZl9jcnlwdG9fcm91bmR0cmlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0ge1xuJiM0MztcdFx0LmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTixcbiYjNDM7XHRcdC5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xuJiM0MztcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gYmFzZTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNnR4LCBzaXplb2YodHgpKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtzZXQgVExTX1RYIGFlc19nY21fMTI4OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKGJhc2UpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2YmFzZSwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoVExTXzFfMl9WRVJTSU9OLCBiYXNlLnZlcnNpb24pO1xuJiM0MztcdEFTU0VSVF9FUShUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LCBiYXNlLmNpcGhlcl90eXBlKTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2ZnVsbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihmdWxsKSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHRscywgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGludCk7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIDB4N2ZmZiwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfU09DS0VUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UEhPTkVUJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RncmFtX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQ3MjRhNTQ4NmYyYjdlOTk4YTM3MDA1ZGZiYjY2NzgxZGZmYmUyZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwppbmRleCA4NWRjZTI5NmQ3NTEzOS4uNWEzNmU4Nzg5M2Y2NDcgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jCkBAIC04MzEsMjAgJiM0Mzs4MzEsMTIgQEAgc3RhdGljIGludCBpZWVlODAyMTU0X2RncmFtX2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX2RncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOwotCiAJaW50IHZhbCwgbGVuOwogCi0JaWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSk7CiYjNDM7CWxlbiA9IHVtaW4oc2l6ZW9mKGludCksIG9wdC0mZ3Q7b3B0bGVuKTsKIAogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgV1BBTl9XQU5UQUNLOgpAQCAtODcxLDEwICYjNDM7ODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBsZW47CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWwsIGxlbiwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBsZW4pCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYW1wO3ZhbCwgbGVuKSkKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiYjNDM7CQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0Mzt7CiYjNDM7CXNvY2tvcHRfdCBvcHQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZXJyID0gc29ja29wdF9pbml0X3VzZXIoJmFtcDtvcHQsIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGRvX2RncmFtX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsICZhbXA7b3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCAzY2M1ODY5OGNiYmQzYS4uYzM2MTUyZDIyOTViODkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3Jhdy5jCkBAIC0xMDUxLDE0ICYjNDM7MTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCXJldHVybiBkb19yYXd2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQogCi1zdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTsKIAlpbnQgdmFsLCBsZW47CiAKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJbGVuID0gb3B0LSZndDtvcHRsZW47CiAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIElQVjZfSERSSU5DTDoKQEAgLTEwODAsMTEgJiM0MzsxMDc4LDEwIEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTsKJiM0MzsJbGVuID0gdW1pbihzaXplb2YoaW50KSwgbGVuKTsKIAotCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYW1wO3ZhbCwgbGVuKSkKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBsZW47CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWwsIGxlbiwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBsZW4pCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtMTA5Miw2ICYjNDM7MTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiYjNDM7CXNvY2tvcHRfdCBvcHQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU09MX1JBVzoKIAkJYnJlYWs7CkBAIC0xMTA5LDcgJiM0MzsxMTA5LDE4IEBAIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiBpcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiAJfQogCi0JcmV0dXJuIGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCAmYW1wO29wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZykKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLmMgYi9uZXQvcGhvbmV0L3BlcC5jCmluZGV4IDcwNjkyNzEzOTM5MzNlLi43ZWY0YTlhMjQwZWY4YyAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wZXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGhvbmV0L3BlcC5jCkBAIC0xMDc4LDE3ICYjNDM7MTA3OCwxMSBAQCBzdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdCkKIHsKIAlzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTsKIAlpbnQgbGVuLCB2YWw7CiAKLQlpZiAobGV2ZWwgIT0gU09MX1BOUElQRSkKLQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgUE5QSVBFX0VOQ0FQOgogCQl2YWwgPSBwbi0mZ3Q7aWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FOwpAQCAtMTExMiwxMSAmIzQzOzExMDYsMzMgQEAgc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTsKLQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQomIzQzOwlsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtJmd0O29wdGxlbik7CiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbGVuOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAocHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiYjNDM7CQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7ewomIzQzOwlzb2Nrb3B0X3Qgb3B0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAobGV2ZWwgIT0gU09MX1BOUElQRSkKJiM0MzsJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiYjNDM7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb19wZXBfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgJmFtcDtvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmMKaW5kZXggOGM1ODhjZGFiNzMzZGEuLmZiYjI3NDI4N2FhNWYyIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfbWFpbi5jCkBAIC00MjQsMjAgJiM0Mzs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgaW50IF9fdXNlciAqb3B0bGVuLCBpbnQgdHgpCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eCkKIHsKIAlpbnQgcmMgPSAwOwogCWNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjOwogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwogCXN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvOwogCXN0cnVjdCBjaXBoZXJfY29udGV4dCAqY2N0eDsKLQlpbnQgbGVuOwomIzQzOwlpbnQgbGVuID0gb3B0LSZndDtvcHRsZW47CiAKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICghb3B0dmFsIHx8IChsZW4gJmx0OyBzaXplb2YoKmNyeXB0b19pbmZvKSkpIHsKJiM0MzsJaWYgKCFvcHQtJmd0O2l0ZXJfb3V0LnVidWYgfHwgbGVuICZsdDsgc2l6ZW9mKCpjcnlwdG9faW5mbykpIHsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NjIsNyAmIzQzOzQ1OCw4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJfQogCiAJaWYgKGxlbiA9PSBzaXplb2YoKmNyeXB0b19pbmZvKSkgewotCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgY3J5cHRvX2luZm8sIHNpemVvZigqY3J5cHRvX2luZm8pKSkKJiM0MzsJCWlmIChjb3B5X3RvX2l0ZXIoY3J5cHRvX2luZm8sIHNpemVvZigqY3J5cHRvX2luZm8pLAomIzQzOwkJCQkgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSkKIAkJCXJjID0gLUVGQVVMVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDc4LDQ0ICYjNDM7NDc1LDM4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJbWVtY3B5KGNyeXB0b19pbmZvX3JlY19zZXEoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjKSwKIAkgICAgICAgY2N0eC0mZ3Q7cmVjX3NlcSwgY2lwaGVyX2Rlc2MtJmd0O3JlY19zZXEpOwogCi0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy0mZ3Q7Y3J5cHRvX2luZm8pKQomIzQzOwlpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy0mZ3Q7Y3J5cHRvX2luZm8sCiYjNDM7CQkJICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtJmd0O2NyeXB0b19pbmZvKQogCQlyYyA9IC1FRkFVTFQ7CiAKIG91dDoKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7CiAJdW5zaWduZWQgaW50IHZhbHVlOwotCWludCBsZW47Ci0KLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaW50IGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJaWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbHVlID0gY3R4LSZndDt6ZXJvY29weV9zZW5kZmlsZTsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDt2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpCiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCi0JCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwotCWludCB2YWx1ZSwgbGVuOwomIzQzOwlpbnQgdmFsdWUsIGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJaWYgKGN0eC0mZ3Q7cHJvdF9pbmZvLnZlcnNpb24gIT0gVExTXzFfM19WRVJTSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwogCWlmIChsZW4gJmx0OyBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTI1LDM4ICYjNDM7NTE2LDMxIEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKIAlpZiAodmFsdWUgJmx0OyAwKQogCQlyZXR1cm4gdmFsdWU7CiAKLQlpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSkpKQomIzQzOwlvcHQtJmd0O29wdGxlbiA9IHNpemVvZih2YWx1ZSk7CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7CiAJdTE2IHBheWxvYWRfbGVuID0gY3R4LSZndDt0eF9tYXhfcGF5bG9hZF9sZW47Ci0JaW50IGxlbjsKLQotCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwomIzQzOwlpbnQgbGVuID0gb3B0LSZndDtvcHRsZW47CiAKIAlpZiAobGVuICZsdDsgc2l6ZW9mKHBheWxvYWRfbGVuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocHV0X3VzZXIoc2l6ZW9mKHBheWxvYWRfbGVuKSwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDtwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpCiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTsKJiM0MzsJaWYgKGNvcHlfdG9faXRlcigmYW1wO3BheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pLAomIzQzOwkJCSAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9IHNpemVvZihwYXlsb2FkX2xlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwKLQkJCSAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQomIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJaW50IHJjID0gMDsKIApAQCAtNTY1LDE3ICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFRMU19UWDoKIAljYXNlIFRMU19SWDoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbiwKLQkJCQkJICAgIG9wdG5hbWUgPT0gVExTX1RYKTsKJiM0MzsJCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7CiAJCWJyZWFrOwogCWNhc2UgVExTX1RYX1pFUk9DT1BZX1JPOgotCQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHQpOwogCQlicmVhazsKIAljYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOgotCQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJcmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7CiAJCWJyZWFrOwogCWNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PUFJPVE9PUFQ7CkBAIC01OTEsMTIgJiM0Mzs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKJiM0MzsJc29ja29wdF90IG9wdDsKJiM0MzsJaW50IGVycjsKIAogCWlmIChsZXZlbCAhPSBTT0xfVExTKQogCQlyZXR1cm4gY3R4LSZndDtza19wcm90by0mZ3Q7Z2V0c29ja29wdChzaywgbGV2ZWwsCiAJCQkJCQkgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCi0JcmV0dXJuIGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgJmFtcDtvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfY3J5cHRvX2luZm8oY29uc3Qgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8sCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMKaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jCkBAIC0yOCw3ICYjNDM7MjgsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bV9zb2NrZXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWNtcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldGluZXQvaW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3NvY2tldC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90bHMuaCZndDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKICNpZm5kZWYgQUZfVlNPQ0sKQEAgLTQwLDYgJiM0Mzs0Myw0NSBAQAogI2lmbmRlZiBJQ01QX0ZJTFRFUgogI2RlZmluZSBJQ01QX0ZJTFRFUiAxCiAjZW5kaWYKJiM0MzsjaWZuZGVmIElQVjZfSERSSU5DTAomIzQzOyNkZWZpbmUgSVBWNl9IRFJJTkNMIDM2CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBJUFY2X0NIRUNLU1VNCiYjNDM7I2RlZmluZSBJUFY2X0NIRUNLU1VNIDcKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIEFGX0lFRUU4MDIxNTQKJiM0MzsjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzYKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFNPTF9JRUVFODAyMTU0CiYjNDM7I2RlZmluZSBTT0xfSUVFRTgwMjE1NCAwCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBXUEFOX1dBTlRBQ0sKJiM0MzsjZGVmaW5lIFdQQU5fV0FOVEFDSyAwCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBBRl9QSE9ORVQKJiM0MzsjZGVmaW5lIEFGX1BIT05FVCAzNQomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgU09MX1BOUElQRQomIzQzOyNkZWZpbmUgU09MX1BOUElQRSAyNzUKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOX1BST1RPX1BJUEUKJiM0MzsjZGVmaW5lIFBOX1BST1RPX1BJUEUgMgomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgUE5QSVBFX0VOQ0FQCiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVAgMQomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgUE5QSVBFX0VOQ0FQX05PTkUKJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUF9OT05FIDAKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUF9JUAomIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQX0lQIDEKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFNPTF9UTFMKJiM0MzsjZGVmaW5lIFNPTF9UTFMgMjgyCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBUQ1BfVUxQCiYjNDM7I2RlZmluZSBUQ1BfVUxQIDMxCiYjNDM7I2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0gbmV0bGluayAtLS0tLS0tLS0tICovCiAKQEAgLTM5NCw0ICYjNDM7NDM2LDM4NiBAQCBURVNUX0YocmF3LCBiYWRfb3B0bmFtZSkKIAlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiB9CiAKJiM0MzsvKiAtLS0tLS0tLS0tIHJhdyAoaXB2NikgLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzO0ZJWFRVUkUocmF3djYpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHJhd3Y2KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfUkFXLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtTT0NLX1JBVy9JUHY2IHNvY2tldDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihyYXd2NikKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfZXhhY3QpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsID0gLTE7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxNl0gPSB7fTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsCiYjNDM7CQkJCWJ1ZiwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSYXcgaW50IG9wdGlvbnMgY2xhbXAgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlcgomIzQzOyAqIGluc3RlYWQgb2YgcmV0dXJuaW5nIEVJTlZBTCBvbiBhIHNob3J0IGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfdW5kZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUSgyLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocmF3djYsIGNoZWNrc3VtX2RlZmF1bHQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CS8qIEEgbm9uLUlDTVB2NiByYXcgc29ja2V0IGhhcyB0aGUgY2hlY2tzdW0gZGlzYWJsZWQsIHJlcG9ydGVkIGFzIC0xLiAqLwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0NIRUNLU1VNLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfRVEoLTEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihyYXd2NiwgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJLyogU09MX1JBVyByZWFjaGVzIGRvX3Jhd3Y2X2dldHNvY2tvcHQoKSBkaXJlY3RseS4gKi8KJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUkFXLCAweDdmZmYsICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7RklYVFVSRShpZWVlODAyMTU0KQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChpZWVlODAyMTU0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfSUVFRTgwMjE1NCwgU09DS19ER1JBTSwgMCk7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtBRl9JRUVFODAyMTU0IGRncmFtIHNvY2tldDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihpZWVlODAyMTU0KQomIzQzO3sKJiM0MzsJaWYgKHNlbGYtJmd0O2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShzZWxmLSZndDtmZCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfb3ZlcnNpemVfY2xhbXBlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzE2XSA9IHt9OwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLAomIzQzOwkJCQlidWYsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKDIsIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsCiYjNDM7CQkJCSAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZGdyYW1fZ2V0c29ja29wdCgpIHJlamVjdHMgYW55IGxldmVsIG90aGVyIHRoYW4gU09MX0lFRUU4MDIxNTQuICovCiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIGJhZF9sZXZlbCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9SQVcsIFdQQU5fV0FOVEFDSywKJiM0MzsJCQkJICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKHBob25ldCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAocGhvbmV0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfUEhPTkVULCBTT0NLX1NFUVBBQ0tFVCwgUE5fUFJPVE9fUElQRSk7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtBRl9QSE9ORVQgcGlwZSBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04ocGhvbmV0KQomIzQzO3sKJiM0MzsJaWYgKHNlbGYtJmd0O2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShzZWxmLSZndDtmZCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihwaG9uZXQsIGVuY2FwX2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX1RSVUUodmFsID09IFBOUElQRV9FTkNBUF9OT05FIHx8IHZhbCA9PSBQTlBJUEVfRU5DQVBfSVApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF9vdmVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTZdID0ge307CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCwKJiM0MzsJCQkJYnVmLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuCiYjNDM7ICogaW50LXNpemVkIGJhY2tpbmcgYnVmZmVyIHdpdGggYSBzaG9ydCBvcHRsZW4gc28gdGhlIGJhc2VsaW5lIGtlcm5lbCwKJiM0MzsgKiB3aGljaCB3cml0ZXMgYSBmdWxsIGludCB2aWEgcHV0X3VzZXIoKSwgZG9lcyBub3Qgc2NyaWJibGUgcGFzdCBpdC4KJiM0MzsgKi8KJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF91bmRlcnNpemVfY2xhbXBlZCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSAyOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUSgyLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocGhvbmV0LCBiYWRfb3B0bmFtZSkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIDB4N2ZmZiwgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIHBlcF9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfUE5QSVBFLiAqLwomIzQzO1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIC0tLS0tLS0tLS0gdGxzIC0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKHRscykKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJaW50IHNmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAodGxzKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIGEgPSB7CiYjNDM7CQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCiYjNDM7CQkuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7CiYjNDM7CWludCBsZmQ7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O2ZkID0gLTE7CiYjNDM7CXNlbGYtJmd0O3NmZCA9IC0xOwomIzQzOwomIzQzOwlsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAobGZkICZsdDsgMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O1RDUCBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWlmIChiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YSwgc2l6ZW9mKGEpKSB8fCBsaXN0ZW4obGZkLCAxKSB8fAomIzQzOwkgICAgZ2V0c29ja25hbWUobGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthLCAmYW1wO2FsZW4pKSB7CiYjNDM7CQljbG9zZShsZmQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bGlzdGVuZXIgc2V0dXA6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAoY29ubmVjdChzZWxmLSZndDtmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YSwgc2l6ZW9mKGEpKSkgewomIzQzOwkJY2xvc2UobGZkKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2Nvbm5lY3Q6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsJc2VsZi0mZ3Q7c2ZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7CiYjNDM7CWNsb3NlKGxmZCk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgJiMzNDt0bHMmIzM0Oywgc2l6ZW9mKCYjMzQ7dGxzJiMzNDspKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O1RDUF9VTFA9dGxzOiAlcyAoYnVpbHQgd2l0aG91dCBUTFM/KSYjMzQ7LAomIzQzOwkJICAgICBzdHJlcnJvcihlcnJubykpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKHRscykKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7c2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShzZWxmLSZndDtzZmQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBkb190bHNfZ2V0c29ja29wdF90eF96YygpOiBmaXhlZC1zaXplIGludCwgZXhhY3QgbGVuZ3RoIHJlcXVpcmVkLiAqLwomIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpOwomIzQzOwlpbnQgdmFsID0gLTE7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IDI7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLAomIzQzOwkJCQkgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZQomIzQzOyAqIGNvbnZlcnRlZCBjb2RlIHRlc3RzIG9wdC0mZ3Q7aXRlcl9vdXQudWJ1ZiBpbiBwbGFjZSBvZiBvcHR2YWwuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSA2NDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsIE5VTEwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHRscywgY29uZl9zaG9ydCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSAyOwomIzQzOwljaGFyIGJ1ZlsyXTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUTFNfVFggYmVmb3JlIGNyeXB0byBpcyBzZXQgcmVwb3J0cyBub3QtcmVhZHkuICovCiYjNDM7VEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGluZm87CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCAmYW1wO2luZm8sICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFQlVTWSwgZXJybm8pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZwomIzQzOyAqIGJvdGggY29weV90b19pdGVyKCkgYnJhbmNoZXMuIFNLSVAgaWYgQUVTLUdDTSBpcyB1bmF2YWlsYWJsZS4KJiM0MzsgKi8KJiM0MztURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggdHggPSB7CiYjNDM7CQkuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLAomIzQzOwkJLmluZm8uY2lwaGVyX3R5cGUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggZnVsbDsKJiM0MzsJc3RydWN0IHRsc19jcnlwdG9faW5mbyBiYXNlOwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwomIzQzOwlpZiAoc2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCAmYW1wO3R4LCBzaXplb2YodHgpKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3NldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihiYXNlKTsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDtiYXNlLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGJhc2UpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfRVEoVExTXzFfMl9WRVJTSU9OLCBiYXNlLnZlcnNpb24pOwomIzQzOwlBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgYmFzZS5jaXBoZXJfdHlwZSk7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihmdWxsKTsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDtmdWxsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHRscywgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGludCk7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgMHg3ZmZmLCAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7CiYjNDM7fQomIzQzOwogVEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBHZXRzb2Nrb3B0IFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBob3cgdGhlIGtlcm5lbCYjMzk7cyBgZ2V0c29ja29wdGAgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdXNlciBzcGFjZS4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBuZXR3b3JrIHN1YnN5c3RlbXM6IGBpZWVlODAyMTU0YCwgYGlwdjYgcmF3YCwgYHBob25ldGAsIGFuZCBgdGxzYC4gVGhlIHBhdHRlcm4gaXMgY29uc2lzdGVudDogdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3JpbmcgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQgb2YgZGlyZWN0bHkgZGVhbGluZyB3aXRoIGBjaGFyIF9fdXNlciAqb3B0dmFsYCBhbmQgYGludCBfX3VzZXIgKm9wdGxlbmAsIGl0JiMzOTtzIHN3aXRjaGluZyB0byBhIGBzb2Nrb3B0X3QgKm9wdGAgYXBwcm9hY2ggYW5kIGVtcGxveWluZyBmdW5jdGlvbnMgbGlrZSBgc29ja29wdF9pbml0X3VzZXJgIGFuZCBgY29weV90b19pdGVyYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIHVuaWZpZWQgZnJhbWV3b3JrIGZvciBzb2NrZXQgb3B0aW9ucywgbGlrZWx5IGZvciBhIHZhcmlldHkgb2YgcmVhc29ucy4gSSYjMzk7bSBzcGVjdWxhdGluZyBCUEYgaW50ZWdyYXRpb24sIGlvX3VyaW5nIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsbHkganVzdCBhIGdlbmVyYWwgY2xlYW51cCBvZiB0aGlzIGludGVyZmFjZS4KCkJlY2F1c2UgaXQgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgKGhvdyBkYXRhIGlzIGNvcGllZCBvdXQgb2YgdGhlIGtlcm5lbCB3aXRoIGBnZXRzb2Nrb3B0YCksIHRoaXMgaXMgb2J2aW91c2x5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgcmVmYWN0b3IuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZXNlIHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2U6CgoqICAgYG5ldC9pZWVlODAyMTU0L3NvY2tldC5jYCByZXF1aXJlcyBib3RoIGBDT05GSUdfSUVFRTgwMjE1NGAgYW5kIGBDT05GSUdfSUVFRTgwMjE1NF9TT0NLRVRgCiogICBgbmV0L2lwdjYvcmF3LmNgIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfSVBWNmAKKiAgIGBuZXQvcGhvbmV0L3BlcC5jYCByZWxpZXMgb24gYENPTkZJR19QSE9ORVRgCiogICBgbmV0L3Rscy90bHNfbWFpbi5jYCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfVExTYAoKSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmVhY2ggb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUVFRTgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJRUVFIDgwMi4xNS40IENvbnRleHQgYW5kIFNvY2tldCBBYnN0cmFjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBJRUVFODAyMTU0YCBhbmQgYElFRUU4MDIxNTRfU09DS0VUYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGNvbnNpZGVyaW5nIGEgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIChMUi1XUEFOKSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGNvZGUgb3IgYSBzeXN0ZW0gdGhhdCYjMzk7cyBidWlsdCBvbiB0b3Agb2Ygb3IgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIElFRUUgODAyLjE1LjQgc3RhbmRhcmQuIFRoZSBzdGFuZGFyZCBpdHNlbGYgZGVmaW5lcyB0aGUgcGh5c2ljYWwgYW5kIE1BQyBsYXllcnMsIHNvIEkmIzM5O20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIFJGIHByb3RvY29sLgoKVGhlIHByZXNlbmNlIG9mIGBfU09DS0VUYCBzdWdnZXN0cyB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGFic3RyYWN0aW9uIGxheWVyLiBTcGVjaWZpY2FsbHksIEkgaW1hZ2luZSBhIHNvZnR3YXJlIGludGVyZmFjZSB0aGF0IGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgODAyLjE1LjQgcmFkaW8gaW4gYSBtb3JlIGNvbnZlbmllbnQsIGFwcGxpY2F0aW9uLWZyaWVuZGx5IHdheSwgc2ltaWxhciB0byBob3cgc3RhbmRhcmQgVENQL0lQIHNvY2tldHMgd29yayBmb3IgRXRoZXJuZXQgb3IgdGhlIEludGVybmV0LiBUaGlzIHNvY2tldCBhYnN0cmFjdGlvbiBzaG91bGQgYWJzdHJhY3QgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGZyYW1lIGZvcm1hdHRpbmcsIGFkZHJlc3NpbmcsIGFuZCBhY2tub3dsZWRnZSBoYW5kbGluZywgb2ZmZXJpbmcgYSBzaW1wbGVyIHByb2dyYW1taW5nIG1vZGVsLiBXZSBtaWdodCBiZSB1c2luZyBhIGZyYW1ld29yayBsaWtlIENvbnRpa2ksIFRpbnlPUywgb3Igc29tZXRoaW5nIGN1c3RvbS4KClRoZXJlZm9yZSwgdGhlIG1haW4gZ29hbCBpcyB0byBlZmZpY2llbnRseSBoYW5kbGUgZGF0YSB0cmFuc2ZlciBhbmQgY29tbXVuaWNhdGlvbiBvdmVyIGEgbG93LXBvd2VyLCBzaG9ydC1yYW5nZSB3aXJlbGVzcyBuZXR3b3JrLiBUaGUgc3BlY2lmaWNzIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSE9ORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGhvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Bob25ldC9LY29uZmlnLTUtXG5uZXQvcGhvbmV0L0tjb25maWc6Njpjb25maWcgUEhPTkVUXG5uZXQvcGhvbmV0L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1Bob25ldCBwcm90b2NvbHMgZmFtaWx5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUEhPTkVUIGFuZCB0aGUgTnVhbmNlcyBvZiBMaW5ndWlzdGljIFN0cnVjdHVyZSoqCgpSaWdodCwgc28gJiMzNDtQSE9ORVQuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIGludG8gdGhlIGNoYWxsZW5nZXMgYW5kIGNvbXBsZXhpdGllcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwaG9ub2xvZ2ljYWwgbmV0d29yaywgYnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqaG93KiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZW5jb2RlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBmZWF0dXJlLWJhc2VkIHJlcHJlc2VudGF0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IElzIGl0IGEgc3RyaWN0LCBydWxlLWdvdmVybmVkIHN5c3RlbSwgb3IgZG9lcyBpdCBpbmNvcnBvcmF0ZSBzb21lIGRlZ3JlZSBvZiBwcm9iYWJpbGlzdGljIHdlaWdodGluZywgcmVmbGVjdGluZyB0aGUgZ3JhZGllbnQgbmF0dXJlIG9mIHBob25ldGljIHJlYWxpemF0aW9uPwoKVGhlIHRlcm0gYnJpbmdzIHVwIGEgaG9zdCBvZiBzdWItcXVlc3Rpb25zOiB3aGF0JiMzOTtzIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbj8gSXMgdGhpcyBhIHB1cmVseSB0aGVvcmV0aWNhbCBjb25zdHJ1Y3QsIG9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBtb2RlbCBncm91bmRlZCBpbiBlbXBpcmljYWwgZGF0YSwgbGlrZSBhY291c3RpYyBtZWFzdXJlbWVudHMgb3IgYXJ0aWN1bGF0b3J5IGRhdGE/IElzIHRoZSBnb2FsIGRlc2NyaXB0aXZlLCBhdHRlbXB0aW5nIHRvIGNhcHR1cmUgdGhlIG9ic2VydmVkIHBhdHRlcm5zLCBvciBnZW5lcmF0aXZlLCBhaW1pbmcgdG8gcHJlZGljdCBub3ZlbCBzb3VuZCBwYXR0ZXJucyBhbmQgdmFyaWF0aW9ucz8gV2UgaGF2ZSB0byBsb29rIGF0IHRoZSBtZXRob2RzIGVtcGxveWVkOiBJcyB0aGlzIGEgaGFuZC1jcmFmdGVkIHN5c3RlbSwgb3Igc29tZXRoaW5nIHRoYXQgaGFzIGJlZW4gYXV0b21hdGljYWxseSBsZWFybmVkPyBXaGF0IGFyZSB0aGUgZGF0YSBzZXRzIHRoZSBuZXR3b3JrIGlzIGJhc2VkIG9uPwoKSSBhbHNvIHdhbnQgdG8ga25vdyBob3cgdGhlIG5ldHdvcmsgaGFuZGxlcyB2YXJpYXRpb25zLiBJcyBpdCBkZXNpZ25lZCB0byBhY2NvbW1vZGF0ZSBkaWFsZWN0YWwgZGlmZmVyZW5jZXMgYW5kIHRoZSBpbmhlcmVudCB2YXJpYWJpbGl0eSBvZiBzcGVlY2ggcHJvZHVjdGlvbj8gSG93IHdlbGwgZG9lcyBpdCBleHBsYWluIHBoZW5vbWVuYSBsaWtlIGFsbG9waG9ueSwgYXNzaW1pbGF0aW9uLCBhbmQgbmV1dHJhbGl6YXRpb24/IERvZXMgaXQgY29uc2lkZXIgdGhlIHByb3NvZGljIHN0cnVjdHVyZT8KClRoZSBpbXBsaWNhdGlvbnMgYXJlIGZhc2NpbmF0aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb25uZWN0aW5nIHBob25vbG9neSB3aXRoIHBob25ldGljcy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgcGVyY2VwdGlvbiBhbmQgcHJvZHVjdGlvbiBpbmZvcm0gdGhlc2UgbmV0d29ya3MuCldlIG11c3QgbG9vayBhdCBpbXBsZW1lbnRhdGlvbi4gV2hhdCBraW5kIG9mIGFsZ29yaXRobSB1bmRlcnBpbnMgaXQ/IFdoYXQgYXJlIHRoZSBjb25zdHJhaW50cywgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucz8KCkluIHRoZSBlbmQsIHdoYXQgaW5zaWdodHMgY2FuIHRoaXMgc3RydWN0dXJlIG9mZmVyPyBEb2VzIGl0IGNoYWxsZW5nZSBleGlzdGluZyBwaG9ub2xvZ2ljYWwgdGhlb3J5LCBvciBkb2VzIGl0IHByb3ZpZGUgYSBuZXcgd2F5IG9mIGZvcm1hbGl6aW5nIG91ciB1bmRlcnN0YW5kaW5nPyBJcyB0aGUgbW9kZWwgZ2VuZXJhbGl6YWJsZSBhY3Jvc3MgbGFuZ3VhZ2VzPyBJIGNhbiYjMzk7dCB3YWl0IHRvIHNlZSBob3cgdGhlICYjMzQ7UEhPTkVUJiMzNDsgc3lzdGVtIGFkZHJlc3NlcyB0aGVzZSBjcnVjaWFsIHF1ZXN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZy00LSNcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcbm5ldC90bHMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGxzL0tjb25maWctMTgtXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0Vcbm5ldC90bHMvS2NvbmZpZy0yMC1cdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29ja2V0IG9wdGlvbiBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgVExTYC4gYElQdjZgIGlzIHVzdWFsbHkgb24sIGJ1dCB3ZSBjYW4gZGVmaW5pdGVseSBpbmNvcnBvcmF0ZSBpdC4KCk15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAgd2l0aGluIGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGByYXd2Nl9nZXRzb2Nrb3B0YCBmcm9tIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgZmluYWxseSwgYHRsc19nZXRzb2Nrb3B0YCBsb2NhdGVkIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGUgdmlzaWJpbGl0eSBvZiBgZGdyYW1fZ2V0c29ja29wdGAuIElzIGl0IGV4cG9ydGVkIG9yIHN0YXRpYz8gQWgsIHRoZSBwYXRjaCBpbmRpY2F0ZXMgaXQmIzM5O3MgYHN0YXRpY2AuIEhvbGQgb24sIHRoZSBwcm9tcHQgYWR2aXNlcyB1cyB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhvc2Ugc3RhdGljIG9uZXMgZ2V0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBtZWFuaW5nIHRoZXkgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBJbnRlcmVzdGluZy4uLiBub3csIHdoZXJlIGlzIGBkZ3JhbV9nZXRzb2Nrb3B0YCBiZWluZyAqdXNlZCo/IFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvc29ja2V0LmM9NzkzPXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODMzLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6ODM0OnN0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTgzNS17XG4tLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODcxLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6ODcyOnN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04NzMtXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04ODQtXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYzo4ODU6XHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODg2LVx0aWYgKGVycilcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz05Njg9c3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X2RncmFtX3Byb3QgPSB7XG4tLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtOTgxLVx0LmlvY3RsXHRcdD0gZGdyYW1faW9jdGwsXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYzo5ODI6XHQuZ2V0c29ja29wdFx0PSBkZ3JhbV9nZXRzb2Nrb3B0LFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtOTgzLVx0LnNldHNvY2tvcHRcdD0gZGdyYW1fc2V0c29ja29wdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBnZXRzb2Nrb3B0IEZ1bmN0aW9uIENhbGwgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBnZXRzb2Nrb3B0YCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBpZWVlODAyMTU0X2RncmFtX3Byb3RgLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBgLmdldHNvY2tvcHRgLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIHRoYXQgd291bGQgYmUgYmV0dGVyIHRvIGZvY3VzIG9uLiBOb3BlLCBgZGdyYW1fZ2V0c29ja29wdGAgKmlzKiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSXQmIzM5O3Mgc3RhdGljLCB5ZXMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCB0cnkgdG8gaW5saW5lIGl0LCBzbyBJIGNhbiBzYWZlbHkgZm9jdXMgbXkgZWZmb3J0cyB0aGVyZS4KCkFoLCByaWdodCwgYGllZWU4MDIxNTRfZGdyYW1fcHJvdGAgaXMgYSBgc3RydWN0IHByb3RvYC4gVGhpcyBtZWFucyB0aGUgKmFjdHVhbCogc3lzY2FsbCBlbnRyeSBwb2ludCBpcyBhIGNoYWluIG9mIGNhbGxzOiBgc3lzX2dldHNvY2tvcHRgIC0mZ3Q7IGBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0YCAtJmd0OyBgc2stJmd0O3NrX3Byb3QtJmd0O2dldHNvY2tvcHRgLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgZGlnZ2luZyBpbnRvIGBkZ3JhbV9nZXRzb2Nrb3B0YCBpcyB0aGUgcmlnaHQgbW92ZSwgc2luY2UgaXQmIzM5O3MgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHByb3RvY29sIGFuZCwgYXMgY29uZmlybWVkLCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0IGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBkb2luZyBpbiBjb21wYXJpc29uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXd2Nl9nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmM9MTAzMT1zdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L3Jhdy5jLTEwNTMtXG5uZXQvaXB2Ni9yYXcuYzoxMDU0OnN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9pcHY2L3Jhdy5jLTEwNTUte1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTEwODgtXG5uZXQvaXB2Ni9yYXcuYzoxMDg5OnN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaXB2Ni9yYXcuYy0xMDkwLVx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC9pcHY2L3Jhdy5jLTExMTUtXG5uZXQvaXB2Ni9yYXcuYzoxMTE2Olx0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbm5ldC9pcHY2L3Jhdy5jLTExMTctXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvcmF3LmMtMTIxNi1cdC5zZXRzb2Nrb3B0XHQgICA9IHJhd3Y2X3NldHNvY2tvcHQsXG5uZXQvaXB2Ni9yYXcuYzoxMjE3Olx0LmdldHNvY2tvcHRcdCAgID0gcmF3djZfZ2V0c29ja29wdCxcbm5ldC9pcHY2L3Jhdy5jLTEyMTgtXHQuc2VuZG1zZ1x0ICAgPSByYXd2Nl9zZW5kbXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTExOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGlnZ2luZyBpbnRvIFNvY2tldCBPcHRpb25zKioKCk9rYXksIHNvIGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1bnVzdWFsLCBidXQgSSBrbm93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYmVjYXVzZSBzb21lb25lLCBzb21ld2hlcmUsIGlzIHRha2luZyBpdHMgYWRkcmVzcy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFdoeSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBnZXR0aW5nIGFkZHJlc3NlZD8gVGhpcyBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIG91dHNpZGUgb2YgaXRzIGludGVuZGVkIHNjb3BlLCBwcm9iYWJseSB0aHJvdWdoIHNvbWUgZnVuY3Rpb24gcG9pbnRlciB0cmlja2VyeSBvciBwb3NzaWJseSBzb21lIHNvcnQgb2YgbGlicmFyeSBpbmplY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcGl2b3QgdG8gaW52ZXN0aWdhdGluZyBgcGVwX2dldHNvY2tvcHRgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmtpbmcgZnVuY3Rpb25zLCBpdCYjMzk7cyByZWFzb25hYmxlIHRvIHN1c3BlY3QgdGhhdCB0aGUgcHJvYmxlbSBpcyBlaXRoZXIgd2l0aCB0aGUgY2FsbGluZyBjb2RlLCBvciB0aGUgY29kZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbGF0dGVyIHdvcmtzLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmb3JtZXIgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHNoZWRzIGFueSBsaWdodCBvbiB0aGUgc2l0dWF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZGVsZWdhdGlvbiBvciBmb3J3YXJkaW5nIGhlcmUsIG9yIG1heWJlIGV2ZW4gYSBkaXJlY3QgY2FsbCBpZiB3ZSYjMzk7cmUgKnJlYWxseSogbHVja3ksIHdoaWNoIHdvdWxkIHNob3cgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgcGVwX2dldHNvY2tvcHRgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdG8gbG9vayBmb3IgY2x1ZXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGByYXd2Nl9nZXRzb2Nrb3B0YCBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVwX2dldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGhvbmV0L3BlcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9waG9uZXQvcGVwLmM9MTAxOT1zdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvcGhvbmV0L3BlcC5jLTEwODAtXG5uZXQvcGhvbmV0L3BlcC5jOjEwODE6c3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9waG9uZXQvcGVwLmMtMTA4Mi17XG4tLVxubmV0L3Bob25ldC9wZXAuYy0xMTE1LVxubmV0L3Bob25ldC9wZXAuYzoxMTE2OnN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3Bob25ldC9wZXAuYy0xMTE3LVx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC9waG9uZXQvcGVwLmMtMTEyOC1cbm5ldC9waG9uZXQvcGVwLmM6MTEyOTpcdGVyciA9IGRvX3BlcF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xubmV0L3Bob25ldC9wZXAuYy0xMTMwLVx0aWYgKGVycilcbi0tXG5uZXQvcGhvbmV0L3BlcC5jPTEzODA9c3RhdGljIHN0cnVjdCBwcm90byBwZXBfcHJvdG8gPSB7XG4tLVxubmV0L3Bob25ldC9wZXAuYy0xMzg2LVx0LnNldHNvY2tvcHRcdD0gcGVwX3NldHNvY2tvcHQsXG5uZXQvcGhvbmV0L3BlcC5jOjEzODc6XHQuZ2V0c29ja29wdFx0PSBwZXBfZ2V0c29ja29wdCxcbm5ldC9waG9uZXQvcGVwLmMtMTM4OC1cdC5zZW5kbXNnXHQ9IHBlcF9zZW5kbXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gU29ja2V0IE9wdGlvbnMqKgoKT2theSwgc28gYHBlcF9nZXRzb2Nrb3B0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBJIHNlZSB0aGF0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb2RlIHNtZWxsLCB1c3VhbGx5IG1lYW5pbmcgaXQmIzM5O3MgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIHJlc3RyaWN0ZWQgdG8uIExldCBtZSBxdWlja2x5IHBpdm90LiBMZXQmIzM5O3Mgc2VlIGlmIHNvbWV0aGluZyBzaW1pbGFyIGlzIGhhcHBlbmluZyB3aXRoIGB0bHNfZ2V0c29ja29wdGAuIFBlcmhhcHMgdGhpcyBpcyBhIG1vcmUgd2lkZXNwcmVhZCBpc3N1ZSB3aXRoIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLCBhbmQgSSBjYW4gcXVpY2tseSBhc2NlcnRhaW4gYSBwYXR0ZXJuLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdGxzX2dldHNvY2tvcHRgIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYz0zOTk9c3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy00MjYtXG5uZXQvdGxzL3Rsc19tYWluLmM6NDI3OnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpXG5uZXQvdGxzL3Rsc19tYWluLmMtNDI4LXtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNDg1LVxubmV0L3Rscy90bHNfbWFpbi5jOjQ4NjpzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG5uZXQvdGxzL3Rsc19tYWluLmMtNDg3LXtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNTAxLVxubmV0L3Rscy90bHNfbWFpbi5jOjUwMjpzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxubmV0L3Rscy90bHNfbWFpbi5jLTUwMy17XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTUyNS1cbm5ldC90bHMvdGxzX21haW4uYzo1MjY6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxubmV0L3Rscy90bHNfbWFpbi5jLTUyNy17XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTU0Mi1cbm5ldC90bHMvdGxzX21haW4uYzo1NDM6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC90bHMvdGxzX21haW4uYy01NDQte1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy01NTEtXHRjYXNlIFRMU19SWDpcbm5ldC90bHMvdGxzX21haW4uYzo1NTI6XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTUzLVx0XHRicmVhaztcbm5ldC90bHMvdGxzX21haW4uYy01NTQtXHRjYXNlIFRMU19UWF9aRVJPQ09QWV9STzpcbm5ldC90bHMvdGxzX21haW4uYzo1NTU6XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTU2LVx0XHRicmVhaztcbm5ldC90bHMvdGxzX21haW4uYy01NTctXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxubmV0L3Rscy90bHNfbWFpbi5jOjU1ODpcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTU5LVx0XHRicmVhaztcbm5ldC90bHMvdGxzX21haW4uYy01NjAtXHRjYXNlIFRMU19UWF9NQVhfUEFZTE9BRF9MRU46XG5uZXQvdGxzL3Rsc19tYWluLmM6NTYxOlx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHQpO1xubmV0L3Rscy90bHNfbWFpbi5jLTU2Mi1cdFx0YnJlYWs7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTU3Mi1cbm5ldC90bHMvdGxzX21haW4uYzo1NzM6c3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvdGxzL3Rsc19tYWluLmMtNTc0LVx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy01ODctXG5uZXQvdGxzL3Rsc19tYWluLmM6NTg4Olx0ZXJyID0gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTg5LVx0aWYgKGVycilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDAyLVx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLnNldHNvY2tvcHRcdD0gdGxzX3NldHNvY2tvcHQ7XG5uZXQvdGxzL3Rsc19tYWluLmM6MTAwMzpcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5nZXRzb2Nrb3B0XHQ9IHRsc19nZXRzb2Nrb3B0O1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMDQtXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZGlzY29ubmVjdFx0PSB0bHNfZGlzY29ubmVjdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNvY2tldCBPcHRpb24gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gYHRsc19nZXRzb2Nrb3B0YCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYnV0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAsIGByYXd2Nl9nZXRzb2Nrb3B0YCwgYHBlcF9nZXRzb2Nrb3B0YCwgYW5kLCBvZiBjb3Vyc2UsIGB0bHNfZ2V0c29ja29wdGAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBGb3IgYHJhd3Y2X2dldHNvY2tvcHRgLCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYENPTkZJR19JUFY2YC4gRm9yIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19JRUVFODAyMTU0YCBhbmQgYENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVGAuIGBwZXBfZ2V0c29ja29wdGAgcmVxdWlyZXMgYENPTkZJR19QSE9ORVRgLiBBbmQgZm9yIGB0bHNfZ2V0c29ja29wdGAsIHdlIG5lZWQgYENPTkZJR19UTFNgLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYElFRUU4MDIxNTRfU09DS0VUYC4gWWVwLCBhcyBleHBlY3RlZCwgaXQgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAuIEdvb2QuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIGBQSE9ORVRgIGFuZCBgVExTYCwgYW5kIHRoZXkgYXJlIGp1c3QgYFBIT05FVGAgYW5kIGBUTFNgLCByZXNwZWN0aXZlbHkuCgpOb3cgSSBuZWVkIHRvIHJlLXZlcmlmeSB0aGUgZGVwZW5kZW5jeSBvbiBgSVBWNmAuIFllcCwgd2UmIzM5O3JlIHN0aWxsIGdvb2QgdGhlcmUuCgpJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgbHVya2luZz8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIGZpbGUgYWdhaW4uLi5BaCwgbm8sIGl0IGxvb2tzIGxpa2UgYE1BQzgwMjE1NGAgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAsIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIE9rYXksIHRoYXQgc2VlbXMgdG8gYmUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg1NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBEZXBlbmRlbmN5IExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIHNvbWUgZGVwZW5kZW5jaWVzIGRlZmluZWQgaW4gYG5ldC9pZWVlODAyMTU0L0tjb25maWdgLCByaWdodD8gSSBtZWFuLCBldmVyeXRoaW5nICpzaG91bGQqIGhhdmUgc29tZSBsZXZlbCBvZiBjb25kaXRpb25hbCBpbmNsdXNpb24gYmFzZWQgb24gZmVhdHVyZXMgb3IgaGFyZHdhcmXigKYgQnV0IHRoZXJlJiMzOTtzICpub3RoaW5nKiB0aGVyZT8gTm8gYGRlcGVuZHMgb25gIGNsYXVzZXM/IFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgSSYjMzk7bGwgYWRtaXQsIGFuZCBhIHBvdGVudGlhbCBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHdvcnRoIGludmVzdGlnYXRpbmcuIEFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCByZWFkIHRoaXMgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uIFRoaXMgaXMgbGlrZWx5IHRvIHRlbGwgbWUgd2hldGhlciB0aGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBiZSB1bml2ZXJzYWxseSBhdmFpbGFibGUgb3Igd2hldGhlciBzb21ldGhpbmcgZGVlcGVyIGhhcyBnb25lIGF3cnkuIEkgYmV0IHRoaXMgaXMgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgSUVFRTgwMjE1NFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xuICAgNjpcdFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xuICAgNzpcdFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cbiAgIDg6XHRcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxuICAgOTpcdFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIExSLVdQQU4gc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cbiAgMTI6XHRcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLlxuICAxMzpcdFxuICAxNDpcdGlmIElFRUU4MDIxNTRcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbiAgMTc6XHRcdGJvb2wgXCYjMzQ7SUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XCYjMzQ7XG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcJiMzNDtcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxuICAyNjpcdFx0ICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUNcbiAgMjc6XHRcdCAgaGVhZGVyIGZyb20gdXNlcnNwYWNlLlxuICAyODpcdFxuICAyOTpcdHNvdXJjZSBcJiMzNDtuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4KCioqTmF2aWdhdGluZyB0aGUgV2lyZWxlc3MgTmV0d29yayBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGVzZSBuZXR3b3JrIHN0YW5kYXJkcywgc3BlY2lmaWNhbGx5IGBJRUVFODAyMTU0YCBhbmQgaXRzIHNvY2tldCBpbnRlcmZhY2UsIGBJRUVFODAyMTU0X1NPQ0tFVGAuIFdoZXJlIGRvIHRoZXNlIGZpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHN0YXJ0aW5nIHdpdGggYG5ldC9waG9uZXQvS2NvbmZpZ2AuIExldCYjMzk7cyBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgaG93IHRoaXMgc3RhY2sgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGhvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQaG9uZXQgcHJvdG9jb2xcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBIT05FVFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UGhvbmV0IHByb3RvY29scyBmYW1pbHlcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhlIFBob25lIE5ldHdvcmsgcHJvdG9jb2wgKFBob05ldCkgaXMgYSBwYWNrZXQtb3JpZW50ZWRcbiAgMTA6XHRcdCAgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZXZlbG9wZWQgYnkgTm9raWEgZm9yIHVzZSB3aXRoIGl0cyBtb2RlbXMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgZm9yIE1hZW1vIHRvIHVzZSBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eSAoaWZcbiAgMTM6XHRcdCAgc3VwcG9ydGVkKS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byBjb250cm9sIE5va2lhIHBob25lc1xuICAxNDpcdFx0ICBmcm9tIGEgTGludXggY29tcHV0ZXIsIGFsdGhvdWdoIEFUIGNvbW1hbmRzIG1heSBiZSBlYXNpZXIgdG8gdXNlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHBob25ldC4gSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBub3RlczoKCioqRm9jdXNpbmcgaW4gb24gTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHByb21wdCBzZWVtcyB0byBiZSBoaW50aW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrLCBhbmQgdGhlIHRlcm0gYFBIT05FVGAgcHJvYmFibHkgcmVsYXRlcyB0byBzb21lIHVuZGVybHlpbmcgc3RydWN0dXJlIEkgbmVlZCB0byBjb25maWd1cmUuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gYG5ldC90bHMvS2NvbmZpZ2AgaXMgYSByZWFsbHkgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgdGhpcyBsaWtlbHkgZGVmaW5lcyB0aGUgb3B0aW9ucyBhbmQgc2V0dGluZ3MgcmVsYXRlZCB0byBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9mIG5ldHdvcmsgc2VjdXJpdHkgc3RhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRMUyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBUTFNcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXG4gIDE1Olx0XHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXG4gIDE2Olx0XG4gIDE3Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBUTFNfREVWSUNFXG4gIDIwOlx0XHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFRMU1xuICAyMjpcdFx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiAgMjM6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMjQ6XHRcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBIVyBvZmZsb2FkIG9mIHRoZSBUTFMgcHJvdG9jb2wuXG4gIDI4Olx0XG4gIDI5Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVExTIENvbnRleHQgQ2hlY2sqKgoKQWxyaWdodCwgc3RyYWlnaHQgdG8gdGhlIHBvaW50OiBgVExTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQsIGFuZCBxdWlja2x5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNwYWNlLiBTcGVjaWZpY2FsbHksIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgYXMgaXQmIzM5O3MgdGhlIHNlY3Rpb24gZ292ZXJuaW5nIElQdjYgbmV0d29ya2luZywgYW5kIFRMUyBvZnRlbiBkZWFscyB3aXRoIHNlY3VyZSBjb25uZWN0aW9ucyBvdmVyIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGNvbmZpZyBmaWxlIHRvIHByb3ZpZGUgaW5zaWdodCBvbiByZWxldmFudCBrZXJuZWwgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgVExTYC4gUGVyaGFwcyB0aGlzIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gc2VjdXJpdHkgb3B0aW9ucyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBUTFNgIHN1cHBvcnQgaXMgY29uZGl0aW9uYWwsIGFuZCBpZiBzbywgd2hhdCB0cmlnZ2VycyBpdC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjQ5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZ2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24gZm9yIElQdjYqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG9iamVjdGl2ZSBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYGdldHNvY2tvcHRgIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIGBJUFY2YC4gTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGUga2V5IG9uZXMgYXJlIGBJRUVFODAyMTU0YCwgYElFRUU4MDIxNTRfU09DS0VUYCwgYElQVjZgLCBgUEhPTkVUYCwgYW5kIGBUTFNgLiBOb3csIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMsIEkgaGF2ZSB0aGVzZTogYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLgoKV2FpdCBhIG1pbnV0ZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkLiBBaGEsIEkgc2VlIGEgYnVuY2ggb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBkb19kZ3JhbV9nZXRzb2Nrb3B0YCwgYGRvX3Jhd3Y2X2dldHNvY2tvcHRgLCBgZG9fcGVwX2dldHNvY2tvcHRgLCBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmAsIGBkb190bHNfZ2V0c29ja29wdF90eF96Y2AsIGBkb190bHNfZ2V0c29ja29wdF9ub19wYWRgLCBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLCBhbmQgYGRvX3Rsc19nZXRzb2Nrb3B0YC4KClRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIHRoZSBjb3JyZWN0IG9uZXMgdG8gY29uc2lkZXIgYXJlIGRlZmluaXRlbHkgYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLgoKTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgZGdyYW1fZ2V0c29ja29wdGAuIExldCBtZSBjaGVjayBpZiBpdCYjMzk7cyB0aGUgb25seSBvbmUgb2YgaXRzIHR5cGUgaW4gYG5ldC9pZWVlODAyMTU0L3NvY2tldC5jYC4gSG9sZCBvbi4uLiB0aGVyZSYjMzk7cyBhbHNvIGByYXdfZ2V0c29ja29wdGA/IEhtbSwgdGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGByYXdfZ2V0c29ja29wdGAgaXMgd2hhdCBJIHRoaW5rIGl0IGlzIGFuZCB0aGF0IGl0IGhhc24mIzM5O3QgYmVlbiByZWNlbnRseSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2dldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zNjI9c3RhdGljIHZvaWQgaWVlZTgwMjE1NF9yYXdfZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTM4MS1cbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjM4MjpzdGF0aWMgaW50IHJhd19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTM4My1cdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zOTQ9c3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X3Jhd19wcm90ID0ge1xuLS1cbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTQwNS1cdC5kaXNjb25uZWN0XHQ9IHJhd19kaXNjb25uZWN0LFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6NDA2Olx0LmdldHNvY2tvcHRcdD0gcmF3X2dldHNvY2tvcHQsXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy00MDctXHQuc2V0c29ja29wdFx0PSByYXdfc2V0c29ja29wdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzOTIKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBzY2FuIHNob3dzIHRoYXQgdGhlIHBhdGNoIGRpZG4mIzM5O3QgdG91Y2ggYW55dGhpbmcgb3V0c2lkZSBvZiBgZGdyYW1fZ2V0c29ja29wdGAgZGlyZWN0bHkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIG90aGVyIGZpbGVzIG1lbnRpb25lZCwgc3BlY2lmaWNhbGx5LCBJIGNhbiBzZWUgbW9kaWZpY2F0aW9ucyB0byBgcmF3djZfZ2V0c29ja29wdGAgaW4gYG5ldC9pcHY2L3Jhdy5jYCwgYHBlcF9nZXRzb2Nrb3B0YCBpbiBgbmV0L3Bob25ldC9wZXAuY2AsIGFuZCBgdGxzX2dldHNvY2tvcHRgIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaG9zZSBhcmUgdGhlIG1haW4gZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBJdCBhcHBlYXJzIHRoYXQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY2AgaXMganVzdCBhIHRlc3QgZmlsZSwgc28gbm8gbmVlZCB0byBkZWx2ZSBmdXJ0aGVyIGludG8gdGhhdCBmb3IgZnV6emluZyBzY29wZS4KClNvLCBqdXN0IHRvIGJlIGNyeXN0YWwgY2xlYXIsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaGVyZSBhcmUgYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLgoKTm93IGZvciB0aGUgY29uZmlncy4uLiBCYXNlZCBvbiB0aGUgZnVuY3Rpb25zLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgSUVFRTgwMjE1NGAsIGBJRUVFODAyMTU0X1NPQ0tFVGAsIGBJUFY2YCwgYFBIT05FVGAsIGFuZCBgVExTYC4gSnVzdCBkb3VibGUtY2hlY2tpbmcgbXkgYXNzdW1wdGlvbnMsIHllcywgYFRMU2AgZG9lcyBpbmRlZWQgZGVwZW5kIG9uIGBJTkVUYCwgd2hpY2ggaXMgYWx3YXlzIGVuYWJsZWQsIHNvIG5vIG5lZWQgdG8gd29ycnkgdGhlcmUuIE5laXRoZXIgYFBIT05FVGAgbm9yIGBJRUVFODAyMTU0YCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gYElQVjZgIGFsc28gaGFzIG5vIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHB1cnBvc2VzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzIHRvIGB0bHNfZ2V0c29ja29wdGAgb3RoZXIgdGhhbiBgQ09ORklHX1RMU2AuCgpSaWdodCwgbGV0JiMzOTtzIHJlY2FwIG15IHRob3VnaHQgcHJvY2Vzcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXZlcmFsIGBnZXRzb2Nrb3B0YCBoYW5kbGVycyDigJMgc3BlY2lmaWNhbGx5IGZvciBJRUVFIDgwMi4xNS40IGRncmFtLCBJUHY2IHJhdywgUGhvbmV0IFBFUCwgYW5kIFRMUyBzb2NrZXRzLiBJdCYjMzk7cyBtb3ZpbmcgdGhlbSB0byB1c2UgdGhlIG5ldyBgc29ja29wdF90YCBpbnRlcmZhY2UgYW5kIGBjb3B5X3RvX2l0ZXJgIGluc3RlYWQgb2YgYGNvcHlfdG9fdXNlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHVzZXIgc3BhY2UgcmVhZHMgc29ja2V0IG9wdGlvbnMsIGFuZCBpdCBhZmZlY3RzIHNvbWUgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGZ1enogdGhlc2UgYGdldHNvY2tvcHRgIGhhbmRsZXJzIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIHNvbGlkIGFuZCBmcmVlIG9mIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfU09DS0VUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UEhPTkVUJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RncmFtX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfU09DS0VUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UEhPTkVUJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RncmFtX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NDcuMTUxMjY3MjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyNDU1MTI0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicGVwX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25zIGZvciBJRUVFIDgwMi4xNS40IGRncmFtLCBJUHY2IHJhdywgUGhvbmV0IFBFUCwgYW5kIFRMUyBzb2NrZXRzIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCBpbnRlcmZhY2UgYW5kIGNvcHlfdG9faXRlciBpbnN0ZWFkIG9mIGNvcHlfdG9fdXNlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgcmVhZCBieSB1c2VyIHNwYWNlLCBhbmQgaXQgYWZmZWN0cyBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2xzLiBGdXp6aW5nIHRoZXNlIGdldHNvY2tvcHQgaGFuZGxlcnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgY29udmVyc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NDcuMTUxMjc3NjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAzNzAwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNDcyNGE1NDg2ZjJiN2U5OThhMzcwMDVkZmJiNjY3ODFkZmZiZTJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcXG5pbmRleCA4NWRjZTI5NmQ3NTEzOS4uNWEzNmU4Nzg5M2Y2NDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcXG4rKysgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xcbkBAIC04MzEsMjAgKzgzMSwxMiBAQCBzdGF0aWMgaW50IGllZWU4MDIxNTRfZGdyYW1fZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX2RncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spO1xcbi1cXG4gXFx0aW50IHZhbCwgbGVuO1xcbiBcXG4tXFx0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxcbi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFxuLVxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSk7XFxuK1xcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIG9wdC1cXHUwMDNlb3B0bGVuKTtcXG4gXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiBcXHRjYXNlIFdQQU5fV0FOVEFDSzpcXG5AQCAtODcxLDEwICs4NjMsMzIgQEAgc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcXG4rXFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBsZW47XFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbCwgbGVuLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWwsIGxlbikpXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbitcXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbit7XFxuK1xcdHNvY2tvcHRfdCBvcHQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IGRvX2RncmFtX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uYzM2MTUyZDIyOTViODkgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcXG4rKysgYi9uZXQvaXB2Ni9yYXcuY1xcbkBAIC0xMDUxLDE0ICsxMDUxLDEyIEBAIHN0YXRpYyBpbnQgcmF3djZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdHJldHVybiBkb19yYXd2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTtcXG4gXFx0aW50IHZhbCwgbGVuO1xcbiBcXG4tXFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgSVBWNl9IRFJJTkNMOlxcbkBAIC0xMDgwLDExICsxMDc4LDEwIEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XFxuK1xcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIGxlbik7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWwsIGxlbikpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTEwOTIsNiArMTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuK1xcdHNvY2tvcHRfdCBvcHQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbiBcXHRzd2l0Y2ggKGxldmVsKSB7XFxuIFxcdGNhc2UgU09MX1JBVzpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExMDksNyArMTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gZG9fcmF3djZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG5kaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmNcXG5pbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xcbisrKyBiL25ldC9waG9uZXQvcGVwLmNcXG5AQCAtMTA3OCwxNyArMTA3OCwxMSBAQCBzdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLVxcdFxcdFxcdFxcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcXG4gXFx0aW50IGxlbiwgdmFsO1xcbiBcXG4tXFx0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXFxuLVxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgUE5QSVBFX0VOQ0FQOlxcbiBcXHRcXHR2YWwgPSBwbi1cXHUwMDNlaWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FO1xcbkBAIC0xMTEyLDExICsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiBcXHR9XFxuIFxcbi1cXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihpbnQpLCBsZW4pO1xcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbitcXHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXFx1MDAzZW9wdGxlbik7XFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXFxuK3tcXG4rXFx0c29ja29wdF90IG9wdDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxcbitcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbitcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xcbmluZGV4IDhjNTg4Y2RhYjczM2RhLi5mYmIyNzQyODdhYTVmMiAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5AQCAtNDI0LDIwICs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRyZXR1cm4gbWFzaztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgX191c2VyICpvcHRsZW4sIGludCB0eClcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcXG4gXFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIFxcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvO1xcbiBcXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XFxuLVxcdGludCBsZW47XFxuK1xcdGludCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKCFvcHR2YWwgfHwgKGxlbiBcXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xcbitcXHRpZiAoIW9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1ZiB8fCBsZW4gXFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xcbiBcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTQ2Miw3ICs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxcbitcXHRcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcXG4gXFx0XFx0XFx0cmMgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC00NzgsNDQgKzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRtZW1jcHkoY3J5cHRvX2luZm9fcmVjX3NlcShjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MpLFxcbiBcXHQgICAgICAgY2N0eC1cXHUwMDNlcmVjX3NlcSwgY2lwaGVyX2Rlc2MtXFx1MDAzZXJlY19zZXEpO1xcbiBcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8pKVxcbitcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8sXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvKVxcbiBcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiBcXHR1bnNpZ25lZCBpbnQgdmFsdWU7XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHZhbHVlID0gY3R4LVxcdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi1cXHRcXHRcXHRcXHQgICAgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbi1cXHRpbnQgdmFsdWUsIGxlbjtcXG4rXFx0aW50IHZhbHVlLCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZih2YWx1ZSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNTI1LDM4ICs1MTYsMzEgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRpZiAodmFsdWUgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsdWU7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSkpKVxcbitcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IHNpemVvZih2YWx1ZSk7XFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXFxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gXFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW47XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZihwYXlsb2FkX2xlbikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcXG4rXFx0aWYgKGNvcHlfdG9faXRlcihcXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbiksXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtNTY1LDE3ICs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBUTFNfVFg6XFxuIFxcdGNhc2UgVExTX1JYOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbitcXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyYyA9IC1FTk9QUk9UT09QVDtcXG5AQCAtNTkxLDEyICs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbitcXHRzb2Nrb3B0X3Qgb3B0O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXFxuIFxcdFxcdHJldHVybiBjdHgtXFx1MDAzZXNrX3Byb3RvLVxcdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gXFxuLVxcdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXFxuaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbkBAIC0yOCw3ICsyOCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWNtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGxzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBBRl9WU09DS1xcbkBAIC00MCw2ICs0Myw0NSBAQFxcbiAjaWZuZGVmIElDTVBfRklMVEVSXFxuICNkZWZpbmUgSUNNUF9GSUxURVIgMVxcbiAjZW5kaWZcXG4rI2lmbmRlZiBJUFY2X0hEUklOQ0xcXG4rI2RlZmluZSBJUFY2X0hEUklOQ0wgMzZcXG4rI2VuZGlmXFxuKyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxcbisjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gN1xcbisjZW5kaWZcXG4rI2lmbmRlZiBBRl9JRUVFODAyMTU0XFxuKyNkZWZpbmUgQUZfSUVFRTgwMjE1NCAzNlxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxcbisjZGVmaW5lIFNPTF9JRUVFODAyMTU0IDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgV1BBTl9XQU5UQUNLXFxuKyNkZWZpbmUgV1BBTl9XQU5UQUNLIDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgQUZfUEhPTkVUXFxuKyNkZWZpbmUgQUZfUEhPTkVUIDM1XFxuKyNlbmRpZlxcbisjaWZuZGVmIFNPTF9QTlBJUEVcXG4rI2RlZmluZSBTT0xfUE5QSVBFIDI3NVxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTl9QUk9UT19QSVBFXFxuKyNkZWZpbmUgUE5fUFJPVE9fUElQRSAyXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUFxcbisjZGVmaW5lIFBOUElQRV9FTkNBUCAxXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUgMFxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcXG4rI2RlZmluZSBQTlBJUEVfRU5DQVBfSVAgMVxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfVExTXFxuKyNkZWZpbmUgU09MX1RMUyAyODJcXG4rI2VuZGlmXFxuKyNpZm5kZWYgVENQX1VMUFxcbisjZGVmaW5lIFRDUF9VTFAgMzFcXG4rI2VuZGlmXFxuIFxcbiAvKiAtLS0tLS0tLS0tIG5ldGxpbmsgLS0tLS0tLS0tLSAqL1xcbiBcXG5AQCAtMzk0LDQgKzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXFxuIFxcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4gfVxcbiBcXG4rLyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocmF3djYpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChyYXd2NilcXG4re1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZWZkIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHJhd3Y2KVxcbit7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK31cXG4rXFxuK1RFU1RfRihyYXd2NiwgaGRyaW5jbF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcXG4rICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxcbisgKi9cXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi9cXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9FUSgtMSwgdmFsKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIDB4N2ZmZiwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKGllZWU4MDIxNTQpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChpZWVlODAyMTU0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1xcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19vdmVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdGNoYXIgYnVmWzE2XSA9IHt9O1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKDIsIG9wdGxlbik7XFxuK31cXG4rXFxuK1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqL1xcbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1JBVywgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocGhvbmV0KVxcbit7XFxuK1xcdGludCBmZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAocGhvbmV0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX1BIT05FVCBwaXBlIHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHBob25ldClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XFxuK31cXG4rXFxuK1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuXFxuKyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXFxuKyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxcbisgKi9cXG4rVEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbjtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXFxuK1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKHRscylcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdGludCBzZmQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKHRscylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYSA9IHtcXG4rXFx0XFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcXG4rXFx0fTtcXG4rXFx0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XFxuK1xcdGludCBsZmQ7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IC0xO1xcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSAtMTtcXG4rXFxuK1xcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChsZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRDUCBzb2NrZXQ6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmEsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHxcXG4rXFx0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhLCBcXHUwMDI2YWxlbikpIHtcXG4rXFx0XFx0Y2xvc2UobGZkKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJsaXN0ZW5lciBzZXR1cDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHR9XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNvbm5lY3Qoc2VsZi1cXHUwMDNlZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YSwgc2l6ZW9mKGEpKSkge1xcbitcXHRcXHRjbG9zZShsZmQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImNvbm5lY3Q6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcXG4rXFx0Y2xvc2UobGZkKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiVENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXFxcIixcXG4rXFx0XFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHRscylcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZXNmZCk7XFxuK31cXG4rXFxuKy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXFxuK1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcXG4rXFx0aW50IHZhbCA9IC0xO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcXG4rfVxcbitcXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZVxcbisgKiBjb252ZXJ0ZWQgY29kZSB0ZXN0cyBvcHQtXFx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxcbisgKi9cXG4rVEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuK1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGNoYXIgYnVmWzJdO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuKy8qIFRMU19UWCBiZWZvcmUgY3J5cHRvIGlzIHNldCByZXBvcnRzIG5vdC1yZWFkeS4gKi9cXG4rVEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFxcdTAwMjZpbmZvLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFQlVTWSwgZXJybm8pO1xcbit9XFxuK1xcbisvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZ1xcbisgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXFxuKyAqL1xcbitURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApXFxuK3tcXG4rXFx0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0ge1xcbitcXHRcXHQuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLFxcbitcXHRcXHQuaW5mby5jaXBoZXJfdHlwZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xcbitcXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGJhc2U7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2dHgsIHNpemVvZih0eCkpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZihiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXFx1MDAyNmJhc2UsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTtcXG4rXFx0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2ZnVsbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjQ3Ljg5Mjc4MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDUwMzk4MTg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X1NPQ0tFVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiUEhPTkVUXCIsXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZ3JhbV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJyYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJwZXBfZ2V0c29ja29wdFwiLFxuICAgIFwidGxzX2dldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDcyNGE1NDg2ZjJiN2U5OThhMzcwMDVkZmJiNjY3ODFkZmZiZTJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMjE6MTc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG5pbmRleCA4NWRjZTI5NmQ3NTEzOS4uNWEzNmU4Nzg5M2Y2NDcgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuKysrIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbkBAIC04MzEsMjAgKzgzMSwxMiBAQCBzdGF0aWMgaW50IGllZWU4MDIxNTRfZGdyYW1fZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7XG4tXG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcbitcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIG9wdC1cdTAwM2VvcHRsZW4pO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFdQQU5fV0FOVEFDSzpcbkBAIC04NzEsMTAgKzg2MywzMiBAQCBzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2dmFsLCBsZW4pKVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4rXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbit7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbitcbitcdGlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fZGdyYW1fZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuY1xuaW5kZXggM2NjNTg2OThjYmJkM2EuLmMzNjE1MmQyMjk1Yjg5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcbisrKyBiL25ldC9pcHY2L3Jhdy5jXG5AQCAtMTA1MSwxNCArMTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTtcbiBcdGludCB2YWwsIGxlbjtcbiBcbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0bGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBJUFY2X0hEUklOQ0w6XG5AQCAtMTA4MCwxMSArMTA3OCwxMCBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbitcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIGxlbik7XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWwsIGxlbikpXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuK1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEwOTIsNiArMTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbitcbiBcdHN3aXRjaCAobGV2ZWwpIHtcbiBcdGNhc2UgU09MX1JBVzpcbiBcdFx0YnJlYWs7XG5AQCAtMTEwOSw3ICsxMTA5LDE4IEBAIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiBpcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gZG9fcmF3djZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmF3djZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG5kaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmNcbmluZGV4IDcwNjkyNzEzOTM5MzNlLi43ZWY0YTlhMjQwZWY4YyAxMDA2NDRcbi0tLSBhL25ldC9waG9uZXQvcGVwLmNcbisrKyBiL25ldC9waG9uZXQvcGVwLmNcbkBAIC0xMDc4LDE3ICsxMDc4LDExIEBAIHN0YXRpYyBpbnQgcGVwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0XHRjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcbiBcdGludCBsZW4sIHZhbDtcbiBcbi1cdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuLVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgUE5QSVBFX0VOQ0FQOlxuIFx0XHR2YWwgPSBwbi1cdTAwM2VpZmluZGV4ID8gUE5QSVBFX0VOQ0FQX0lQIDogUE5QSVBFX0VOQ0FQX05PTkU7XG5AQCAtMTExMiwxMSArMTEwNiwzMyBAQCBzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcdH1cbiBcbi1cdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuK1x0bGVuID0gdW1pbihzaXplb2YoaW50KSwgb3B0LVx1MDAzZW9wdGxlbik7XG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuK1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgb3B0dmFsKSlcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbitcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbit7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbitcbitcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuK1x0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuK1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggOGM1ODhjZGFiNzMzZGEuLmZiYjI3NDI4N2FhNWYyIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC00MjQsMjAgKzQyNCwxNiBAQCBzdGF0aWMgX19wb2xsX3QgdGxzX3NrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgaW50IF9fdXNlciAqb3B0bGVuLCBpbnQgdHgpXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eClcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0Y29uc3Qgc3RydWN0IHRsc19jaXBoZXJfZGVzYyAqY2lwaGVyX2Rlc2M7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvO1xuIFx0c3RydWN0IGNpcGhlcl9jb250ZXh0ICpjY3R4O1xuLVx0aW50IGxlbjtcbitcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRpZiAoIW9wdHZhbCB8fCAobGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkpIHtcbitcdGlmICghb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgfHwgbGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ2Miw3ICs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0fVxuIFxuIFx0aWYgKGxlbiA9PSBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xuLVx0XHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgY3J5cHRvX2luZm8sIHNpemVvZigqY3J5cHRvX2luZm8pKSlcbitcdFx0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbyksXG4rXHRcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcbiBcdFx0XHRyYyA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ3OCw0NCArNDc1LDM4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRtZW1jcHkoY3J5cHRvX2luZm9fcmVjX3NlcShjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MpLFxuIFx0ICAgICAgIGNjdHgtXHUwMDNlcmVjX3NlcSwgY2lwaGVyX2Rlc2MtXHUwMDNlcmVjX3NlcSk7XG4gXG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKSlcbitcdGlmIChjb3B5X3RvX2l0ZXIoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvLFxuK1x0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKVxuIFx0XHRyYyA9IC1FRkFVTFQ7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHR1bnNpZ25lZCBpbnQgdmFsdWU7XG4tXHRpbnQgbGVuO1xuLVxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpbnQgbGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdGlmIChsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR2YWx1ZSA9IGN0eC1cdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbi1cdGludCB2YWx1ZSwgbGVuO1xuK1x0aW50IHZhbHVlLCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiAhPSBUTFNfMV8zX1ZFUlNJT04pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC01MjUsMzggKzUxNiwzMSBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRpZiAodmFsdWUgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWx1ZTtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YodmFsdWUpLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHZhbHVlKTtcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSksIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVx1MDAzZXR4X21heF9wYXlsb2FkX2xlbjtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKHBheWxvYWRfbGVuKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHBheWxvYWRfbGVuKSwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbikpKVxuK1x0b3B0LVx1MDAzZW9wdGxlbiA9IHNpemVvZihwYXlsb2FkX2xlbik7XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnBheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pLFxuK1x0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZihwYXlsb2FkX2xlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHQgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTY1LDE3ICs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFRMU19UWDpcbiBcdGNhc2UgVExTX1JYOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxuLVx0XHRcdFx0XHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xuK1x0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVExTX1RYX1pFUk9DT1BZX1JPOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7XG4rXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfUlhfRVhQRUNUX05PX1BBRDpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG4rXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmMgPSAtRU5PUFJPVE9PUFQ7XG5AQCAtNTkxLDEyICs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChsZXZlbCAhPSBTT0xfVExTKVxuIFx0XHRyZXR1cm4gY3R4LVx1MDAzZXNrX3Byb3RvLVx1MDAzZWdldHNvY2tvcHQoc2ssIGxldmVsLFxuIFx0XHRcdFx0XHRcdCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gXG4tXHRyZXR1cm4gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2NyeXB0b19pbmZvKGNvbnN0IHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbkBAIC0yOCw3ICsyOCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtX3NvY2tldHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbiBcbiAjaWZuZGVmIEFGX1ZTT0NLXG5AQCAtNDAsNiArNDMsNDUgQEBcbiAjaWZuZGVmIElDTVBfRklMVEVSXG4gI2RlZmluZSBJQ01QX0ZJTFRFUiAxXG4gI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0hEUklOQ0xcbisjZGVmaW5lIElQVjZfSERSSU5DTCAzNlxuKyNlbmRpZlxuKyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxuKyNkZWZpbmUgSVBWNl9DSEVDS1NVTSA3XG4rI2VuZGlmXG4rI2lmbmRlZiBBRl9JRUVFODAyMTU0XG4rI2RlZmluZSBBRl9JRUVFODAyMTU0IDM2XG4rI2VuZGlmXG4rI2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxuKyNkZWZpbmUgU09MX0lFRUU4MDIxNTQgMFxuKyNlbmRpZlxuKyNpZm5kZWYgV1BBTl9XQU5UQUNLXG4rI2RlZmluZSBXUEFOX1dBTlRBQ0sgMFxuKyNlbmRpZlxuKyNpZm5kZWYgQUZfUEhPTkVUXG4rI2RlZmluZSBBRl9QSE9ORVQgMzVcbisjZW5kaWZcbisjaWZuZGVmIFNPTF9QTlBJUEVcbisjZGVmaW5lIFNPTF9QTlBJUEUgMjc1XG4rI2VuZGlmXG4rI2lmbmRlZiBQTl9QUk9UT19QSVBFXG4rI2RlZmluZSBQTl9QUk9UT19QSVBFIDJcbisjZW5kaWZcbisjaWZuZGVmIFBOUElQRV9FTkNBUFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQIDFcbisjZW5kaWZcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXG4rI2RlZmluZSBQTlBJUEVfRU5DQVBfTk9ORSAwXG4rI2VuZGlmXG4rI2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcbisjZGVmaW5lIFBOUElQRV9FTkNBUF9JUCAxXG4rI2VuZGlmXG4rI2lmbmRlZiBTT0xfVExTXG4rI2RlZmluZSBTT0xfVExTIDI4MlxuKyNlbmRpZlxuKyNpZm5kZWYgVENQX1VMUFxuKyNkZWZpbmUgVENQX1VMUCAzMVxuKyNlbmRpZlxuIFxuIC8qIC0tLS0tLS0tLS0gbmV0bGluayAtLS0tLS0tLS0tICovXG4gXG5AQCAtMzk0LDQgKzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXG4gXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4gfVxuIFxuKy8qIC0tLS0tLS0tLS0gcmF3IChpcHY2KSAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShyYXd2Nilcbit7XG4rXHRpbnQgZmQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKHJhd3Y2KVxuK3tcbitcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfUkFXLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiU09DS19SQVcvSVB2NiBzb2NrZXQ6ICVzXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04ocmF3djYpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX2V4YWN0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbitcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbitcdFx0XHRcdGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rfVxuK1xuKy8qIFJhdyBpbnQgb3B0aW9ucyBjbGFtcCB0aGUgcmVwb3J0ZWQgbGVuZ3RoIGRvd24gdG8gdGhlIHVzZXIgYnVmZmVyXG4rICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxuKyAqL1xuK1RFU1RfRihyYXd2NiwgaGRyaW5jbF91bmRlcnNpemVfY2xhbXBlZClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihyYXd2NiwgY2hlY2tzdW1fZGVmYXVsdClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdC8qIEEgbm9uLUlDTVB2NiByYXcgc29ja2V0IGhhcyB0aGUgY2hlY2tzdW0gZGlzYWJsZWQsIHJlcG9ydGVkIGFzIC0xLiAqL1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0NIRUNLU1VNLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbitcdEFTU0VSVF9FUSgtMSwgdmFsKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBiYWRfb3B0bmFtZSlcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0LyogU09MX1JBVyByZWFjaGVzIGRvX3Jhd3Y2X2dldHNvY2tvcHQoKSBkaXJlY3RseS4gKi9cbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogLS0tLS0tLS0tLSBpZWVlODAyMTU0IChkZ3JhbSkgLS0tLS0tLS0tLSAqL1xuK1xuK0ZJWFRVUkUoaWVlZTgwMjE1NClcbit7XG4rXHRpbnQgZmQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGllZWU4MDIxNTQpXG4re1xuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JRUVFODAyMTU0LCBTT0NLX0RHUkFNLCAwKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJBRl9JRUVFODAyMTU0IGRncmFtIHNvY2tldDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihpZWVlODAyMTU0KVxuK3tcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX2V4YWN0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xuK31cbitcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19vdmVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdGNoYXIgYnVmWzE2XSA9IHt9O1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbitcdFx0XHRcdGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX3VuZGVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUSgyLCBvcHRsZW4pO1xuK31cbitcbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX29wdG5hbWUpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWw7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgMHg3ZmZmLFxuK1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogZGdyYW1fZ2V0c29ja29wdCgpIHJlamVjdHMgYW55IGxldmVsIG90aGVyIHRoYW4gU09MX0lFRUU4MDIxNTQuICovXG4rVEVTVF9GKGllZWU4MDIxNTQsIGJhZF9sZXZlbClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIFdQQU5fV0FOVEFDSyxcbitcdFx0XHRcdCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVPUE5PVFNVUFAsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogLS0tLS0tLS0tLSBwaG9uZXQgKHBlcCkgLS0tLS0tLS0tLSAqL1xuK1xuK0ZJWFRVUkUocGhvbmV0KVxuK3tcbitcdGludCBmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAocGhvbmV0KVxuK3tcbitcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfUEhPTkVULCBTT0NLX1NFUVBBQ0tFVCwgUE5fUFJPVE9fUElQRSk7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiQUZfUEhPTkVUIHBpcGUgc29ja2V0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHBob25ldClcbit7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuK31cbitcbitURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbCA9IC0xO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IFBOUElQRV9FTkNBUF9OT05FIHx8IHZhbCA9PSBQTlBJUEVfRU5DQVBfSVApO1xuK31cbitcbitURVNUX0YocGhvbmV0LCBlbmNhcF9vdmVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdGNoYXIgYnVmWzE2XSA9IHt9O1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgUE5QSVBFX0VOQ0FQLFxuK1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbit9XG4rXG4rLyogcGVwIGNsYW1wcyB0aGUgcmVwb3J0ZWQgbGVuZ3RoIGRvd24gdG8gdGhlIHVzZXIgYnVmZmVyLiBVc2UgYW5cbisgKiBpbnQtc2l6ZWQgYmFja2luZyBidWZmZXIgd2l0aCBhIHNob3J0IG9wdGxlbiBzbyB0aGUgYmFzZWxpbmUga2VybmVsLFxuKyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxuKyAqL1xuK1RFU1RfRihwaG9uZXQsIGVuY2FwX3VuZGVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihwaG9uZXQsIGJhZF9vcHRuYW1lKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4rfVxuK1xuKy8qIHBlcF9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfUE5QSVBFLiAqL1xuK1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRSh0bHMpXG4re1xuK1x0aW50IGZkO1xuK1x0aW50IHNmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAodGxzKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGEpO1xuK1x0aW50IGxmZDtcbitcbitcdHNlbGYtXHUwMDNlZmQgPSAtMTtcbitcdHNlbGYtXHUwMDNlc2ZkID0gLTE7XG4rXG4rXHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGxmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiVENQIHNvY2tldDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGlmIChiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHxcbitcdCAgICBnZXRzb2NrbmFtZShsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBcdTAwMjZhbGVuKSkge1xuK1x0XHRjbG9zZShsZmQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJsaXN0ZW5lciBzZXR1cDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGNvbm5lY3Qoc2VsZi1cdTAwM2VmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIHNpemVvZihhKSkpIHtcbitcdFx0Y2xvc2UobGZkKTtcbitcdFx0U0tJUChyZXR1cm4sIFwiY29ubmVjdDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdHNlbGYtXHUwMDNlc2ZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7XG4rXHRjbG9zZShsZmQpO1xuK1x0aWYgKHNldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwidGxzXCIsIHNpemVvZihcInRsc1wiKSkpXG4rXHRcdFNLSVAocmV0dXJuLCBcIlRDUF9VTFA9dGxzOiAlcyAoYnVpbHQgd2l0aG91dCBUTFM/KVwiLFxuK1x0XHQgICAgIHN0cmVycm9yKGVycm5vKSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04odGxzKVxuK3tcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rXHRpZiAoc2VsZi1cdTAwM2VzZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZXNmZCk7XG4rfVxuK1xuKy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfZXhhY3QpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xuK1x0aW50IHZhbCA9IC0xO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbitcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbit9XG4rXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbDtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXG4rXHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcbit9XG4rXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZVxuKyAqIGNvbnZlcnRlZCBjb2RlIHRlc3RzIG9wdC1cdTAwM2VpdGVyX291dC51YnVmIGluIHBsYWNlIG9mIG9wdHZhbC5cbisgKi9cbitURVNUX0YodGxzLCBjb25mX251bGxfb3B0dmFsKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSA2NDtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIE5VTEwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuK31cbitcbitURVNUX0YodGxzLCBjb25mX3Nob3J0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0Y2hhciBidWZbMl07XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBidWYsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuK31cbitcbisvKiBUTFNfVFggYmVmb3JlIGNyeXB0byBpcyBzZXQgcmVwb3J0cyBub3QtcmVhZHkuICovXG4rVEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpXG4re1xuK1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbmZvKTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNmluZm8sIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVCVVNZLCBlcnJubyk7XG4rfVxuK1xuKy8qIFNldCBUWCBjcnlwdG8sIHRoZW4gcmVhZCBpdCBiYWNrIGF0IHRoZSBiYXNlIGFuZCBmdWxsIHNpemVzLCBleGVyY2lzaW5nXG4rICogYm90aCBjb3B5X3RvX2l0ZXIoKSBicmFuY2hlcy4gU0tJUCBpZiBBRVMtR0NNIGlzIHVuYXZhaWxhYmxlLlxuKyAqL1xuK1RFU1RfRih0bHMsIGNvbmZfY3J5cHRvX3JvdW5kdHJpcClcbit7XG4rXHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggdHggPSB7XG4rXHRcdC5pbmZvLnZlcnNpb24gPSBUTFNfMV8yX1ZFUlNJT04sXG4rXHRcdC5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOCxcbitcdH07XG4rXHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggZnVsbDtcbitcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gYmFzZTtcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXG4rXHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNnR4LCBzaXplb2YodHgpKSlcbitcdFx0U0tJUChyZXR1cm4sIFwic2V0IFRMU19UWCBhZXNfZ2NtXzEyODogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdG9wdGxlbiA9IHNpemVvZihiYXNlKTtcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2YmFzZSwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGJhc2UpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTtcbitcdEFTU0VSVF9FUShUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LCBiYXNlLmNpcGhlcl90eXBlKTtcbitcbitcdG9wdGxlbiA9IHNpemVvZihmdWxsKTtcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2ZnVsbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGZ1bGwuaW5mby5jaXBoZXJfdHlwZSk7XG4rfVxuK1xuK1RFU1RfRih0bHMsIGJhZF9vcHRuYW1lKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcbitcdGludCB2YWw7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo0Ny44OTI3ODU1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzg3MTM5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBHZXRzb2Nrb3B0IFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBob3cgdGhlIGtlcm5lbCdzIGBnZXRzb2Nrb3B0YCBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB1c2VyIHNwYWNlLiBJIHNlZSBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIG5ldHdvcmsgc3Vic3lzdGVtczogYGllZWU4MDIxNTRgLCBgaXB2NiByYXdgLCBgcGhvbmV0YCwgYW5kIGB0bHNgLiBUaGUgcGF0dGVybiBpcyBjb25zaXN0ZW50OiB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSByZWZhY3RvcmluZyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9ucy4gSW5zdGVhZCBvZiBkaXJlY3RseSBkZWFsaW5nIHdpdGggYGNoYXIgX191c2VyICpvcHR2YWxgIGFuZCBgaW50IF9fdXNlciAqb3B0bGVuYCwgaXQncyBzd2l0Y2hpbmcgdG8gYSBgc29ja29wdF90ICpvcHRgIGFwcHJvYWNoIGFuZCBlbXBsb3lpbmcgZnVuY3Rpb25zIGxpa2UgYHNvY2tvcHRfaW5pdF91c2VyYCBhbmQgYGNvcHlfdG9faXRlcmAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYSB1bmlmaWVkIGZyYW1ld29yayBmb3Igc29ja2V0IG9wdGlvbnMsIGxpa2VseSBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMuIEknbSBzcGVjdWxhdGluZyBCUEYgaW50ZWdyYXRpb24sIGlvX3VyaW5nIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsbHkganVzdCBhIGdlbmVyYWwgY2xlYW51cCBvZiB0aGlzIGludGVyZmFjZS5cblxuQmVjYXVzZSBpdCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSAoaG93IGRhdGEgaXMgY29waWVkIG91dCBvZiB0aGUga2VybmVsIHdpdGggYGdldHNvY2tvcHRgKSwgdGhpcyBpcyBvYnZpb3VzbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhhdCBtZWFucyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHJlZmFjdG9yLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZXNlIHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2U6XG5cbiogICBgbmV0L2llZWU4MDIxNTQvc29ja2V0LmNgIHJlcXVpcmVzIGJvdGggYENPTkZJR19JRUVFODAyMTU0YCBhbmQgYENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVGBcbiogICBgbmV0L2lwdjYvcmF3LmNgIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfSVBWNmBcbiogICBgbmV0L3Bob25ldC9wZXAuY2AgcmVsaWVzIG9uIGBDT05GSUdfUEhPTkVUYFxuKiAgIGBuZXQvdGxzL3Rsc19tYWluLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19UTFNgXG5cbkknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmVhY2ggb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1NS4yMzE1MDEyNDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0Mjk3ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MTQ9aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjU1LjMzNTgwNTg1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTU3NDY4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJRUVFIDgwMi4xNS40IENvbnRleHQgYW5kIFNvY2tldCBBYnN0cmFjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgSUVFRTgwMjE1NGAgYW5kIGBJRUVFODAyMTU0X1NPQ0tFVGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGNvbnNpZGVyaW5nIGEgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIChMUi1XUEFOKSBpbXBsZW1lbnRhdGlvbi4gSSdtIGxpa2VseSBkZWFsaW5nIHdpdGggY29kZSBvciBhIHN5c3RlbSB0aGF0J3MgYnVpbHQgb24gdG9wIG9mIG9yIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZSBJRUVFIDgwMi4xNS40IHN0YW5kYXJkLiBUaGUgc3RhbmRhcmQgaXRzZWxmIGRlZmluZXMgdGhlIHBoeXNpY2FsIGFuZCBNQUMgbGF5ZXJzLCBzbyBJJ20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIFJGIHByb3RvY29sLlxuXG5UaGUgcHJlc2VuY2Ugb2YgYF9TT0NLRVRgIHN1Z2dlc3RzIHdlIGFyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYW4gYWJzdHJhY3Rpb24gbGF5ZXIuIFNwZWNpZmljYWxseSwgSSBpbWFnaW5lIGEgc29mdHdhcmUgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSA4MDIuMTUuNCByYWRpbyBpbiBhIG1vcmUgY29udmVuaWVudCwgYXBwbGljYXRpb24tZnJpZW5kbHkgd2F5LCBzaW1pbGFyIHRvIGhvdyBzdGFuZGFyZCBUQ1AvSVAgc29ja2V0cyB3b3JrIGZvciBFdGhlcm5ldCBvciB0aGUgSW50ZXJuZXQuIFRoaXMgc29ja2V0IGFic3RyYWN0aW9uIHNob3VsZCBhYnN0cmFjdCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgZnJhbWUgZm9ybWF0dGluZywgYWRkcmVzc2luZywgYW5kIGFja25vd2xlZGdlIGhhbmRsaW5nLCBvZmZlcmluZyBhIHNpbXBsZXIgcHJvZ3JhbW1pbmcgbW9kZWwuIFdlIG1pZ2h0IGJlIHVzaW5nIGEgZnJhbWV3b3JrIGxpa2UgQ29udGlraSwgVGlueU9TLCBvciBzb21ldGhpbmcgY3VzdG9tLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGdvYWwgaXMgdG8gZWZmaWNpZW50bHkgaGFuZGxlIGRhdGEgdHJhbnNmZXIgYW5kIGNvbW11bmljYXRpb24gb3ZlciBhIGxvdy1wb3dlciwgc2hvcnQtcmFuZ2Ugd2lyZWxlc3MgbmV0d29yay4gVGhlIHNwZWNpZmljcyB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1OC44OTE1NTc0MTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzgwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSE9ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Bob25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9waG9uZXQvS2NvbmZpZy01LVxcbm5ldC9waG9uZXQvS2NvbmZpZzo2OmNvbmZpZyBQSE9ORVRcXG5uZXQvcGhvbmV0L0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGhvbmV0IHByb3RvY29scyBmYW1pbHlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjU5LjAzMTk0MzgwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzE3OTgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUEhPTkVUIGFuZCB0aGUgTnVhbmNlcyBvZiBMaW5ndWlzdGljIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBzbyBcIlBIT05FVC5cIiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyBpbnRvIHRoZSBjaGFsbGVuZ2VzIGFuZCBjb21wbGV4aXRpZXMuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwaG9ub2xvZ2ljYWwgbmV0d29yaywgYnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqaG93KiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZW5jb2RlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBmZWF0dXJlLWJhc2VkIHJlcHJlc2VudGF0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IElzIGl0IGEgc3RyaWN0LCBydWxlLWdvdmVybmVkIHN5c3RlbSwgb3IgZG9lcyBpdCBpbmNvcnBvcmF0ZSBzb21lIGRlZ3JlZSBvZiBwcm9iYWJpbGlzdGljIHdlaWdodGluZywgcmVmbGVjdGluZyB0aGUgZ3JhZGllbnQgbmF0dXJlIG9mIHBob25ldGljIHJlYWxpemF0aW9uP1xuXG5UaGUgdGVybSBicmluZ3MgdXAgYSBob3N0IG9mIHN1Yi1xdWVzdGlvbnM6IHdoYXQncyB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24/IElzIHRoaXMgYSBwdXJlbHkgdGhlb3JldGljYWwgY29uc3RydWN0LCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGEgbW9kZWwgZ3JvdW5kZWQgaW4gZW1waXJpY2FsIGRhdGEsIGxpa2UgYWNvdXN0aWMgbWVhc3VyZW1lbnRzIG9yIGFydGljdWxhdG9yeSBkYXRhPyBJcyB0aGUgZ29hbCBkZXNjcmlwdGl2ZSwgYXR0ZW1wdGluZyB0byBjYXB0dXJlIHRoZSBvYnNlcnZlZCBwYXR0ZXJucywgb3IgZ2VuZXJhdGl2ZSwgYWltaW5nIHRvIHByZWRpY3Qgbm92ZWwgc291bmQgcGF0dGVybnMgYW5kIHZhcmlhdGlvbnM/IFdlIGhhdmUgdG8gbG9vayBhdCB0aGUgbWV0aG9kcyBlbXBsb3llZDogSXMgdGhpcyBhIGhhbmQtY3JhZnRlZCBzeXN0ZW0sIG9yIHNvbWV0aGluZyB0aGF0IGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgbGVhcm5lZD8gV2hhdCBhcmUgdGhlIGRhdGEgc2V0cyB0aGUgbmV0d29yayBpcyBiYXNlZCBvbj9cblxuSSBhbHNvIHdhbnQgdG8ga25vdyBob3cgdGhlIG5ldHdvcmsgaGFuZGxlcyB2YXJpYXRpb25zLiBJcyBpdCBkZXNpZ25lZCB0byBhY2NvbW1vZGF0ZSBkaWFsZWN0YWwgZGlmZmVyZW5jZXMgYW5kIHRoZSBpbmhlcmVudCB2YXJpYWJpbGl0eSBvZiBzcGVlY2ggcHJvZHVjdGlvbj8gSG93IHdlbGwgZG9lcyBpdCBleHBsYWluIHBoZW5vbWVuYSBsaWtlIGFsbG9waG9ueSwgYXNzaW1pbGF0aW9uLCBhbmQgbmV1dHJhbGl6YXRpb24/IERvZXMgaXQgY29uc2lkZXIgdGhlIHByb3NvZGljIHN0cnVjdHVyZT9cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgZmFzY2luYXRpbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29ubmVjdGluZyBwaG9ub2xvZ3kgd2l0aCBwaG9uZXRpY3MuIFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHBlcmNlcHRpb24gYW5kIHByb2R1Y3Rpb24gaW5mb3JtIHRoZXNlIG5ldHdvcmtzLlxuV2UgbXVzdCBsb29rIGF0IGltcGxlbWVudGF0aW9uLiBXaGF0IGtpbmQgb2YgYWxnb3JpdGhtIHVuZGVycGlucyBpdD8gV2hhdCBhcmUgdGhlIGNvbnN0cmFpbnRzLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zP1xuXG5JbiB0aGUgZW5kLCB3aGF0IGluc2lnaHRzIGNhbiB0aGlzIHN0cnVjdHVyZSBvZmZlcj8gRG9lcyBpdCBjaGFsbGVuZ2UgZXhpc3RpbmcgcGhvbm9sb2dpY2FsIHRoZW9yeSwgb3IgZG9lcyBpdCBwcm92aWRlIGEgbmV3IHdheSBvZiBmb3JtYWxpemluZyBvdXIgdW5kZXJzdGFuZGluZz8gSXMgdGhlIG1vZGVsIGdlbmVyYWxpemFibGUgYWNyb3NzIGxhbmd1YWdlcz8gSSBjYW4ndCB3YWl0IHRvIHNlZSBob3cgdGhlIFwiUEhPTkVUXCIgc3lzdGVtIGFkZHJlc3NlcyB0aGVzZSBjcnVjaWFsIHF1ZXN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjAzLjE2Mzc0NTMxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQxNzg1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy9LY29uZmlnLTQtI1xcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTgtXFxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowMy4yNjc5MzExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTEyNDAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvY2tldCBvcHRpb24gaW1wbGVtZW50YXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgYFRMU2AuIGBJUHY2YCBpcyB1c3VhbGx5IG9uLCBidXQgd2UgY2FuIGRlZmluaXRlbHkgaW5jb3Jwb3JhdGUgaXQuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAgd2l0aGluIGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGByYXd2Nl9nZXRzb2Nrb3B0YCBmcm9tIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgZmluYWxseSwgYHRsc19nZXRzb2Nrb3B0YCBsb2NhdGVkIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLlxuXG5MZXQncyBzdGFydCBieSB2ZXJpZnlpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGRncmFtX2dldHNvY2tvcHRgLiBJcyBpdCBleHBvcnRlZCBvciBzdGF0aWM/IEFoLCB0aGUgcGF0Y2ggaW5kaWNhdGVzIGl0J3MgYHN0YXRpY2AuIEhvbGQgb24sIHRoZSBwcm9tcHQgYWR2aXNlcyB1cyB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhvc2Ugc3RhdGljIG9uZXMgZ2V0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBtZWFuaW5nIHRoZXkgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBJbnRlcmVzdGluZy4uLiBub3csIHdoZXJlIGlzIGBkZ3JhbV9nZXRzb2Nrb3B0YCBiZWluZyAqdXNlZCo/IFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjAwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjA3Ljc5OTA3MzY3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzgzMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRncmFtX2dldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2llZWU4MDIxNTQvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvc29ja2V0LmM9NzkzPXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04MzMtXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6ODM0OnN0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04MzUte1xcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODcxLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjg3MjpzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTg3My1cXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODg0LVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjg4NTpcXHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcXHUwMDI2b3B0KTtcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04ODYtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jPTk2OD1zdGF0aWMgc3RydWN0IHByb3RvIGllZWU4MDIxNTRfZGdyYW1fcHJvdCA9IHtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTk4MS1cXHQuaW9jdGxcXHRcXHQ9IGRncmFtX2lvY3RsLFxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjk4MjpcXHQuZ2V0c29ja29wdFxcdD0gZGdyYW1fZ2V0c29ja29wdCxcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy05ODMtXFx0LnNldHNvY2tvcHRcXHQ9IGRncmFtX3NldHNvY2tvcHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjA3Ljg5OTQ2NDczOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIxNzkwMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZ2V0c29ja29wdCBGdW5jdGlvbiBDYWxsIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGdldHNvY2tvcHRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGllZWU4MDIxNTRfZGdyYW1fcHJvdGAuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGAuZ2V0c29ja29wdGAsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSdzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnZvbHZlZCB0aGF0IHdvdWxkIGJlIGJldHRlciB0byBmb2N1cyBvbi4gTm9wZSwgYGRncmFtX2dldHNvY2tvcHRgICppcyogdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHNwZWNpZmljIHByb3RvY29sLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEl0J3Mgc3RhdGljLCB5ZXMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIHdvbid0IHRyeSB0byBpbmxpbmUgaXQsIHNvIEkgY2FuIHNhZmVseSBmb2N1cyBteSBlZmZvcnRzIHRoZXJlLlxuXG5BaCwgcmlnaHQsIGBpZWVlODAyMTU0X2RncmFtX3Byb3RgIGlzIGEgYHN0cnVjdCBwcm90b2AuIFRoaXMgbWVhbnMgdGhlICphY3R1YWwqIHN5c2NhbGwgZW50cnkgcG9pbnQgaXMgYSBjaGFpbiBvZiBjYWxsczogYHN5c19nZXRzb2Nrb3B0YCAtXHUwMDNlIGBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0YCAtXHUwMDNlIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWdldHNvY2tvcHRgLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBkaWdnaW5nIGludG8gYGRncmFtX2dldHNvY2tvcHRgIGlzIHRoZSByaWdodCBtb3ZlLCBzaW5jZSBpdCdzIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBhbmQsIGFzIGNvbmZpcm1lZCwgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCdzIGEgc29saWQgdW5kZXJzdGFuZGluZy5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0IGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBkb2luZyBpbiBjb21wYXJpc29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoxMi40MjEyNTg3NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzk4MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3Jhdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3Jhdy5jPTEwMzE9c3RhdGljIGludCByYXd2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEwNTMtXFxubmV0L2lwdjYvcmF3LmM6MTA1NDpzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxubmV0L2lwdjYvcmF3LmMtMTA1NS17XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0xMDg4LVxcbm5ldC9pcHY2L3Jhdy5jOjEwODk6c3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvaXB2Ni9yYXcuYy0xMDkwLVxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTExNS1cXG5uZXQvaXB2Ni9yYXcuYzoxMTE2OlxcdGVyciA9IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbm5ldC9pcHY2L3Jhdy5jLTExMTctXFx0aWYgKGVycilcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0xMjE2LVxcdC5zZXRzb2Nrb3B0XFx0ICAgPSByYXd2Nl9zZXRzb2Nrb3B0LFxcbm5ldC9pcHY2L3Jhdy5jOjEyMTc6XFx0LmdldHNvY2tvcHRcXHQgICA9IHJhd3Y2X2dldHNvY2tvcHQsXFxubmV0L2lwdjYvcmF3LmMtMTIxOC1cXHQuc2VuZG1zZ1xcdCAgID0gcmF3djZfc2VuZG1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTIuNTM1MjQ4NzM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODg4ODY3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gYHJhd3Y2X2dldHNvY2tvcHRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHVudXN1YWwsIGJ1dCBJIGtub3cgaXQncyBiZWluZyB1c2VkIGJlY2F1c2Ugc29tZW9uZSwgc29tZXdoZXJlLCBpcyB0YWtpbmcgaXRzIGFkZHJlc3MuIFRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFdoeSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBnZXR0aW5nIGFkZHJlc3NlZD8gVGhpcyBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGl0J3MgYmVpbmcgYWNjZXNzZWQgb3V0c2lkZSBvZiBpdHMgaW50ZW5kZWQgc2NvcGUsIHByb2JhYmx5IHRocm91Z2ggc29tZSBmdW5jdGlvbiBwb2ludGVyIHRyaWNrZXJ5IG9yIHBvc3NpYmx5IHNvbWUgc29ydCBvZiBsaWJyYXJ5IGluamVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBiZWluZyB1c2VkLlxuXG5BbHJpZ2h0LCBsZXQncyBwaXZvdCB0byBpbnZlc3RpZ2F0aW5nIGBwZXBfZ2V0c29ja29wdGAuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBmdW5jdGlvbnMsIGl0J3MgcmVhc29uYWJsZSB0byBzdXNwZWN0IHRoYXQgdGhlIHByb2JsZW0gaXMgZWl0aGVyIHdpdGggdGhlIGNhbGxpbmcgY29kZSwgb3IgdGhlIGNvZGUgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbGF0dGVyIHdvcmtzLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZvcm1lciBhcyB3ZWxsLiBMZXQncyBzZWUgaWYgdGhpcyBzaGVkcyBhbnkgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4gSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZGVsZWdhdGlvbiBvciBmb3J3YXJkaW5nIGhlcmUsIG9yIG1heWJlIGV2ZW4gYSBkaXJlY3QgY2FsbCBpZiB3ZSdyZSAqcmVhbGx5KiBsdWNreSwgd2hpY2ggd291bGQgc2hvdyB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYHBlcF9nZXRzb2Nrb3B0YCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIGxvb2sgZm9yIGNsdWVzIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgcmF3djZfZ2V0c29ja29wdGAgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTE5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTYuMDI0MTM4NjkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1MzY1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVwX2dldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Bob25ldC9wZXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGhvbmV0L3BlcC5jPTEwMTk9c3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcGhvbmV0L3BlcC5jLTEwODAtXFxubmV0L3Bob25ldC9wZXAuYzoxMDgxOnN0YXRpYyBpbnQgZG9fcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxubmV0L3Bob25ldC9wZXAuYy0xMDgyLXtcXG4tLVxcbm5ldC9waG9uZXQvcGVwLmMtMTExNS1cXG5uZXQvcGhvbmV0L3BlcC5jOjExMTY6c3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L3Bob25ldC9wZXAuYy0xMTE3LVxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L3Bob25ldC9wZXAuYy0xMTI4LVxcbm5ldC9waG9uZXQvcGVwLmM6MTEyOTpcXHRlcnIgPSBkb19wZXBfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxubmV0L3Bob25ldC9wZXAuYy0xMTMwLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvcGhvbmV0L3BlcC5jPTEzODA9c3RhdGljIHN0cnVjdCBwcm90byBwZXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvcGhvbmV0L3BlcC5jLTEzODYtXFx0LnNldHNvY2tvcHRcXHQ9IHBlcF9zZXRzb2Nrb3B0LFxcbm5ldC9waG9uZXQvcGVwLmM6MTM4NzpcXHQuZ2V0c29ja29wdFxcdD0gcGVwX2dldHNvY2tvcHQsXFxubmV0L3Bob25ldC9wZXAuYy0xMzg4LVxcdC5zZW5kbXNnXFx0PSBwZXBfc2VuZG1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTYuMTM1NjgxMDk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTE2NjI1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gU29ja2V0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBgcGVwX2dldHNvY2tvcHRgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IEkgc2VlIHRoYXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQncyBhIGNsYXNzaWMgY29kZSBzbWVsbCwgdXN1YWxseSBtZWFuaW5nIGl0J3MgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0J3Mgc3VwcG9zZWQgdG8gYmUgcmVzdHJpY3RlZCB0by4gTGV0IG1lIHF1aWNrbHkgcGl2b3QuIExldCdzIHNlZSBpZiBzb21ldGhpbmcgc2ltaWxhciBpcyBoYXBwZW5pbmcgd2l0aCBgdGxzX2dldHNvY2tvcHRgLiBQZXJoYXBzIHRoaXMgaXMgYSBtb3JlIHdpZGVzcHJlYWQgaXNzdWUgd2l0aCB0aGUgc29ja2V0IG9wdGlvbiBoYW5kbGluZywgYW5kIEkgY2FuIHF1aWNrbHkgYXNjZXJ0YWluIGEgcGF0dGVybi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4gTGV0J3Mgc2VlIGhvdyBgdGxzX2dldHNvY2tvcHRgIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTkuMzg3MzQ3NjM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4OTg3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2dldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX21haW4uYz0zOTk9c3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTQyNi1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NDI3OnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpXFxubmV0L3Rscy90bHNfbWFpbi5jLTQyOC17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNDg1LVxcbm5ldC90bHMvdGxzX21haW4uYzo0ODY6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbm5ldC90bHMvdGxzX21haW4uYy00ODcte1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTUwMS1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NTAyOnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXFxubmV0L3Rscy90bHNfbWFpbi5jLTUwMy17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNTI1LVxcbm5ldC90bHMvdGxzX21haW4uYzo1MjY6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbm5ldC90bHMvdGxzX21haW4uYy01Mjcte1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTU0Mi1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NTQzOnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxubmV0L3Rscy90bHNfbWFpbi5jLTU0NC17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNTUxLVxcdGNhc2UgVExTX1JYOlxcbm5ldC90bHMvdGxzX21haW4uYzo1NTI6XFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHQsIG9wdG5hbWUgPT0gVExTX1RYKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTUzLVxcdFxcdGJyZWFrO1xcbm5ldC90bHMvdGxzX21haW4uYy01NTQtXFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XFxubmV0L3Rscy90bHNfbWFpbi5jOjU1NTpcXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHQpO1xcbm5ldC90bHMvdGxzX21haW4uYy01NTYtXFx0XFx0YnJlYWs7XFxubmV0L3Rscy90bHNfbWFpbi5jLTU1Ny1cXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxcbm5ldC90bHMvdGxzX21haW4uYzo1NTg6XFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTU1OS1cXHRcXHRicmVhaztcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTYwLVxcdGNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjpcXG5uZXQvdGxzL3Rsc19tYWluLmM6NTYxOlxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTU2Mi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy01NzItXFxubmV0L3Rscy90bHNfbWFpbi5jOjU3MzpzdGF0aWMgaW50IHRsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTc0LVxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTU4Ny1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NTg4OlxcdGVyciA9IGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcXHUwMDI2b3B0KTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTg5LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMDItXFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLnNldHNvY2tvcHRcXHQ9IHRsc19zZXRzb2Nrb3B0O1xcbm5ldC90bHMvdGxzX21haW4uYzoxMDAzOlxcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5nZXRzb2Nrb3B0XFx0PSB0bHNfZ2V0c29ja29wdDtcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAwNC1cXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZGlzY29ubmVjdFxcdD0gdGxzX2Rpc2Nvbm5lY3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjE5LjUzNTI1MzY1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk5NTU3MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTb2NrZXQgT3B0aW9uIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gYHRsc19nZXRzb2Nrb3B0YCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYnV0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAsIGByYXd2Nl9nZXRzb2Nrb3B0YCwgYHBlcF9nZXRzb2Nrb3B0YCwgYW5kLCBvZiBjb3Vyc2UsIGB0bHNfZ2V0c29ja29wdGAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRm9yIGByYXd2Nl9nZXRzb2Nrb3B0YCwgaXQncyBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYENPTkZJR19JUFY2YC4gRm9yIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgd2UnbGwgbmVlZCBgQ09ORklHX0lFRUU4MDIxNTRgIGFuZCBgQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUYC4gYHBlcF9nZXRzb2Nrb3B0YCByZXF1aXJlcyBgQ09ORklHX1BIT05FVGAuIEFuZCBmb3IgYHRsc19nZXRzb2Nrb3B0YCwgd2UgbmVlZCBgQ09ORklHX1RMU2AuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYElFRUU4MDIxNTRfU09DS0VUYC4gWWVwLCBhcyBleHBlY3RlZCwgaXQgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAuIEdvb2QuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgYFBIT05FVGAgYW5kIGBUTFNgLCBhbmQgdGhleSBhcmUganVzdCBgUEhPTkVUYCBhbmQgYFRMU2AsIHJlc3BlY3RpdmVseS5cblxuTm93IEkgbmVlZCB0byByZS12ZXJpZnkgdGhlIGRlcGVuZGVuY3kgb24gYElQVjZgLiBZZXAsIHdlJ3JlIHN0aWxsIGdvb2QgdGhlcmUuXG5cbkkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBsdXJraW5nPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4uLkFoLCBubywgaXQgbG9va3MgbGlrZSBgTUFDODAyMTU0YCBkZXBlbmRzIG9uIGBJRUVFODAyMTU0YCwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gT2theSwgdGhhdCBzZWVtcyB0byBiZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjUuMzM0ODE0NDg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNzkyMTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjUuNDQxMTAxNzQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTE0NjEyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgc29tZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AsIHJpZ2h0PyBJIG1lYW4sIGV2ZXJ5dGhpbmcgKnNob3VsZCogaGF2ZSBzb21lIGxldmVsIG9mIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBiYXNlZCBvbiBmZWF0dXJlcyBvciBoYXJkd2FyZeKApiBCdXQgdGhlcmUncyAqbm90aGluZyogdGhlcmU/IE5vIGBkZXBlbmRzIG9uYCBjbGF1c2VzPyBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgSSdsbCBhZG1pdCwgYW5kIGEgcG90ZW50aWFsIGluZGljYXRvciBvZiBzb21ldGhpbmcgd29ydGggaW52ZXN0aWdhdGluZy4gQWxyaWdodCwgbGV0J3MganVzdCBnbyBhaGVhZCBhbmQgcmVhZCB0aGlzIGZpbGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uIFRoaXMgaXMgbGlrZWx5IHRvIHRlbGwgbWUgd2hldGhlciB0aGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBiZSB1bml2ZXJzYWxseSBhdmFpbGFibGUgb3Igd2hldGhlciBzb21ldGhpbmcgZGVlcGVyIGhhcyBnb25lIGF3cnkuIEkgYmV0IHRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjguNDMyNTY2MzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSUVFRTgwMjE1NFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgSUVFRSBTdGQgODAyLjE1LjQgZGVmaW5lcyBhIGxvdyBkYXRhIHJhdGUsIGxvdyBwb3dlciBhbmQgbG93XFxuICAgNjpcXHRcXHQgIGNvbXBsZXhpdHkgc2hvcnQgcmFuZ2Ugd2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3Jrcy4gSXQgd2FzXFxuICAgNzpcXHRcXHQgIGRlc2lnbmVkIHRvIG9yZ2FuaXNlIG5ldHdvcmtzIG9mIHNlbnNvcnMsIHN3aXRjaGVzLCBldGMgYXV0b21hdGlvblxcbiAgIDg6XFx0XFx0ICBkZXZpY2VzLiBNYXhpbXVtIGFsbG93ZWQgZGF0YSByYXRlIGlzIDI1MCBrYi9zIGFuZCB0eXBpY2FsIHBlcnNvbmFsXFxuICAgOTpcXHRcXHQgIG9wZXJhdGluZyBzcGFjZSBhcm91bmQgMTBtLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMUi1XUEFOIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXFxuICAxMjpcXHRcXHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlcy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgSUVFRTgwMjE1NFxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG4gIDE3OlxcdFxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgQWRkcyBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0IGZvciBubDgwMjE1NC5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXFxcIlxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFNvY2tldCBpbnRlcmZhY2UgZm9yIElFRUUgODAyLjE1LjQuIENvbnRhaW5zIERHUkFNIHNvY2tldHMgaW50ZXJmYWNlXFxuICAyNjpcXHRcXHQgIGZvciA4MDIuMTUuNCBkYXRhZnJhbWVzLiBBbHNvIFJBVyBzb2NrZXQgaW50ZXJmYWNlIHRvIGJ1aWxkIE1BQ1xcbiAgMjc6XFx0XFx0ICBoZWFkZXIgZnJvbSB1c2Vyc3BhY2UuXFxuICAyODpcXHRcXG4gIDI5OlxcdHNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnXFxcIlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjI4LjQzMjYzMjc3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcxMjIwMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLlxuXG4qKk5hdmlnYXRpbmcgdGhlIFdpcmVsZXNzIE5ldHdvcmsgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGVzZSBuZXR3b3JrIHN0YW5kYXJkcywgc3BlY2lmaWNhbGx5IGBJRUVFODAyMTU0YCBhbmQgaXRzIHNvY2tldCBpbnRlcmZhY2UsIGBJRUVFODAyMTU0X1NPQ0tFVGAuIFdoZXJlIGRvIHRoZXNlIGZpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHN0YXJ0aW5nIHdpdGggYG5ldC9waG9uZXQvS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBob3cgdGhpcyBzdGFjayBpcyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzEuMzAzODY4NjkzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGhvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUGhvbmV0IHByb3RvY29sXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQSE9ORVRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJQaG9uZXQgcHJvdG9jb2xzIGZhbWlseVxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhlIFBob25lIE5ldHdvcmsgcHJvdG9jb2wgKFBob05ldCkgaXMgYSBwYWNrZXQtb3JpZW50ZWRcXG4gIDEwOlxcdFxcdCAgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZXZlbG9wZWQgYnkgTm9raWEgZm9yIHVzZSB3aXRoIGl0cyBtb2RlbXMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgVGhpcyBpcyByZXF1aXJlZCBmb3IgTWFlbW8gdG8gdXNlIGNlbGx1bGFyIGRhdGEgY29ubmVjdGl2aXR5IChpZlxcbiAgMTM6XFx0XFx0ICBzdXBwb3J0ZWQpLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnRyb2wgTm9raWEgcGhvbmVzXFxuICAxNDpcXHRcXHQgIGZyb20gYSBMaW51eCBjb21wdXRlciwgYWx0aG91Z2ggQVQgY29tbWFuZHMgbWF5IGJlIGVhc2llciB0byB1c2UuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBwaG9uZXQuIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjMxLjMwNDA0ODg3M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE0NjcwNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2Ugbm90ZXM6XG5cbioqRm9jdXNpbmcgaW4gb24gTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IHNlZW1zIHRvIGJlIGhpbnRpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmssIGFuZCB0aGUgdGVybSBgUEhPTkVUYCBwcm9iYWJseSByZWxhdGVzIHRvIHNvbWUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgSSBuZWVkIHRvIGNvbmZpZ3VyZS4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBgbmV0L3Rscy9LY29uZmlnYCBpcyBhIHJlYWxseSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyB0aGlzIGxpa2VseSBkZWZpbmVzIHRoZSBvcHRpb25zIGFuZCBzZXR0aW5ncyByZWxhdGVkIHRvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb2YgbmV0d29yayBzZWN1cml0eSBzdGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODozNC4yMTg3MjI2MzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzQuMjE4ODE0OTE2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTAwMTUxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVExTIENvbnRleHQgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBzdHJhaWdodCB0byB0aGUgcG9pbnQ6IGBUTFNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCwgYW5kIHF1aWNrbHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFNwZWNpZmljYWxseSwgYG5ldC9pcHY2L0tjb25maWdgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCdzIHRoZSBzZWN0aW9uIGdvdmVybmluZyBJUHY2IG5ldHdvcmtpbmcsIGFuZCBUTFMgb2Z0ZW4gZGVhbHMgd2l0aCBzZWN1cmUgY29ubmVjdGlvbnMgb3ZlciB0aGUgbmV0d29yayBzdGFjay4gSSdtIGV4cGVjdGluZyB0aGlzIGNvbmZpZyBmaWxlIHRvIHByb3ZpZGUgaW5zaWdodCBvbiByZWxldmFudCBrZXJuZWwgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgVExTYC4gUGVyaGFwcyB0aGlzIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gc2VjdXJpdHkgb3B0aW9ucyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBUTFNgIHN1cHBvcnQgaXMgY29uZGl0aW9uYWwsIGFuZCBpZiBzbywgd2hhdCB0cmlnZ2VycyBpdC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjM3LjM2ODgzNDEwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0NDUyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctMjAtXFxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMjItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzgtXFxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxcbm5ldC9pcHY2L0tjb25maWctNDAtXFx0Ym9vbCBcXFwiSVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxcbm5ldC9pcHY2L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBNb2JpbGl0eVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTE5LVxcbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxcbm5ldC9pcHY2L0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQ5LVxcbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxcbm5ldC9pcHY2L0tjb25maWctMTUxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTYxLVxcbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxcbm5ldC9pcHY2L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTc2LVxcbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbm5ldC9pcHY2L0tjb25maWctMTk3LVxcdGJvb2xcXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1VcXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjMzLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjQyLVxcbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNDQtXFx0Ym9vbCBcXFwiSVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjc4LVxcbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXFxubmV0L2lwdjYvS2NvbmZpZy0yODAtXFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yOTktXFxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvS2NvbmZpZy0zMDEtXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXFxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXFx0Ym9vbCBcXFwiSVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMjctXFxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjM3LjQ2MTI4NjE0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTMwODE0NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgZ2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24gZm9yIElQdjYqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGBnZXRzb2Nrb3B0YCBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBgSVBWNmAuIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGtleSBvbmVzIGFyZSBgSUVFRTgwMjE1NGAsIGBJRUVFODAyMTU0X1NPQ0tFVGAsIGBJUFY2YCwgYFBIT05FVGAsIGFuZCBgVExTYC4gTm93LCBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zLCBJIGhhdmUgdGhlc2U6IGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYHJhd3Y2X2dldHNvY2tvcHRgLCBgcGVwX2dldHNvY2tvcHRgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YC5cblxuV2FpdCBhIG1pbnV0ZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQuIEFoYSwgSSBzZWUgYSBidW5jaCBvZiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uczogYGRvX2RncmFtX2dldHNvY2tvcHRgLCBgZG9fcmF3djZfZ2V0c29ja29wdGAsIGBkb19wZXBfZ2V0c29ja29wdGAsIGBkb190bHNfZ2V0c29ja29wdF9jb25mYCwgYGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjYCwgYGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZGAsIGBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAsIGFuZCBgZG9fdGxzX2dldHNvY2tvcHRgLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtZWFucyB0aGUgY29ycmVjdCBvbmVzIHRvIGNvbnNpZGVyIGFyZSBkZWZpbml0ZWx5IGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYHJhd3Y2X2dldHNvY2tvcHRgLCBgcGVwX2dldHNvY2tvcHRgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YC5cblxuTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgZGdyYW1fZ2V0c29ja29wdGAuIExldCBtZSBjaGVjayBpZiBpdCdzIHRoZSBvbmx5IG9uZSBvZiBpdHMgdHlwZSBpbiBgbmV0L2llZWU4MDIxNTQvc29ja2V0LmNgLiBIb2xkIG9uLi4uIHRoZXJlJ3MgYWxzbyBgcmF3X2dldHNvY2tvcHRgPyBIbW0sIHRoYXQncyB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGByYXdfZ2V0c29ja29wdGAgaXMgd2hhdCBJIHRoaW5rIGl0IGlzIGFuZCB0aGF0IGl0IGhhc24ndCBiZWVuIHJlY2VudGx5IG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0My4zOTIxMDc2MDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjEyMzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXdfZ2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zNjI9c3RhdGljIHZvaWQgaWVlZTgwMjE1NF9yYXdfZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtMzgxLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjM4MjpzdGF0aWMgaW50IHJhd19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy0zODMtXFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zOTQ9c3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X3Jhd19wcm90ID0ge1xcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtNDA1LVxcdC5kaXNjb25uZWN0XFx0PSByYXdfZGlzY29ubmVjdCxcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYzo0MDY6XFx0LmdldHNvY2tvcHRcXHQ9IHJhd19nZXRzb2Nrb3B0LFxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTQwNy1cXHQuc2V0c29ja29wdFxcdD0gcmF3X3NldHNvY2tvcHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjQzLjkzNDI0MjYwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgxNTE4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IHRoZSBwYXRjaCBkaWRuJ3QgdG91Y2ggYW55dGhpbmcgb3V0c2lkZSBvZiBgZGdyYW1fZ2V0c29ja29wdGAgZGlyZWN0bHkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBvdGhlciBmaWxlcyBtZW50aW9uZWQsIHNwZWNpZmljYWxseSwgSSBjYW4gc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHJhd3Y2X2dldHNvY2tvcHRgIGluIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YCBpbiBgbmV0L3Rscy90bHNfbWFpbi5jYC4gVGhvc2UgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gSXQgYXBwZWFycyB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNgIGlzIGp1c3QgYSB0ZXN0IGZpbGUsIHNvIG5vIG5lZWQgdG8gZGVsdmUgZnVydGhlciBpbnRvIHRoYXQgZm9yIGZ1enppbmcgc2NvcGUuXG5cblNvLCBqdXN0IHRvIGJlIGNyeXN0YWwgY2xlYXIsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaGVyZSBhcmUgYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLlxuXG5Ob3cgZm9yIHRoZSBjb25maWdzLi4uIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYElFRUU4MDIxNTRgLCBgSUVFRTgwMjE1NF9TT0NLRVRgLCBgSVBWNmAsIGBQSE9ORVRgLCBhbmQgYFRMU2AuIEp1c3QgZG91YmxlLWNoZWNraW5nIG15IGFzc3VtcHRpb25zLCB5ZXMsIGBUTFNgIGRvZXMgaW5kZWVkIGRlcGVuZCBvbiBgSU5FVGAsIHdoaWNoIGlzIGFsd2F5cyBlbmFibGVkLCBzbyBubyBuZWVkIHRvIHdvcnJ5IHRoZXJlLiBOZWl0aGVyIGBQSE9ORVRgIG5vciBgSUVFRTgwMjE1NGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIGBJUFY2YCBhbHNvIGhhcyBubyBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBwdXJwb3Nlcy4gSSBkb24ndCBzZWUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzIHRvIGB0bHNfZ2V0c29ja29wdGAgb3RoZXIgdGhhbiBgQ09ORklHX1RMU2AuXG5cblJpZ2h0LCBsZXQncyByZWNhcCBteSB0aG91Z2h0IHByb2Nlc3MuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2V2ZXJhbCBgZ2V0c29ja29wdGAgaGFuZGxlcnMg4oCTIHNwZWNpZmljYWxseSBmb3IgSUVFRSA4MDIuMTUuNCBkZ3JhbSwgSVB2NiByYXcsIFBob25ldCBQRVAsIGFuZCBUTFMgc29ja2V0cy4gSXQncyBtb3ZpbmcgdGhlbSB0byB1c2UgdGhlIG5ldyBgc29ja29wdF90YCBpbnRlcmZhY2UgYW5kIGBjb3B5X3RvX2l0ZXJgIGluc3RlYWQgb2YgYGNvcHlfdG9fdXNlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHVzZXIgc3BhY2UgcmVhZHMgc29ja2V0IG9wdGlvbnMsIGFuZCBpdCBhZmZlY3RzIHNvbWUgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gSXQncyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBgZ2V0c29ja29wdGAgaGFuZGxlcnMgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgc29saWQgYW5kIGZyZWUgb2YgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzkyLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo1Mi4yMTU3NjQ3ODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5OTI2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfU09DS0VUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQSE9ORVRcIixcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRncmFtX2dldHNvY2tvcHRcIixcbiAgICBcInJhd3Y2X2dldHNvY2tvcHRcIixcbiAgICBcInBlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0bHNfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBkZ3JhbSwgSVB2NiByYXcsIFBob25ldCBQRVAsIGFuZCBUTFMgc29ja2V0cyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgaW50ZXJmYWNlIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgc29ja2V0IG9wdGlvbnMgYXJlIHJlYWQgYnkgdXNlciBzcGFjZSwgYW5kIGl0IGFmZmVjdHMgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gRnV6emluZyB0aGVzZSBnZXRzb2Nrb3B0IGhhbmRsZXJzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicGVwX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25zIGZvciBJRUVFIDgwMi4xNS40IGRncmFtLCBJUHY2IHJhdywgUGhvbmV0IFBFUCwgYW5kIFRMUyBzb2NrZXRzIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCBpbnRlcmZhY2UgYW5kIGNvcHlfdG9faXRlciBpbnN0ZWFkIG9mIGNvcHlfdG9fdXNlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgcmVhZCBieSB1c2VyIHNwYWNlLCBhbmQgaXQgYWZmZWN0cyBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2xzLiBGdXp6aW5nIHRoZXNlIGdldHNvY2tvcHQgaGFuZGxlcnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgY29udmVyc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4pzcg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 20:49:35 +0000 UTC FinishedAt: 2026-07-27 21:18:53 +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": "3a33bf32-43af-4239-bcf1-a2fcb74bcd51" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dgram_getsockopt", "rawv6_getsockopt", "pep_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+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9TT0NLRVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtQSE9ORVQmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGdyYW1fZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtyYXd2Nl9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3BlcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3Rsc19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBkZ3JhbSwgSVB2NiByYXcsIFBob25ldCBQRVAsIGFuZCBUTFMgc29ja2V0cyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgaW50ZXJmYWNlIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgc29ja2V0IG9wdGlvbnMgYXJlIHJlYWQgYnkgdXNlciBzcGFjZSwgYW5kIGl0IGFmZmVjdHMgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gRnV6emluZyB0aGVzZSBnZXRzb2Nrb3B0IGhhbmRsZXJzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNDcyNGE1NDg2ZjJiN2U5OThhMzcwMDVkZmJiNjY3ODFkZmZiZTJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMjE6MTc6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuaW5kZXggODVkY2UyOTZkNzUxMzkuLjVhMzZlODc4OTNmNjQ3IDEwMDY0NFxuLS0tIGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG5AQCAtODMxLDIwICYjNDM7ODMxLDEyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7XG4tXG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcbiYjNDM7XHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXHUwMDNlb3B0bGVuKTtcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBXUEFOX1dBTlRBQ0s6XG5AQCAtODcxLDEwICYjNDM7ODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZG9fZGdyYW1fZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uYzM2MTUyZDIyOTViODkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xMDUxLDE0ICYjNDM7MTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiYjNDM7c3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCByYXc2X3NvY2sgKnJwID0gcmF3Nl9zayhzayk7XG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQVjZfSERSSU5DTDpcbkBAIC0xMDgwLDExICYjNDM7MTA3OCwxMCBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbiYjNDM7XHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBsZW4pO1xuIFxuLVx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2dmFsLCBsZW4pKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEwOTIsNiAmIzQzOzEwODksOSBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4ge1xuJiM0MztcdHNvY2tvcHRfdCBvcHQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4gXHRzd2l0Y2ggKGxldmVsKSB7XG4gXHRjYXNlIFNPTF9SQVc6XG4gXHRcdGJyZWFrO1xuQEAgLTExMDksNyAmIzQzOzExMDksMTggQEAgc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0cmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdH1cbiBcbi1cdHJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuY1xuaW5kZXggNzA2OTI3MTM5MzkzM2UuLjdlZjRhOWEyNDBlZjhjIDEwMDY0NFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Bob25ldC9wZXAuY1xuQEAgLTEwNzgsMTcgJiM0MzsxMDc4LDExIEBAIHN0YXRpYyBpbnQgcGVwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0XHRjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHBlcF9zb2NrICpwbiA9IHBlcF9zayhzayk7XG4gXHRpbnQgbGVuLCB2YWw7XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX1BOUElQRSlcbi1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFBOUElQRV9FTkNBUDpcbiBcdFx0dmFsID0gcG4tXHUwMDNlaWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FO1xuQEAgLTExMTIsMTEgJiM0MzsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbi1cdGlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpXG4mIzQzO1x0bGVuID0gdW1pbihzaXplb2YoaW50KSwgb3B0LVx1MDAzZW9wdGxlbik7XG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IGxlbjtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAocHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3tcbiYjNDM7XHRzb2Nrb3B0X3Qgb3B0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRvX3BlcF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggOGM1ODhjZGFiNzMzZGEuLmZiYjI3NDI4N2FhNWYyIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC00MjQsMjAgJiM0Mzs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0cmV0dXJuIG1hc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHQgIGludCBfX3VzZXIgKm9wdGxlbiwgaW50IHR4KVxuJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdCwgaW50IHR4KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm87XG4gXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XG4tXHRpbnQgbGVuO1xuJiM0MztcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRpZiAoIW9wdHZhbCB8fCAobGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkpIHtcbiYjNDM7XHRpZiAoIW9wdC1cdTAwM2VpdGVyX291dC51YnVmIHx8IGxlbiBcdTAwM2Mgc2l6ZW9mKCpjcnlwdG9faW5mbykpIHtcbiBcdFx0cmMgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC00NjIsNyAmIzQzOzQ1OCw4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHR9XG4gXG4gXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxuJiM0MztcdFx0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbyksXG4mIzQzO1x0XHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKCpjcnlwdG9faW5mbykpXG4gXHRcdFx0cmMgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC00NzgsNDQgJiM0Mzs0NzUsMzggQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbiBcdG1lbWNweShjcnlwdG9faW5mb19yZWNfc2VxKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYyksXG4gXHQgICAgICAgY2N0eC1cdTAwM2VyZWNfc2VxLCBjaXBoZXJfZGVzYy1cdTAwM2VyZWNfc2VxKTtcbiBcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8pKVxuJiM0MztcdGlmIChjb3B5X3RvX2l0ZXIoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvLFxuJiM0MztcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBjaXBoZXJfZGVzYy1cdTAwM2VjcnlwdG9faW5mbylcbiBcdFx0cmMgPSAtRUZBVUxUO1xuIFxuIG91dDpcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHQgICBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHVuc2lnbmVkIGludCB2YWx1ZTtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpbnQgbGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdGlmIChsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR2YWx1ZSA9IGN0eC1cdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHQgICAgaW50IF9fdXNlciAqb3B0bGVuKVxuJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuLVx0aW50IHZhbHVlLCBsZW47XG4mIzQzO1x0aW50IHZhbHVlLCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiAhPSBUTFNfMV8zX1ZFUlNJT04pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC01MjUsMzggJiM0Mzs1MTYsMzEgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0aWYgKHZhbHVlIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdmFsdWU7XG4gXG4tXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSkpKVxuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBzaXplb2YodmFsdWUpO1xuJiM0MztcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSksIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4mIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHUxNiBwYXlsb2FkX2xlbiA9IGN0eC1cdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW47XG4tXHRpbnQgbGVuO1xuLVxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0aW50IGxlbiA9IG9wdC1cdTAwM2VvcHRsZW47XG4gXG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YocGF5bG9hZF9sZW4pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YocGF5bG9hZF9sZW4pLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXG4mIzQzO1x0b3B0LVx1MDAzZW9wdGxlbiA9IHNpemVvZihwYXlsb2FkX2xlbik7XG4mIzQzO1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSxcbiYjNDM7XHRcdFx0IFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLVx0XHRcdCAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTY1LDE3ICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBUTFNfVFg6XG4gXHRjYXNlIFRMU19SWDpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbixcbi1cdFx0XHRcdFx0ICAgIG9wdG5hbWUgPT0gVExTX1RYKTtcbiYjNDM7XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XG4tXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfUlhfRVhQRUNUX05PX1BBRDpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbiYjNDM7XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyYyA9IC1FTk9QUk9UT09QVDtcbkBAIC01OTEsMTIgJiM0Mzs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4mIzQzO1x0c29ja29wdF90IG9wdDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXG4gXHRcdHJldHVybiBjdHgtXHUwMDNlc2tfcHJvdG8tXHUwMDNlZ2V0c29ja29wdChzaywgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiBcbi1cdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfY3J5cHRvX2luZm8oY29uc3Qgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG5pbmRleCBmZTVhNTI2OGJjMzRlYy4uOTc0MDY1YTIzZmE4MjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuQEAgLTI4LDcgJiM0MzsyOCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtX3NvY2tldHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuICNpZm5kZWYgQUZfVlNPQ0tcbkBAIC00MCw2ICYjNDM7NDMsNDUgQEBcbiAjaWZuZGVmIElDTVBfRklMVEVSXG4gI2RlZmluZSBJQ01QX0ZJTFRFUiAxXG4gI2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9IRFJJTkNMXG4mIzQzOyNkZWZpbmUgSVBWNl9IRFJJTkNMIDM2XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIElQVjZfQ0hFQ0tTVU1cbiYjNDM7I2RlZmluZSBJUFY2X0NIRUNLU1VNIDdcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgQUZfSUVFRTgwMjE1NFxuJiM0MzsjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzZcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgU09MX0lFRUU4MDIxNTRcbiYjNDM7I2RlZmluZSBTT0xfSUVFRTgwMjE1NCAwXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFdQQU5fV0FOVEFDS1xuJiM0MzsjZGVmaW5lIFdQQU5fV0FOVEFDSyAwXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIEFGX1BIT05FVFxuJiM0MzsjZGVmaW5lIEFGX1BIT05FVCAzNVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBTT0xfUE5QSVBFXG4mIzQzOyNkZWZpbmUgU09MX1BOUElQRSAyNzVcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgUE5fUFJPVE9fUElQRVxuJiM0MzsjZGVmaW5lIFBOX1BST1RPX1BJUEUgMlxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBcbiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVAgMVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmbmRlZiBQTlBJUEVfRU5DQVBfTk9ORVxuJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUF9OT05FIDBcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgUE5QSVBFX0VOQ0FQX0lQXG4mIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQX0lQIDFcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZm5kZWYgU09MX1RMU1xuJiM0MzsjZGVmaW5lIFNPTF9UTFMgMjgyXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZuZGVmIFRDUF9VTFBcbiYjNDM7I2RlZmluZSBUQ1BfVUxQIDMxXG4mIzQzOyNlbmRpZlxuIFxuIC8qIC0tLS0tLS0tLS0gbmV0bGluayAtLS0tLS0tLS0tICovXG4gXG5AQCAtMzk0LDQgJiM0Mzs0MzYsMzg2IEBAIFRFU1RfRihyYXcsIGJhZF9vcHRuYW1lKVxuIFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuIH1cbiBcbiYjNDM7LyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cbiYjNDM7XG4mIzQzO0ZJWFRVUkUocmF3djYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHJhd3Y2KVxuJiM0Mzt7XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04ocmF3djYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihyYXd2NiwgaGRyaW5jbF9vdmVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTZdID0ge307XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbiYjNDM7XHRcdFx0XHRidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcbiYjNDM7ICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihyYXd2NiwgY2hlY2tzdW1fZGVmYXVsdClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHQvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfQ0hFQ0tTVU0sXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YocmF3djYsIGJhZF9vcHRuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0LyogU09MX1JBVyByZWFjaGVzIGRvX3Jhd3Y2X2dldHNvY2tvcHQoKSBkaXJlY3RseS4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLS0tLS0tLSBpZWVlODAyMTU0IChkZ3JhbSkgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShpZWVlODAyMTU0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChpZWVlODAyMTU0KVxuJiM0Mzt7XG4mIzQzO1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JRUVFODAyMTU0LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtBRl9JRUVFODAyMTU0IGRncmFtIHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NClcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbCA9IC0xO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX292ZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxNl0gPSB7fTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4mIzQzO1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX3VuZGVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IDI7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIGJhZF9vcHRuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBkZ3JhbV9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfSUVFRTgwMjE1NC4gKi9cbiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIGJhZF9sZXZlbClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW47XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCBXUEFOX1dBTlRBQ0ssXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVPUE5PVFNVUFAsIGVycm5vKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi9cbiYjNDM7XG4mIzQzO0ZJWFRVUkUocGhvbmV0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChwaG9uZXQpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0FGX1BIT05FVCBwaXBlIHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04ocGhvbmV0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihwaG9uZXQsIGVuY2FwX2V4YWN0KVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4mIzQzO1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO1x0QVNTRVJUX1RSVUUodmFsID09IFBOUElQRV9FTkNBUF9OT05FIHx8IHZhbCA9PSBQTlBJUEVfRU5DQVBfSVApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF9vdmVyc2l6ZV9jbGFtcGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTZdID0ge307XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4mIzQzO1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuXG4mIzQzOyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXG4mIzQzOyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgUE5QSVBFX0VOQ0FQLFxuJiM0MztcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihwaG9uZXQsIGJhZF9vcHRuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9QTlBJUEUsIDB4N2ZmZiwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHBlcF9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfUE5QSVBFLiAqL1xuJiM0MztURVNUX0YocGhvbmV0LCBiYWRfbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1JBVywgUE5QSVBFX0VOQ0FQLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLS0tLS0tLSB0bHMgLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRSh0bHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0aW50IHNmZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodGxzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGEgPSB7XG4mIzQzO1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGEpO1xuJiM0MztcdGludCBsZmQ7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlZmQgPSAtMTtcbiYjNDM7XHRzZWxmLVx1MDAzZXNmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChsZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7VENQIHNvY2tldDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YSwgc2l6ZW9mKGEpKSB8fCBsaXN0ZW4obGZkLCAxKSB8fFxuJiM0MztcdCAgICBnZXRzb2NrbmFtZShsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBcdTAwMjZhbGVuKSkge1xuJiM0MztcdFx0Y2xvc2UobGZkKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtsaXN0ZW5lciBzZXR1cDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChjb25uZWN0KHNlbGYtXHUwMDNlZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBzaXplb2YoYSkpKSB7XG4mIzQzO1x0XHRjbG9zZShsZmQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2Nvbm5lY3Q6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRzZWxmLVx1MDAzZXNmZCA9IGFjY2VwdChsZmQsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGNsb3NlKGxmZCk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1RDUF9VTFA9dGxzOiAlcyAoYnVpbHQgd2l0aG91dCBUTFM/KVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTih0bHMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VzZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VzZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBkb190bHNfZ2V0c29ja29wdF90eF96YygpOiBmaXhlZC1zaXplIGludCwgZXhhY3QgbGVuZ3RoIHJlcXVpcmVkLiAqL1xuJiM0MztURVNUX0YodGxzLCB0eF96ZXJvY29weV9leGFjdClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcbiYjNDM7XHRpbnQgdmFsID0gLTE7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSh2YWwgPT0gMCB8fCB2YWwgPT0gMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X3dyb25nX2xlbilcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBkb190bHNfZ2V0c29ja29wdF9jb25mKCk6IE5VTEwgb3B0dmFsIHN0aWxsIHlpZWxkcyBFSU5WQUwgLS0gdGhlXG4mIzQzOyAqIGNvbnZlcnRlZCBjb2RlIHRlc3RzIG9wdC1cdTAwM2VpdGVyX291dC51YnVmIGluIHBsYWNlIG9mIG9wdHZhbC5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih0bHMsIGNvbmZfbnVsbF9vcHR2YWwpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIE5VTEwsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHRscywgY29uZl9zaG9ydClcbiYjNDM7e1xuJiM0MztcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuJiM0MztcdGNoYXIgYnVmWzJdO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBidWYsIFx1MDAyNm9wdGxlbikpO1xuJiM0MztcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVExTX1RYIGJlZm9yZSBjcnlwdG8gaXMgc2V0IHJlcG9ydHMgbm90LXJlYWR5LiAqL1xuJiM0MztURVNUX0YodGxzLCBjb25mX25vdF9yZWFkeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gaW5mbztcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcdTAwMjZpbmZvLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRUJVU1ksIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2V0IFRYIGNyeXB0bywgdGhlbiByZWFkIGl0IGJhY2sgYXQgdGhlIGJhc2UgYW5kIGZ1bGwgc2l6ZXMsIGV4ZXJjaXNpbmdcbiYjNDM7ICogYm90aCBjb3B5X3RvX2l0ZXIoKSBicmFuY2hlcy4gU0tJUCBpZiBBRVMtR0NNIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgY29uZl9jcnlwdG9fcm91bmR0cmlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0ge1xuJiM0MztcdFx0LmluZm8udmVyc2lvbiA9IFRMU18xXzJfVkVSU0lPTixcbiYjNDM7XHRcdC5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xuJiM0MztcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gYmFzZTtcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNnR4LCBzaXplb2YodHgpKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtzZXQgVExTX1RYIGFlc19nY21fMTI4OiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKGJhc2UpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2YmFzZSwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoVExTXzFfMl9WRVJTSU9OLCBiYXNlLnZlcnNpb24pO1xuJiM0MztcdEFTU0VSVF9FUShUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LCBiYXNlLmNpcGhlcl90eXBlKTtcbiYjNDM7XG4mIzQzO1x0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2ZnVsbCwgXHUwMDI2b3B0bGVuKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHNpemVvZihmdWxsKSwgb3B0bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHRscywgYmFkX29wdG5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGludCk7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIDB4N2ZmZiwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfU09DS0VUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UEhPTkVUJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RncmFtX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQ3MjRhNTQ4NmYyYjdlOTk4YTM3MDA1ZGZiYjY2NzgxZGZmYmUyZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwppbmRleCA4NWRjZTI5NmQ3NTEzOS4uNWEzNmU4Nzg5M2Y2NDcgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jCkBAIC04MzEsMjAgJiM0Mzs4MzEsMTIgQEAgc3RhdGljIGludCBpZWVlODAyMTU0X2RncmFtX2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX2RncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOwotCiAJaW50IHZhbCwgbGVuOwogCi0JaWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSk7CiYjNDM7CWxlbiA9IHVtaW4oc2l6ZW9mKGludCksIG9wdC0mZ3Q7b3B0bGVuKTsKIAogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgV1BBTl9XQU5UQUNLOgpAQCAtODcxLDEwICYjNDM7ODYzLDMyIEBAIHN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBsZW47CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWwsIGxlbiwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBsZW4pCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYW1wO3ZhbCwgbGVuKSkKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiYjNDM7CQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0Mzt7CiYjNDM7CXNvY2tvcHRfdCBvcHQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZXJyID0gc29ja29wdF9pbml0X3VzZXIoJmFtcDtvcHQsIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGRvX2RncmFtX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsICZhbXA7b3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCAzY2M1ODY5OGNiYmQzYS4uYzM2MTUyZDIyOTViODkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3Jhdy5jCkBAIC0xMDUxLDE0ICYjNDM7MTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCXJldHVybiBkb19yYXd2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQogCi1zdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTsKIAlpbnQgdmFsLCBsZW47CiAKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJbGVuID0gb3B0LSZndDtvcHRsZW47CiAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIElQVjZfSERSSU5DTDoKQEAgLTEwODAsMTEgJiM0MzsxMDc4LDEwIEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTsKJiM0MzsJbGVuID0gdW1pbihzaXplb2YoaW50KSwgbGVuKTsKIAotCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYW1wO3ZhbCwgbGVuKSkKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBsZW47CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWwsIGxlbiwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBsZW4pCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtMTA5Miw2ICYjNDM7MTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiYjNDM7CXNvY2tvcHRfdCBvcHQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU09MX1JBVzoKIAkJYnJlYWs7CkBAIC0xMTA5LDcgJiM0MzsxMTA5LDE4IEBAIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiBpcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiAJfQogCi0JcmV0dXJuIGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCAmYW1wO29wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZykKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLmMgYi9uZXQvcGhvbmV0L3BlcC5jCmluZGV4IDcwNjkyNzEzOTM5MzNlLi43ZWY0YTlhMjQwZWY4YyAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wZXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGhvbmV0L3BlcC5jCkBAIC0xMDc4LDE3ICYjNDM7MTA3OCwxMSBAQCBzdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7c3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdCkKIHsKIAlzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTsKIAlpbnQgbGVuLCB2YWw7CiAKLQlpZiAobGV2ZWwgIT0gU09MX1BOUElQRSkKLQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgUE5QSVBFX0VOQ0FQOgogCQl2YWwgPSBwbi0mZ3Q7aWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FOwpAQCAtMTExMiwxMSAmIzQzOzExMDYsMzMgQEAgc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTsKLQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQomIzQzOwlsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtJmd0O29wdGxlbik7CiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbGVuOwomIzQzOwlpZiAoY29weV90b19pdGVyKCZhbXA7dmFsLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAocHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiYjNDM7CQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiYjNDM7ewomIzQzOwlzb2Nrb3B0X3Qgb3B0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAobGV2ZWwgIT0gU09MX1BOUElQRSkKJiM0MzsJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiYjNDM7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb19wZXBfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgJmFtcDtvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmMKaW5kZXggOGM1ODhjZGFiNzMzZGEuLmZiYjI3NDI4N2FhNWYyIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfbWFpbi5jCkBAIC00MjQsMjAgJiM0Mzs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgaW50IF9fdXNlciAqb3B0bGVuLCBpbnQgdHgpCiYjNDM7c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eCkKIHsKIAlpbnQgcmMgPSAwOwogCWNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjOwogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwogCXN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvOwogCXN0cnVjdCBjaXBoZXJfY29udGV4dCAqY2N0eDsKLQlpbnQgbGVuOwomIzQzOwlpbnQgbGVuID0gb3B0LSZndDtvcHRsZW47CiAKLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICghb3B0dmFsIHx8IChsZW4gJmx0OyBzaXplb2YoKmNyeXB0b19pbmZvKSkpIHsKJiM0MzsJaWYgKCFvcHQtJmd0O2l0ZXJfb3V0LnVidWYgfHwgbGVuICZsdDsgc2l6ZW9mKCpjcnlwdG9faW5mbykpIHsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NjIsNyAmIzQzOzQ1OCw4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJfQogCiAJaWYgKGxlbiA9PSBzaXplb2YoKmNyeXB0b19pbmZvKSkgewotCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgY3J5cHRvX2luZm8sIHNpemVvZigqY3J5cHRvX2luZm8pKSkKJiM0MzsJCWlmIChjb3B5X3RvX2l0ZXIoY3J5cHRvX2luZm8sIHNpemVvZigqY3J5cHRvX2luZm8pLAomIzQzOwkJCQkgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSkKIAkJCXJjID0gLUVGQVVMVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDc4LDQ0ICYjNDM7NDc1LDM4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJbWVtY3B5KGNyeXB0b19pbmZvX3JlY19zZXEoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjKSwKIAkgICAgICAgY2N0eC0mZ3Q7cmVjX3NlcSwgY2lwaGVyX2Rlc2MtJmd0O3JlY19zZXEpOwogCi0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy0mZ3Q7Y3J5cHRvX2luZm8pKQomIzQzOwlpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy0mZ3Q7Y3J5cHRvX2luZm8sCiYjNDM7CQkJICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtJmd0O2NyeXB0b19pbmZvKQogCQlyYyA9IC1FRkFVTFQ7CiAKIG91dDoKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7CiAJdW5zaWduZWQgaW50IHZhbHVlOwotCWludCBsZW47Ci0KLQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaW50IGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJaWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbHVlID0gY3R4LSZndDt6ZXJvY29weV9zZW5kZmlsZTsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDt2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpCiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCi0JCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwotCWludCB2YWx1ZSwgbGVuOwomIzQzOwlpbnQgdmFsdWUsIGxlbiA9IG9wdC0mZ3Q7b3B0bGVuOwogCiAJaWYgKGN0eC0mZ3Q7cHJvdF9pbmZvLnZlcnNpb24gIT0gVExTXzFfM19WRVJTSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwogCWlmIChsZW4gJmx0OyBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTI1LDM4ICYjNDM7NTE2LDMxIEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKIAlpZiAodmFsdWUgJmx0OyAwKQogCQlyZXR1cm4gdmFsdWU7CiAKLQlpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhbXA7dmFsdWUsIHNpemVvZih2YWx1ZSkpKQomIzQzOwlvcHQtJmd0O29wdGxlbiA9IHNpemVvZih2YWx1ZSk7CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIoJmFtcDt2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbikKJiM0MztzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7CiAJdTE2IHBheWxvYWRfbGVuID0gY3R4LSZndDt0eF9tYXhfcGF5bG9hZF9sZW47Ci0JaW50IGxlbjsKLQotCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwomIzQzOwlpbnQgbGVuID0gb3B0LSZndDtvcHRsZW47CiAKIAlpZiAobGVuICZsdDsgc2l6ZW9mKHBheWxvYWRfbGVuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocHV0X3VzZXIoc2l6ZW9mKHBheWxvYWRfbGVuKSwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFtcDtwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpCiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTsKJiM0MzsJaWYgKGNvcHlfdG9faXRlcigmYW1wO3BheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pLAomIzQzOwkJCSAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9IHNpemVvZihwYXlsb2FkX2xlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwKLQkJCSAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQomIzQzO3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpCiB7CiAJaW50IHJjID0gMDsKIApAQCAtNTY1LDE3ICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIFRMU19UWDoKIAljYXNlIFRMU19SWDoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbiwKLQkJCQkJICAgIG9wdG5hbWUgPT0gVExTX1RYKTsKJiM0MzsJCXJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7CiAJCWJyZWFrOwogCWNhc2UgVExTX1RYX1pFUk9DT1BZX1JPOgotCQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHQpOwogCQlicmVhazsKIAljYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOgotCQlyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJcmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7CiAJCWJyZWFrOwogCWNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjoKLQkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJcmMgPSBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PUFJPVE9PUFQ7CkBAIC01OTEsMTIgJiM0Mzs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKJiM0MzsJc29ja29wdF90IG9wdDsKJiM0MzsJaW50IGVycjsKIAogCWlmIChsZXZlbCAhPSBTT0xfVExTKQogCQlyZXR1cm4gY3R4LSZndDtza19wcm90by0mZ3Q7Z2V0c29ja29wdChzaywgbGV2ZWwsCiAJCQkJCQkgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCi0JcmV0dXJuIGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWVyciA9IHNvY2tvcHRfaW5pdF91c2VyKCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgJmFtcDtvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfY3J5cHRvX2luZm8oY29uc3Qgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8sCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMKaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jCkBAIC0yOCw3ICYjNDM7MjgsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bV9zb2NrZXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWNtcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldGluZXQvaW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3NvY2tldC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90bHMuaCZndDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKICNpZm5kZWYgQUZfVlNPQ0sKQEAgLTQwLDYgJiM0Mzs0Myw0NSBAQAogI2lmbmRlZiBJQ01QX0ZJTFRFUgogI2RlZmluZSBJQ01QX0ZJTFRFUiAxCiAjZW5kaWYKJiM0MzsjaWZuZGVmIElQVjZfSERSSU5DTAomIzQzOyNkZWZpbmUgSVBWNl9IRFJJTkNMIDM2CiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBJUFY2X0NIRUNLU1VNCiYjNDM7I2RlZmluZSBJUFY2X0NIRUNLU1VNIDcKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIEFGX0lFRUU4MDIxNTQKJiM0MzsjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzYKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFNPTF9JRUVFODAyMTU0CiYjNDM7I2RlZmluZSBTT0xfSUVFRTgwMjE1NCAwCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBXUEFOX1dBTlRBQ0sKJiM0MzsjZGVmaW5lIFdQQU5fV0FOVEFDSyAwCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBBRl9QSE9ORVQKJiM0MzsjZGVmaW5lIEFGX1BIT05FVCAzNQomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgU09MX1BOUElQRQomIzQzOyNkZWZpbmUgU09MX1BOUElQRSAyNzUKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOX1BST1RPX1BJUEUKJiM0MzsjZGVmaW5lIFBOX1BST1RPX1BJUEUgMgomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgUE5QSVBFX0VOQ0FQCiYjNDM7I2RlZmluZSBQTlBJUEVfRU5DQVAgMQomIzQzOyNlbmRpZgomIzQzOyNpZm5kZWYgUE5QSVBFX0VOQ0FQX05PTkUKJiM0MzsjZGVmaW5lIFBOUElQRV9FTkNBUF9OT05FIDAKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFBOUElQRV9FTkNBUF9JUAomIzQzOyNkZWZpbmUgUE5QSVBFX0VOQ0FQX0lQIDEKJiM0MzsjZW5kaWYKJiM0MzsjaWZuZGVmIFNPTF9UTFMKJiM0MzsjZGVmaW5lIFNPTF9UTFMgMjgyCiYjNDM7I2VuZGlmCiYjNDM7I2lmbmRlZiBUQ1BfVUxQCiYjNDM7I2RlZmluZSBUQ1BfVUxQIDMxCiYjNDM7I2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0gbmV0bGluayAtLS0tLS0tLS0tICovCiAKQEAgLTM5NCw0ICYjNDM7NDM2LDM4NiBAQCBURVNUX0YocmF3LCBiYWRfb3B0bmFtZSkKIAlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiB9CiAKJiM0MzsvKiAtLS0tLS0tLS0tIHJhdyAoaXB2NikgLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzO0ZJWFRVUkUocmF3djYpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHJhd3Y2KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfUkFXLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtTT0NLX1JBVy9JUHY2IHNvY2tldDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihyYXd2NikKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfZXhhY3QpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsID0gLTE7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxNl0gPSB7fTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsCiYjNDM7CQkJCWJ1ZiwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSYXcgaW50IG9wdGlvbnMgY2xhbXAgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlcgomIzQzOyAqIGluc3RlYWQgb2YgcmV0dXJuaW5nIEVJTlZBTCBvbiBhIHNob3J0IGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztURVNUX0YocmF3djYsIGhkcmluY2xfdW5kZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUSgyLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocmF3djYsIGNoZWNrc3VtX2RlZmF1bHQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsKJiM0MzsJb3B0bGVuID0gc2l6ZW9mKHZhbCk7CiYjNDM7CiYjNDM7CS8qIEEgbm9uLUlDTVB2NiByYXcgc29ja2V0IGhhcyB0aGUgY2hlY2tzdW0gZGlzYWJsZWQsIHJlcG9ydGVkIGFzIC0xLiAqLwomIzQzOwlBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0NIRUNLU1VNLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfRVEoLTEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihyYXd2NiwgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJLyogU09MX1JBVyByZWFjaGVzIGRvX3Jhd3Y2X2dldHNvY2tvcHQoKSBkaXJlY3RseS4gKi8KJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfUkFXLCAweDdmZmYsICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTsKJiM0MzsJQVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7RklYVFVSRShpZWVlODAyMTU0KQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChpZWVlODAyMTU0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfSUVFRTgwMjE1NCwgU09DS19ER1JBTSwgMCk7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtBRl9JRUVFODAyMTU0IGRncmFtIHNvY2tldDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihpZWVlODAyMTU0KQomIzQzO3sKJiM0MzsJaWYgKHNlbGYtJmd0O2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShzZWxmLSZndDtmZCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfb3ZlcnNpemVfY2xhbXBlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzE2XSA9IHt9OwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLAomIzQzOwkJCQlidWYsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gMjsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLAomIzQzOwkJCQkmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKDIsIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsCiYjNDM7CQkJCSAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZGdyYW1fZ2V0c29ja29wdCgpIHJlamVjdHMgYW55IGxldmVsIG90aGVyIHRoYW4gU09MX0lFRUU4MDIxNTQuICovCiYjNDM7VEVTVF9GKGllZWU4MDIxNTQsIGJhZF9sZXZlbCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9SQVcsIFdQQU5fV0FOVEFDSywKJiM0MzsJCQkJICZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKHBob25ldCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAocGhvbmV0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfUEhPTkVULCBTT0NLX1NFUVBBQ0tFVCwgUE5fUFJPVE9fUElQRSk7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtBRl9QSE9ORVQgcGlwZSBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04ocGhvbmV0KQomIzQzO3sKJiM0MzsJaWYgKHNlbGYtJmd0O2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShzZWxmLSZndDtmZCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihwaG9uZXQsIGVuY2FwX2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJaW50IHZhbCA9IC0xOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YodmFsKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTsKJiM0MzsJQVNTRVJUX1RSVUUodmFsID09IFBOUElQRV9FTkNBUF9OT05FIHx8IHZhbCA9PSBQTlBJUEVfRU5DQVBfSVApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF9vdmVyc2l6ZV9jbGFtcGVkKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTZdID0ge307CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCwKJiM0MzsJCQkJYnVmLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuCiYjNDM7ICogaW50LXNpemVkIGJhY2tpbmcgYnVmZmVyIHdpdGggYSBzaG9ydCBvcHRsZW4gc28gdGhlIGJhc2VsaW5lIGtlcm5lbCwKJiM0MzsgKiB3aGljaCB3cml0ZXMgYSBmdWxsIGludCB2aWEgcHV0X3VzZXIoKSwgZG9lcyBub3Qgc2NyaWJibGUgcGFzdCBpdC4KJiM0MzsgKi8KJiM0MztURVNUX0YocGhvbmV0LCBlbmNhcF91bmRlcnNpemVfY2xhbXBlZCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSAyOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCwKJiM0MzsJCQkJJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUSgyLCBvcHRsZW4pOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YocGhvbmV0LCBiYWRfb3B0bmFtZSkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9QTlBJUEUsIDB4N2ZmZiwgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIHBlcF9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfUE5QSVBFLiAqLwomIzQzO1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZih2YWwpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qIC0tLS0tLS0tLS0gdGxzIC0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKHRscykKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJaW50IHNmZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAodGxzKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIGEgPSB7CiYjNDM7CQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCiYjNDM7CQkuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7CiYjNDM7CWludCBsZmQ7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O2ZkID0gLTE7CiYjNDM7CXNlbGYtJmd0O3NmZCA9IC0xOwomIzQzOwomIzQzOwlsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAobGZkICZsdDsgMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O1RDUCBzb2NrZXQ6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWlmIChiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YSwgc2l6ZW9mKGEpKSB8fCBsaXN0ZW4obGZkLCAxKSB8fAomIzQzOwkgICAgZ2V0c29ja25hbWUobGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthLCAmYW1wO2FsZW4pKSB7CiYjNDM7CQljbG9zZShsZmQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bGlzdGVuZXIgc2V0dXA6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsJc2VsZi0mZ3Q7ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAoY29ubmVjdChzZWxmLSZndDtmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YSwgc2l6ZW9mKGEpKSkgewomIzQzOwkJY2xvc2UobGZkKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2Nvbm5lY3Q6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsJc2VsZi0mZ3Q7c2ZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7CiYjNDM7CWNsb3NlKGxmZCk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgJiMzNDt0bHMmIzM0Oywgc2l6ZW9mKCYjMzQ7dGxzJiMzNDspKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O1RDUF9VTFA9dGxzOiAlcyAoYnVpbHQgd2l0aG91dCBUTFM/KSYjMzQ7LAomIzQzOwkJICAgICBzdHJlcnJvcihlcnJubykpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKHRscykKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7c2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShzZWxmLSZndDtzZmQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBkb190bHNfZ2V0c29ja29wdF90eF96YygpOiBmaXhlZC1zaXplIGludCwgZXhhY3QgbGVuZ3RoIHJlcXVpcmVkLiAqLwomIzQzO1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpOwomIzQzOwlpbnQgdmFsID0gLTE7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sCiYjNDM7CQkJCSZhbXA7dmFsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7CiYjNDM7CUFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKQomIzQzO3sKJiM0MzsJc29ja2xlbl90IG9wdGxlbiA9IDI7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLAomIzQzOwkJCQkgJmFtcDt2YWwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZQomIzQzOyAqIGNvbnZlcnRlZCBjb2RlIHRlc3RzIG9wdC0mZ3Q7aXRlcl9vdXQudWJ1ZiBpbiBwbGFjZSBvZiBvcHR2YWwuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSA2NDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsIE5VTEwsICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHRscywgY29uZl9zaG9ydCkKJiM0Mzt7CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSAyOwomIzQzOwljaGFyIGJ1ZlsyXTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtJmd0O2ZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUTFNfVFggYmVmb3JlIGNyeXB0byBpcyBzZXQgcmVwb3J0cyBub3QtcmVhZHkuICovCiYjNDM7VEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGluZm87CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCAmYW1wO2luZm8sICZhbXA7b3B0bGVuKSk7CiYjNDM7CUFTU0VSVF9FUShFQlVTWSwgZXJybm8pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZwomIzQzOyAqIGJvdGggY29weV90b19pdGVyKCkgYnJhbmNoZXMuIFNLSVAgaWYgQUVTLUdDTSBpcyB1bmF2YWlsYWJsZS4KJiM0MzsgKi8KJiM0MztURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggdHggPSB7CiYjNDM7CQkuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLAomIzQzOwkJLmluZm8uY2lwaGVyX3R5cGUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggZnVsbDsKJiM0MzsJc3RydWN0IHRsc19jcnlwdG9faW5mbyBiYXNlOwomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuOwomIzQzOwomIzQzOwlpZiAoc2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgVExTX1RYLCAmYW1wO3R4LCBzaXplb2YodHgpKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3NldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihiYXNlKTsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDtiYXNlLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGJhc2UpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfRVEoVExTXzFfMl9WRVJTSU9OLCBiYXNlLnZlcnNpb24pOwomIzQzOwlBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgYmFzZS5jaXBoZXJfdHlwZSk7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihmdWxsKTsKJiM0MzsJQVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi0mZ3Q7ZmQsIFNPTF9UTFMsIFRMU19UWCwgJmFtcDtmdWxsLCAmYW1wO29wdGxlbikpOwomIzQzOwlBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pOwomIzQzOwlBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHRscywgYmFkX29wdG5hbWUpCiYjNDM7ewomIzQzOwlzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGludCk7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLSZndDtmZCwgU09MX1RMUywgMHg3ZmZmLCAmYW1wO3ZhbCwgJmFtcDtvcHRsZW4pKTsKJiM0MzsJQVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7CiYjNDM7fQomIzQzOwogVEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBHZXRzb2Nrb3B0IFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBob3cgdGhlIGtlcm5lbCYjMzk7cyBgZ2V0c29ja29wdGAgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdXNlciBzcGFjZS4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBuZXR3b3JrIHN1YnN5c3RlbXM6IGBpZWVlODAyMTU0YCwgYGlwdjYgcmF3YCwgYHBob25ldGAsIGFuZCBgdGxzYC4gVGhlIHBhdHRlcm4gaXMgY29uc2lzdGVudDogdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3JpbmcgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQgb2YgZGlyZWN0bHkgZGVhbGluZyB3aXRoIGBjaGFyIF9fdXNlciAqb3B0dmFsYCBhbmQgYGludCBfX3VzZXIgKm9wdGxlbmAsIGl0JiMzOTtzIHN3aXRjaGluZyB0byBhIGBzb2Nrb3B0X3QgKm9wdGAgYXBwcm9hY2ggYW5kIGVtcGxveWluZyBmdW5jdGlvbnMgbGlrZSBgc29ja29wdF9pbml0X3VzZXJgIGFuZCBgY29weV90b19pdGVyYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIHVuaWZpZWQgZnJhbWV3b3JrIGZvciBzb2NrZXQgb3B0aW9ucywgbGlrZWx5IGZvciBhIHZhcmlldHkgb2YgcmVhc29ucy4gSSYjMzk7bSBzcGVjdWxhdGluZyBCUEYgaW50ZWdyYXRpb24sIGlvX3VyaW5nIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsbHkganVzdCBhIGdlbmVyYWwgY2xlYW51cCBvZiB0aGlzIGludGVyZmFjZS4KCkJlY2F1c2UgaXQgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgKGhvdyBkYXRhIGlzIGNvcGllZCBvdXQgb2YgdGhlIGtlcm5lbCB3aXRoIGBnZXRzb2Nrb3B0YCksIHRoaXMgaXMgb2J2aW91c2x5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgcmVmYWN0b3IuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZXNlIHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2U6CgoqICAgYG5ldC9pZWVlODAyMTU0L3NvY2tldC5jYCByZXF1aXJlcyBib3RoIGBDT05GSUdfSUVFRTgwMjE1NGAgYW5kIGBDT05GSUdfSUVFRTgwMjE1NF9TT0NLRVRgCiogICBgbmV0L2lwdjYvcmF3LmNgIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfSVBWNmAKKiAgIGBuZXQvcGhvbmV0L3BlcC5jYCByZWxpZXMgb24gYENPTkZJR19QSE9ORVRgCiogICBgbmV0L3Rscy90bHNfbWFpbi5jYCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfVExTYAoKSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmVhY2ggb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUVFRTgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJRUVFIDgwMi4xNS40IENvbnRleHQgYW5kIFNvY2tldCBBYnN0cmFjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBJRUVFODAyMTU0YCBhbmQgYElFRUU4MDIxNTRfU09DS0VUYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGNvbnNpZGVyaW5nIGEgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIChMUi1XUEFOKSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGNvZGUgb3IgYSBzeXN0ZW0gdGhhdCYjMzk7cyBidWlsdCBvbiB0b3Agb2Ygb3IgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIElFRUUgODAyLjE1LjQgc3RhbmRhcmQuIFRoZSBzdGFuZGFyZCBpdHNlbGYgZGVmaW5lcyB0aGUgcGh5c2ljYWwgYW5kIE1BQyBsYXllcnMsIHNvIEkmIzM5O20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIFJGIHByb3RvY29sLgoKVGhlIHByZXNlbmNlIG9mIGBfU09DS0VUYCBzdWdnZXN0cyB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGFic3RyYWN0aW9uIGxheWVyLiBTcGVjaWZpY2FsbHksIEkgaW1hZ2luZSBhIHNvZnR3YXJlIGludGVyZmFjZSB0aGF0IGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgODAyLjE1LjQgcmFkaW8gaW4gYSBtb3JlIGNvbnZlbmllbnQsIGFwcGxpY2F0aW9uLWZyaWVuZGx5IHdheSwgc2ltaWxhciB0byBob3cgc3RhbmRhcmQgVENQL0lQIHNvY2tldHMgd29yayBmb3IgRXRoZXJuZXQgb3IgdGhlIEludGVybmV0LiBUaGlzIHNvY2tldCBhYnN0cmFjdGlvbiBzaG91bGQgYWJzdHJhY3QgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGZyYW1lIGZvcm1hdHRpbmcsIGFkZHJlc3NpbmcsIGFuZCBhY2tub3dsZWRnZSBoYW5kbGluZywgb2ZmZXJpbmcgYSBzaW1wbGVyIHByb2dyYW1taW5nIG1vZGVsLiBXZSBtaWdodCBiZSB1c2luZyBhIGZyYW1ld29yayBsaWtlIENvbnRpa2ksIFRpbnlPUywgb3Igc29tZXRoaW5nIGN1c3RvbS4KClRoZXJlZm9yZSwgdGhlIG1haW4gZ29hbCBpcyB0byBlZmZpY2llbnRseSBoYW5kbGUgZGF0YSB0cmFuc2ZlciBhbmQgY29tbXVuaWNhdGlvbiBvdmVyIGEgbG93LXBvd2VyLCBzaG9ydC1yYW5nZSB3aXJlbGVzcyBuZXR3b3JrLiBUaGUgc3BlY2lmaWNzIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSE9ORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGhvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Bob25ldC9LY29uZmlnLTUtXG5uZXQvcGhvbmV0L0tjb25maWc6Njpjb25maWcgUEhPTkVUXG5uZXQvcGhvbmV0L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1Bob25ldCBwcm90b2NvbHMgZmFtaWx5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUEhPTkVUIGFuZCB0aGUgTnVhbmNlcyBvZiBMaW5ndWlzdGljIFN0cnVjdHVyZSoqCgpSaWdodCwgc28gJiMzNDtQSE9ORVQuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIGludG8gdGhlIGNoYWxsZW5nZXMgYW5kIGNvbXBsZXhpdGllcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwaG9ub2xvZ2ljYWwgbmV0d29yaywgYnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqaG93KiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZW5jb2RlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBmZWF0dXJlLWJhc2VkIHJlcHJlc2VudGF0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IElzIGl0IGEgc3RyaWN0LCBydWxlLWdvdmVybmVkIHN5c3RlbSwgb3IgZG9lcyBpdCBpbmNvcnBvcmF0ZSBzb21lIGRlZ3JlZSBvZiBwcm9iYWJpbGlzdGljIHdlaWdodGluZywgcmVmbGVjdGluZyB0aGUgZ3JhZGllbnQgbmF0dXJlIG9mIHBob25ldGljIHJlYWxpemF0aW9uPwoKVGhlIHRlcm0gYnJpbmdzIHVwIGEgaG9zdCBvZiBzdWItcXVlc3Rpb25zOiB3aGF0JiMzOTtzIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbj8gSXMgdGhpcyBhIHB1cmVseSB0aGVvcmV0aWNhbCBjb25zdHJ1Y3QsIG9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBtb2RlbCBncm91bmRlZCBpbiBlbXBpcmljYWwgZGF0YSwgbGlrZSBhY291c3RpYyBtZWFzdXJlbWVudHMgb3IgYXJ0aWN1bGF0b3J5IGRhdGE/IElzIHRoZSBnb2FsIGRlc2NyaXB0aXZlLCBhdHRlbXB0aW5nIHRvIGNhcHR1cmUgdGhlIG9ic2VydmVkIHBhdHRlcm5zLCBvciBnZW5lcmF0aXZlLCBhaW1pbmcgdG8gcHJlZGljdCBub3ZlbCBzb3VuZCBwYXR0ZXJucyBhbmQgdmFyaWF0aW9ucz8gV2UgaGF2ZSB0byBsb29rIGF0IHRoZSBtZXRob2RzIGVtcGxveWVkOiBJcyB0aGlzIGEgaGFuZC1jcmFmdGVkIHN5c3RlbSwgb3Igc29tZXRoaW5nIHRoYXQgaGFzIGJlZW4gYXV0b21hdGljYWxseSBsZWFybmVkPyBXaGF0IGFyZSB0aGUgZGF0YSBzZXRzIHRoZSBuZXR3b3JrIGlzIGJhc2VkIG9uPwoKSSBhbHNvIHdhbnQgdG8ga25vdyBob3cgdGhlIG5ldHdvcmsgaGFuZGxlcyB2YXJpYXRpb25zLiBJcyBpdCBkZXNpZ25lZCB0byBhY2NvbW1vZGF0ZSBkaWFsZWN0YWwgZGlmZmVyZW5jZXMgYW5kIHRoZSBpbmhlcmVudCB2YXJpYWJpbGl0eSBvZiBzcGVlY2ggcHJvZHVjdGlvbj8gSG93IHdlbGwgZG9lcyBpdCBleHBsYWluIHBoZW5vbWVuYSBsaWtlIGFsbG9waG9ueSwgYXNzaW1pbGF0aW9uLCBhbmQgbmV1dHJhbGl6YXRpb24/IERvZXMgaXQgY29uc2lkZXIgdGhlIHByb3NvZGljIHN0cnVjdHVyZT8KClRoZSBpbXBsaWNhdGlvbnMgYXJlIGZhc2NpbmF0aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb25uZWN0aW5nIHBob25vbG9neSB3aXRoIHBob25ldGljcy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgcGVyY2VwdGlvbiBhbmQgcHJvZHVjdGlvbiBpbmZvcm0gdGhlc2UgbmV0d29ya3MuCldlIG11c3QgbG9vayBhdCBpbXBsZW1lbnRhdGlvbi4gV2hhdCBraW5kIG9mIGFsZ29yaXRobSB1bmRlcnBpbnMgaXQ/IFdoYXQgYXJlIHRoZSBjb25zdHJhaW50cywgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucz8KCkluIHRoZSBlbmQsIHdoYXQgaW5zaWdodHMgY2FuIHRoaXMgc3RydWN0dXJlIG9mZmVyPyBEb2VzIGl0IGNoYWxsZW5nZSBleGlzdGluZyBwaG9ub2xvZ2ljYWwgdGhlb3J5LCBvciBkb2VzIGl0IHByb3ZpZGUgYSBuZXcgd2F5IG9mIGZvcm1hbGl6aW5nIG91ciB1bmRlcnN0YW5kaW5nPyBJcyB0aGUgbW9kZWwgZ2VuZXJhbGl6YWJsZSBhY3Jvc3MgbGFuZ3VhZ2VzPyBJIGNhbiYjMzk7dCB3YWl0IHRvIHNlZSBob3cgdGhlICYjMzQ7UEhPTkVUJiMzNDsgc3lzdGVtIGFkZHJlc3NlcyB0aGVzZSBjcnVjaWFsIHF1ZXN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZy00LSNcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcbm5ldC90bHMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGxzL0tjb25maWctMTgtXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0Vcbm5ldC90bHMvS2NvbmZpZy0yMC1cdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29ja2V0IG9wdGlvbiBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgVExTYC4gYElQdjZgIGlzIHVzdWFsbHkgb24sIGJ1dCB3ZSBjYW4gZGVmaW5pdGVseSBpbmNvcnBvcmF0ZSBpdC4KCk15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAgd2l0aGluIGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGByYXd2Nl9nZXRzb2Nrb3B0YCBmcm9tIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgZmluYWxseSwgYHRsc19nZXRzb2Nrb3B0YCBsb2NhdGVkIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGUgdmlzaWJpbGl0eSBvZiBgZGdyYW1fZ2V0c29ja29wdGAuIElzIGl0IGV4cG9ydGVkIG9yIHN0YXRpYz8gQWgsIHRoZSBwYXRjaCBpbmRpY2F0ZXMgaXQmIzM5O3MgYHN0YXRpY2AuIEhvbGQgb24sIHRoZSBwcm9tcHQgYWR2aXNlcyB1cyB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhvc2Ugc3RhdGljIG9uZXMgZ2V0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBtZWFuaW5nIHRoZXkgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBJbnRlcmVzdGluZy4uLiBub3csIHdoZXJlIGlzIGBkZ3JhbV9nZXRzb2Nrb3B0YCBiZWluZyAqdXNlZCo/IFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZ3JhbV9nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvc29ja2V0LmM9NzkzPXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODMzLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6ODM0OnN0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTgzNS17XG4tLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODcxLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6ODcyOnN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04NzMtXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04ODQtXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYzo4ODU6XHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODg2LVx0aWYgKGVycilcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz05Njg9c3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X2RncmFtX3Byb3QgPSB7XG4tLVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtOTgxLVx0LmlvY3RsXHRcdD0gZGdyYW1faW9jdGwsXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYzo5ODI6XHQuZ2V0c29ja29wdFx0PSBkZ3JhbV9nZXRzb2Nrb3B0LFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtOTgzLVx0LnNldHNvY2tvcHRcdD0gZGdyYW1fc2V0c29ja29wdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBnZXRzb2Nrb3B0IEZ1bmN0aW9uIENhbGwgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBnZXRzb2Nrb3B0YCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBpZWVlODAyMTU0X2RncmFtX3Byb3RgLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhc3NpZ25lZCB0byBgLmdldHNvY2tvcHRgLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIHRoYXQgd291bGQgYmUgYmV0dGVyIHRvIGZvY3VzIG9uLiBOb3BlLCBgZGdyYW1fZ2V0c29ja29wdGAgKmlzKiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSXQmIzM5O3Mgc3RhdGljLCB5ZXMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCB0cnkgdG8gaW5saW5lIGl0LCBzbyBJIGNhbiBzYWZlbHkgZm9jdXMgbXkgZWZmb3J0cyB0aGVyZS4KCkFoLCByaWdodCwgYGllZWU4MDIxNTRfZGdyYW1fcHJvdGAgaXMgYSBgc3RydWN0IHByb3RvYC4gVGhpcyBtZWFucyB0aGUgKmFjdHVhbCogc3lzY2FsbCBlbnRyeSBwb2ludCBpcyBhIGNoYWluIG9mIGNhbGxzOiBgc3lzX2dldHNvY2tvcHRgIC0mZ3Q7IGBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0YCAtJmd0OyBgc2stJmd0O3NrX3Byb3QtJmd0O2dldHNvY2tvcHRgLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgZGlnZ2luZyBpbnRvIGBkZ3JhbV9nZXRzb2Nrb3B0YCBpcyB0aGUgcmlnaHQgbW92ZSwgc2luY2UgaXQmIzM5O3MgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHByb3RvY29sIGFuZCwgYXMgY29uZmlybWVkLCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0IGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBkb2luZyBpbiBjb21wYXJpc29uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXd2Nl9nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmM9MTAzMT1zdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L3Jhdy5jLTEwNTMtXG5uZXQvaXB2Ni9yYXcuYzoxMDU0OnN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9pcHY2L3Jhdy5jLTEwNTUte1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTEwODgtXG5uZXQvaXB2Ni9yYXcuYzoxMDg5OnN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvaXB2Ni9yYXcuYy0xMDkwLVx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC9pcHY2L3Jhdy5jLTExMTUtXG5uZXQvaXB2Ni9yYXcuYzoxMTE2Olx0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbm5ldC9pcHY2L3Jhdy5jLTExMTctXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvcmF3LmMtMTIxNi1cdC5zZXRzb2Nrb3B0XHQgICA9IHJhd3Y2X3NldHNvY2tvcHQsXG5uZXQvaXB2Ni9yYXcuYzoxMjE3Olx0LmdldHNvY2tvcHRcdCAgID0gcmF3djZfZ2V0c29ja29wdCxcbm5ldC9pcHY2L3Jhdy5jLTEyMTgtXHQuc2VuZG1zZ1x0ICAgPSByYXd2Nl9zZW5kbXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTExOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGlnZ2luZyBpbnRvIFNvY2tldCBPcHRpb25zKioKCk9rYXksIHNvIGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1bnVzdWFsLCBidXQgSSBrbm93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYmVjYXVzZSBzb21lb25lLCBzb21ld2hlcmUsIGlzIHRha2luZyBpdHMgYWRkcmVzcy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFdoeSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBnZXR0aW5nIGFkZHJlc3NlZD8gVGhpcyBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIG91dHNpZGUgb2YgaXRzIGludGVuZGVkIHNjb3BlLCBwcm9iYWJseSB0aHJvdWdoIHNvbWUgZnVuY3Rpb24gcG9pbnRlciB0cmlja2VyeSBvciBwb3NzaWJseSBzb21lIHNvcnQgb2YgbGlicmFyeSBpbmplY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcGl2b3QgdG8gaW52ZXN0aWdhdGluZyBgcGVwX2dldHNvY2tvcHRgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmtpbmcgZnVuY3Rpb25zLCBpdCYjMzk7cyByZWFzb25hYmxlIHRvIHN1c3BlY3QgdGhhdCB0aGUgcHJvYmxlbSBpcyBlaXRoZXIgd2l0aCB0aGUgY2FsbGluZyBjb2RlLCBvciB0aGUgY29kZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbGF0dGVyIHdvcmtzLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmb3JtZXIgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHNoZWRzIGFueSBsaWdodCBvbiB0aGUgc2l0dWF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZGVsZWdhdGlvbiBvciBmb3J3YXJkaW5nIGhlcmUsIG9yIG1heWJlIGV2ZW4gYSBkaXJlY3QgY2FsbCBpZiB3ZSYjMzk7cmUgKnJlYWxseSogbHVja3ksIHdoaWNoIHdvdWxkIHNob3cgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgcGVwX2dldHNvY2tvcHRgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdG8gbG9vayBmb3IgY2x1ZXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGByYXd2Nl9nZXRzb2Nrb3B0YCBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVwX2dldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGhvbmV0L3BlcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9waG9uZXQvcGVwLmM9MTAxOT1zdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvcGhvbmV0L3BlcC5jLTEwODAtXG5uZXQvcGhvbmV0L3BlcC5jOjEwODE6c3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9waG9uZXQvcGVwLmMtMTA4Mi17XG4tLVxubmV0L3Bob25ldC9wZXAuYy0xMTE1LVxubmV0L3Bob25ldC9wZXAuYzoxMTE2OnN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3Bob25ldC9wZXAuYy0xMTE3LVx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC9waG9uZXQvcGVwLmMtMTEyOC1cbm5ldC9waG9uZXQvcGVwLmM6MTEyOTpcdGVyciA9IGRvX3BlcF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xubmV0L3Bob25ldC9wZXAuYy0xMTMwLVx0aWYgKGVycilcbi0tXG5uZXQvcGhvbmV0L3BlcC5jPTEzODA9c3RhdGljIHN0cnVjdCBwcm90byBwZXBfcHJvdG8gPSB7XG4tLVxubmV0L3Bob25ldC9wZXAuYy0xMzg2LVx0LnNldHNvY2tvcHRcdD0gcGVwX3NldHNvY2tvcHQsXG5uZXQvcGhvbmV0L3BlcC5jOjEzODc6XHQuZ2V0c29ja29wdFx0PSBwZXBfZ2V0c29ja29wdCxcbm5ldC9waG9uZXQvcGVwLmMtMTM4OC1cdC5zZW5kbXNnXHQ9IHBlcF9zZW5kbXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gU29ja2V0IE9wdGlvbnMqKgoKT2theSwgc28gYHBlcF9nZXRzb2Nrb3B0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBJIHNlZSB0aGF0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb2RlIHNtZWxsLCB1c3VhbGx5IG1lYW5pbmcgaXQmIzM5O3MgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIHJlc3RyaWN0ZWQgdG8uIExldCBtZSBxdWlja2x5IHBpdm90LiBMZXQmIzM5O3Mgc2VlIGlmIHNvbWV0aGluZyBzaW1pbGFyIGlzIGhhcHBlbmluZyB3aXRoIGB0bHNfZ2V0c29ja29wdGAuIFBlcmhhcHMgdGhpcyBpcyBhIG1vcmUgd2lkZXNwcmVhZCBpc3N1ZSB3aXRoIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLCBhbmQgSSBjYW4gcXVpY2tseSBhc2NlcnRhaW4gYSBwYXR0ZXJuLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdGxzX2dldHNvY2tvcHRgIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYz0zOTk9c3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy00MjYtXG5uZXQvdGxzL3Rsc19tYWluLmM6NDI3OnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpXG5uZXQvdGxzL3Rsc19tYWluLmMtNDI4LXtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNDg1LVxubmV0L3Rscy90bHNfbWFpbi5jOjQ4NjpzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG5uZXQvdGxzL3Rsc19tYWluLmMtNDg3LXtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNTAxLVxubmV0L3Rscy90bHNfbWFpbi5jOjUwMjpzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxubmV0L3Rscy90bHNfbWFpbi5jLTUwMy17XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTUyNS1cbm5ldC90bHMvdGxzX21haW4uYzo1MjY6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxubmV0L3Rscy90bHNfbWFpbi5jLTUyNy17XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTU0Mi1cbm5ldC90bHMvdGxzX21haW4uYzo1NDM6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC90bHMvdGxzX21haW4uYy01NDQte1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy01NTEtXHRjYXNlIFRMU19SWDpcbm5ldC90bHMvdGxzX21haW4uYzo1NTI6XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfY29uZihzaywgb3B0LCBvcHRuYW1lID09IFRMU19UWCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTUzLVx0XHRicmVhaztcbm5ldC90bHMvdGxzX21haW4uYy01NTQtXHRjYXNlIFRMU19UWF9aRVJPQ09QWV9STzpcbm5ldC90bHMvdGxzX21haW4uYzo1NTU6XHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTU2LVx0XHRicmVhaztcbm5ldC90bHMvdGxzX21haW4uYy01NTctXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxubmV0L3Rscy90bHNfbWFpbi5jOjU1ODpcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTU5LVx0XHRicmVhaztcbm5ldC90bHMvdGxzX21haW4uYy01NjAtXHRjYXNlIFRMU19UWF9NQVhfUEFZTE9BRF9MRU46XG5uZXQvdGxzL3Rsc19tYWluLmM6NTYxOlx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHQpO1xubmV0L3Rscy90bHNfbWFpbi5jLTU2Mi1cdFx0YnJlYWs7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTU3Mi1cbm5ldC90bHMvdGxzX21haW4uYzo1NzM6c3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvdGxzL3Rsc19tYWluLmMtNTc0LVx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy01ODctXG5uZXQvdGxzL3Rsc19tYWluLmM6NTg4Olx0ZXJyID0gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTg5LVx0aWYgKGVycilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDAyLVx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLnNldHNvY2tvcHRcdD0gdGxzX3NldHNvY2tvcHQ7XG5uZXQvdGxzL3Rsc19tYWluLmM6MTAwMzpcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5nZXRzb2Nrb3B0XHQ9IHRsc19nZXRzb2Nrb3B0O1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMDQtXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZGlzY29ubmVjdFx0PSB0bHNfZGlzY29ubmVjdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNvY2tldCBPcHRpb24gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gYHRsc19nZXRzb2Nrb3B0YCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYnV0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAsIGByYXd2Nl9nZXRzb2Nrb3B0YCwgYHBlcF9nZXRzb2Nrb3B0YCwgYW5kLCBvZiBjb3Vyc2UsIGB0bHNfZ2V0c29ja29wdGAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBGb3IgYHJhd3Y2X2dldHNvY2tvcHRgLCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYENPTkZJR19JUFY2YC4gRm9yIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19JRUVFODAyMTU0YCBhbmQgYENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVGAuIGBwZXBfZ2V0c29ja29wdGAgcmVxdWlyZXMgYENPTkZJR19QSE9ORVRgLiBBbmQgZm9yIGB0bHNfZ2V0c29ja29wdGAsIHdlIG5lZWQgYENPTkZJR19UTFNgLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYElFRUU4MDIxNTRfU09DS0VUYC4gWWVwLCBhcyBleHBlY3RlZCwgaXQgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAuIEdvb2QuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIGBQSE9ORVRgIGFuZCBgVExTYCwgYW5kIHRoZXkgYXJlIGp1c3QgYFBIT05FVGAgYW5kIGBUTFNgLCByZXNwZWN0aXZlbHkuCgpOb3cgSSBuZWVkIHRvIHJlLXZlcmlmeSB0aGUgZGVwZW5kZW5jeSBvbiBgSVBWNmAuIFllcCwgd2UmIzM5O3JlIHN0aWxsIGdvb2QgdGhlcmUuCgpJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgbHVya2luZz8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIGZpbGUgYWdhaW4uLi5BaCwgbm8sIGl0IGxvb2tzIGxpa2UgYE1BQzgwMjE1NGAgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAsIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIE9rYXksIHRoYXQgc2VlbXMgdG8gYmUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg1NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBEZXBlbmRlbmN5IExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIHNvbWUgZGVwZW5kZW5jaWVzIGRlZmluZWQgaW4gYG5ldC9pZWVlODAyMTU0L0tjb25maWdgLCByaWdodD8gSSBtZWFuLCBldmVyeXRoaW5nICpzaG91bGQqIGhhdmUgc29tZSBsZXZlbCBvZiBjb25kaXRpb25hbCBpbmNsdXNpb24gYmFzZWQgb24gZmVhdHVyZXMgb3IgaGFyZHdhcmXigKYgQnV0IHRoZXJlJiMzOTtzICpub3RoaW5nKiB0aGVyZT8gTm8gYGRlcGVuZHMgb25gIGNsYXVzZXM/IFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgSSYjMzk7bGwgYWRtaXQsIGFuZCBhIHBvdGVudGlhbCBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHdvcnRoIGludmVzdGlnYXRpbmcuIEFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCByZWFkIHRoaXMgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uIFRoaXMgaXMgbGlrZWx5IHRvIHRlbGwgbWUgd2hldGhlciB0aGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBiZSB1bml2ZXJzYWxseSBhdmFpbGFibGUgb3Igd2hldGhlciBzb21ldGhpbmcgZGVlcGVyIGhhcyBnb25lIGF3cnkuIEkgYmV0IHRoaXMgaXMgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgSUVFRTgwMjE1NFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xuICAgNjpcdFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xuICAgNzpcdFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cbiAgIDg6XHRcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxuICAgOTpcdFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIExSLVdQQU4gc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cbiAgMTI6XHRcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLlxuICAxMzpcdFxuICAxNDpcdGlmIElFRUU4MDIxNTRcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbiAgMTc6XHRcdGJvb2wgXCYjMzQ7SUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XCYjMzQ7XG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcJiMzNDtcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxuICAyNjpcdFx0ICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUNcbiAgMjc6XHRcdCAgaGVhZGVyIGZyb20gdXNlcnNwYWNlLlxuICAyODpcdFxuICAyOTpcdHNvdXJjZSBcJiMzNDtuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4KCioqTmF2aWdhdGluZyB0aGUgV2lyZWxlc3MgTmV0d29yayBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGVzZSBuZXR3b3JrIHN0YW5kYXJkcywgc3BlY2lmaWNhbGx5IGBJRUVFODAyMTU0YCBhbmQgaXRzIHNvY2tldCBpbnRlcmZhY2UsIGBJRUVFODAyMTU0X1NPQ0tFVGAuIFdoZXJlIGRvIHRoZXNlIGZpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHN0YXJ0aW5nIHdpdGggYG5ldC9waG9uZXQvS2NvbmZpZ2AuIExldCYjMzk7cyBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgaG93IHRoaXMgc3RhY2sgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGhvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQaG9uZXQgcHJvdG9jb2xcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBIT05FVFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UGhvbmV0IHByb3RvY29scyBmYW1pbHlcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhlIFBob25lIE5ldHdvcmsgcHJvdG9jb2wgKFBob05ldCkgaXMgYSBwYWNrZXQtb3JpZW50ZWRcbiAgMTA6XHRcdCAgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZXZlbG9wZWQgYnkgTm9raWEgZm9yIHVzZSB3aXRoIGl0cyBtb2RlbXMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgZm9yIE1hZW1vIHRvIHVzZSBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eSAoaWZcbiAgMTM6XHRcdCAgc3VwcG9ydGVkKS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byBjb250cm9sIE5va2lhIHBob25lc1xuICAxNDpcdFx0ICBmcm9tIGEgTGludXggY29tcHV0ZXIsIGFsdGhvdWdoIEFUIGNvbW1hbmRzIG1heSBiZSBlYXNpZXIgdG8gdXNlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHBob25ldC4gSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBub3RlczoKCioqRm9jdXNpbmcgaW4gb24gTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHByb21wdCBzZWVtcyB0byBiZSBoaW50aW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrLCBhbmQgdGhlIHRlcm0gYFBIT05FVGAgcHJvYmFibHkgcmVsYXRlcyB0byBzb21lIHVuZGVybHlpbmcgc3RydWN0dXJlIEkgbmVlZCB0byBjb25maWd1cmUuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gYG5ldC90bHMvS2NvbmZpZ2AgaXMgYSByZWFsbHkgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgdGhpcyBsaWtlbHkgZGVmaW5lcyB0aGUgb3B0aW9ucyBhbmQgc2V0dGluZ3MgcmVsYXRlZCB0byBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9mIG5ldHdvcmsgc2VjdXJpdHkgc3RhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRMUyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBUTFNcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXG4gIDE1Olx0XHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXG4gIDE2Olx0XG4gIDE3Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBUTFNfREVWSUNFXG4gIDIwOlx0XHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFRMU1xuICAyMjpcdFx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiAgMjM6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMjQ6XHRcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBIVyBvZmZsb2FkIG9mIHRoZSBUTFMgcHJvdG9jb2wuXG4gIDI4Olx0XG4gIDI5Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVExTIENvbnRleHQgQ2hlY2sqKgoKQWxyaWdodCwgc3RyYWlnaHQgdG8gdGhlIHBvaW50OiBgVExTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQsIGFuZCBxdWlja2x5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNwYWNlLiBTcGVjaWZpY2FsbHksIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgYXMgaXQmIzM5O3MgdGhlIHNlY3Rpb24gZ292ZXJuaW5nIElQdjYgbmV0d29ya2luZywgYW5kIFRMUyBvZnRlbiBkZWFscyB3aXRoIHNlY3VyZSBjb25uZWN0aW9ucyBvdmVyIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGNvbmZpZyBmaWxlIHRvIHByb3ZpZGUgaW5zaWdodCBvbiByZWxldmFudCBrZXJuZWwgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgVExTYC4gUGVyaGFwcyB0aGlzIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gc2VjdXJpdHkgb3B0aW9ucyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBUTFNgIHN1cHBvcnQgaXMgY29uZGl0aW9uYWwsIGFuZCBpZiBzbywgd2hhdCB0cmlnZ2VycyBpdC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjQ5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZ2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24gZm9yIElQdjYqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG9iamVjdGl2ZSBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYGdldHNvY2tvcHRgIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIGBJUFY2YC4gTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGUga2V5IG9uZXMgYXJlIGBJRUVFODAyMTU0YCwgYElFRUU4MDIxNTRfU09DS0VUYCwgYElQVjZgLCBgUEhPTkVUYCwgYW5kIGBUTFNgLiBOb3csIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMsIEkgaGF2ZSB0aGVzZTogYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLgoKV2FpdCBhIG1pbnV0ZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkLiBBaGEsIEkgc2VlIGEgYnVuY2ggb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBkb19kZ3JhbV9nZXRzb2Nrb3B0YCwgYGRvX3Jhd3Y2X2dldHNvY2tvcHRgLCBgZG9fcGVwX2dldHNvY2tvcHRgLCBgZG9fdGxzX2dldHNvY2tvcHRfY29uZmAsIGBkb190bHNfZ2V0c29ja29wdF90eF96Y2AsIGBkb190bHNfZ2V0c29ja29wdF9ub19wYWRgLCBgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLCBhbmQgYGRvX3Rsc19nZXRzb2Nrb3B0YC4KClRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIHRoZSBjb3JyZWN0IG9uZXMgdG8gY29uc2lkZXIgYXJlIGRlZmluaXRlbHkgYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLgoKTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgZGdyYW1fZ2V0c29ja29wdGAuIExldCBtZSBjaGVjayBpZiBpdCYjMzk7cyB0aGUgb25seSBvbmUgb2YgaXRzIHR5cGUgaW4gYG5ldC9pZWVlODAyMTU0L3NvY2tldC5jYC4gSG9sZCBvbi4uLiB0aGVyZSYjMzk7cyBhbHNvIGByYXdfZ2V0c29ja29wdGA/IEhtbSwgdGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGByYXdfZ2V0c29ja29wdGAgaXMgd2hhdCBJIHRoaW5rIGl0IGlzIGFuZCB0aGF0IGl0IGhhc24mIzM5O3QgYmVlbiByZWNlbnRseSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2dldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zNjI9c3RhdGljIHZvaWQgaWVlZTgwMjE1NF9yYXdfZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTM4MS1cbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjM4MjpzdGF0aWMgaW50IHJhd19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTM4My1cdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zOTQ9c3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X3Jhd19wcm90ID0ge1xuLS1cbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTQwNS1cdC5kaXNjb25uZWN0XHQ9IHJhd19kaXNjb25uZWN0LFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6NDA2Olx0LmdldHNvY2tvcHRcdD0gcmF3X2dldHNvY2tvcHQsXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy00MDctXHQuc2V0c29ja29wdFx0PSByYXdfc2V0c29ja29wdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzOTIKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBzY2FuIHNob3dzIHRoYXQgdGhlIHBhdGNoIGRpZG4mIzM5O3QgdG91Y2ggYW55dGhpbmcgb3V0c2lkZSBvZiBgZGdyYW1fZ2V0c29ja29wdGAgZGlyZWN0bHkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIG90aGVyIGZpbGVzIG1lbnRpb25lZCwgc3BlY2lmaWNhbGx5LCBJIGNhbiBzZWUgbW9kaWZpY2F0aW9ucyB0byBgcmF3djZfZ2V0c29ja29wdGAgaW4gYG5ldC9pcHY2L3Jhdy5jYCwgYHBlcF9nZXRzb2Nrb3B0YCBpbiBgbmV0L3Bob25ldC9wZXAuY2AsIGFuZCBgdGxzX2dldHNvY2tvcHRgIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaG9zZSBhcmUgdGhlIG1haW4gZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBJdCBhcHBlYXJzIHRoYXQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY2AgaXMganVzdCBhIHRlc3QgZmlsZSwgc28gbm8gbmVlZCB0byBkZWx2ZSBmdXJ0aGVyIGludG8gdGhhdCBmb3IgZnV6emluZyBzY29wZS4KClNvLCBqdXN0IHRvIGJlIGNyeXN0YWwgY2xlYXIsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaGVyZSBhcmUgYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLgoKTm93IGZvciB0aGUgY29uZmlncy4uLiBCYXNlZCBvbiB0aGUgZnVuY3Rpb25zLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgSUVFRTgwMjE1NGAsIGBJRUVFODAyMTU0X1NPQ0tFVGAsIGBJUFY2YCwgYFBIT05FVGAsIGFuZCBgVExTYC4gSnVzdCBkb3VibGUtY2hlY2tpbmcgbXkgYXNzdW1wdGlvbnMsIHllcywgYFRMU2AgZG9lcyBpbmRlZWQgZGVwZW5kIG9uIGBJTkVUYCwgd2hpY2ggaXMgYWx3YXlzIGVuYWJsZWQsIHNvIG5vIG5lZWQgdG8gd29ycnkgdGhlcmUuIE5laXRoZXIgYFBIT05FVGAgbm9yIGBJRUVFODAyMTU0YCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gYElQVjZgIGFsc28gaGFzIG5vIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHB1cnBvc2VzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzIHRvIGB0bHNfZ2V0c29ja29wdGAgb3RoZXIgdGhhbiBgQ09ORklHX1RMU2AuCgpSaWdodCwgbGV0JiMzOTtzIHJlY2FwIG15IHRob3VnaHQgcHJvY2Vzcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXZlcmFsIGBnZXRzb2Nrb3B0YCBoYW5kbGVycyDigJMgc3BlY2lmaWNhbGx5IGZvciBJRUVFIDgwMi4xNS40IGRncmFtLCBJUHY2IHJhdywgUGhvbmV0IFBFUCwgYW5kIFRMUyBzb2NrZXRzLiBJdCYjMzk7cyBtb3ZpbmcgdGhlbSB0byB1c2UgdGhlIG5ldyBgc29ja29wdF90YCBpbnRlcmZhY2UgYW5kIGBjb3B5X3RvX2l0ZXJgIGluc3RlYWQgb2YgYGNvcHlfdG9fdXNlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHVzZXIgc3BhY2UgcmVhZHMgc29ja2V0IG9wdGlvbnMsIGFuZCBpdCBhZmZlY3RzIHNvbWUgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGZ1enogdGhlc2UgYGdldHNvY2tvcHRgIGhhbmRsZXJzIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIHNvbGlkIGFuZCBmcmVlIG9mIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfU09DS0VUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UEhPTkVUJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RncmFtX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfU09DS0VUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7UEhPTkVUJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RncmFtX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7cmF3djZfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtwZXBfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0bHNfZ2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NDcuMTUxMjY3MjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyNDU1MTI0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicGVwX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25zIGZvciBJRUVFIDgwMi4xNS40IGRncmFtLCBJUHY2IHJhdywgUGhvbmV0IFBFUCwgYW5kIFRMUyBzb2NrZXRzIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCBpbnRlcmZhY2UgYW5kIGNvcHlfdG9faXRlciBpbnN0ZWFkIG9mIGNvcHlfdG9fdXNlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgcmVhZCBieSB1c2VyIHNwYWNlLCBhbmQgaXQgYWZmZWN0cyBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2xzLiBGdXp6aW5nIHRoZXNlIGdldHNvY2tvcHQgaGFuZGxlcnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgY29udmVyc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NDcuMTUxMjc3NjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAzNzAwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNDcyNGE1NDg2ZjJiN2U5OThhMzcwMDVkZmJiNjY3ODFkZmZiZTJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3NvY2tldC5jIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcXG5pbmRleCA4NWRjZTI5NmQ3NTEzOS4uNWEzNmU4Nzg5M2Y2NDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcXG4rKysgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xcbkBAIC04MzEsMjAgKzgzMSwxMiBAQCBzdGF0aWMgaW50IGllZWU4MDIxNTRfZGdyYW1fZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX2RncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spO1xcbi1cXG4gXFx0aW50IHZhbCwgbGVuO1xcbiBcXG4tXFx0aWYgKGxldmVsICE9IFNPTF9JRUVFODAyMTU0KVxcbi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFxuLVxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSk7XFxuK1xcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIG9wdC1cXHUwMDNlb3B0bGVuKTtcXG4gXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiBcXHRjYXNlIFdQQU5fV0FOVEFDSzpcXG5AQCAtODcxLDEwICs4NjMsMzIgQEAgc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcXG4rXFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBsZW47XFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbCwgbGVuLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWwsIGxlbikpXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbitcXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbit7XFxuK1xcdHNvY2tvcHRfdCBvcHQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IGRvX2RncmFtX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcXG5pbmRleCAzY2M1ODY5OGNiYmQzYS4uYzM2MTUyZDIyOTViODkgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcXG4rKysgYi9uZXQvaXB2Ni9yYXcuY1xcbkBAIC0xMDUxLDE0ICsxMDUxLDEyIEBAIHN0YXRpYyBpbnQgcmF3djZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdHJldHVybiBkb19yYXd2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTtcXG4gXFx0aW50IHZhbCwgbGVuO1xcbiBcXG4tXFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgSVBWNl9IRFJJTkNMOlxcbkBAIC0xMDgwLDExICsxMDc4LDEwIEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XFxuK1xcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIGxlbik7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWwsIGxlbikpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTEwOTIsNiArMTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuK1xcdHNvY2tvcHRfdCBvcHQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbiBcXHRzd2l0Y2ggKGxldmVsKSB7XFxuIFxcdGNhc2UgU09MX1JBVzpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExMDksNyArMTEwOSwxOCBAQCBzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gZG9fcmF3djZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcmF3djZfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCByYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG5kaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmNcXG5pbmRleCA3MDY5MjcxMzkzOTMzZS4uN2VmNGE5YTI0MGVmOGMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Bob25ldC9wZXAuY1xcbisrKyBiL25ldC9waG9uZXQvcGVwLmNcXG5AQCAtMTA3OCwxNyArMTA3OCwxMSBAQCBzdGF0aWMgaW50IHBlcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLVxcdFxcdFxcdFxcdGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcXG4gXFx0aW50IGxlbiwgdmFsO1xcbiBcXG4tXFx0aWYgKGxldmVsICE9IFNPTF9QTlBJUEUpXFxuLVxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIFxcdGNhc2UgUE5QSVBFX0VOQ0FQOlxcbiBcXHRcXHR2YWwgPSBwbi1cXHUwMDNlaWZpbmRleCA/IFBOUElQRV9FTkNBUF9JUCA6IFBOUElQRV9FTkNBUF9OT05FO1xcbkBAIC0xMTEyLDExICsxMTA2LDMzIEBAIHN0YXRpYyBpbnQgcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiBcXHR9XFxuIFxcbi1cXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihpbnQpLCBsZW4pO1xcbi1cXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxcbitcXHRsZW4gPSB1bWluKHNpemVvZihpbnQpLCBvcHQtXFx1MDAzZW9wdGxlbik7XFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gbGVuO1xcbitcXHRpZiAoY29weV90b19pdGVyKFxcdTAwMjZ2YWwsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXFxuK3tcXG4rXFx0c29ja29wdF90IG9wdDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxcbitcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbitcXG4rXFx0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xcbmluZGV4IDhjNTg4Y2RhYjczM2RhLi5mYmIyNzQyODdhYTVmMiAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5AQCAtNDI0LDIwICs0MjQsMTYgQEAgc3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRyZXR1cm4gbWFzaztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgX191c2VyICpvcHRsZW4sIGludCB0eClcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgdGxzX2NpcGhlcl9kZXNjICpjaXBoZXJfZGVzYztcXG4gXFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIFxcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvO1xcbiBcXHRzdHJ1Y3QgY2lwaGVyX2NvbnRleHQgKmNjdHg7XFxuLVxcdGludCBsZW47XFxuK1xcdGludCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuLVxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKCFvcHR2YWwgfHwgKGxlbiBcXHUwMDNjIHNpemVvZigqY3J5cHRvX2luZm8pKSkge1xcbitcXHRpZiAoIW9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1ZiB8fCBsZW4gXFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xcbiBcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTQ2Miw3ICs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAobGVuID09IHNpemVvZigqY3J5cHRvX2luZm8pKSB7XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbykpKVxcbitcXHRcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBzaXplb2YoKmNyeXB0b19pbmZvKSxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcXG4gXFx0XFx0XFx0cmMgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC00NzgsNDQgKzQ3NSwzOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRtZW1jcHkoY3J5cHRvX2luZm9fcmVjX3NlcShjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MpLFxcbiBcXHQgICAgICAgY2N0eC1cXHUwMDNlcmVjX3NlcSwgY2lwaGVyX2Rlc2MtXFx1MDAzZXJlY19zZXEpO1xcbiBcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8pKVxcbitcXHRpZiAoY29weV90b19pdGVyKGNyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cXHUwMDNlY3J5cHRvX2luZm8sXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvKVxcbiBcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiBcXHR1bnNpZ25lZCBpbnQgdmFsdWU7XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiAhPSBzaXplb2YodmFsdWUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHZhbHVlID0gY3R4LVxcdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi1cXHRcXHRcXHRcXHQgICAgaW50IF9fdXNlciAqb3B0bGVuKVxcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbi1cXHRpbnQgdmFsdWUsIGxlbjtcXG4rXFx0aW50IHZhbHVlLCBsZW4gPSBvcHQtXFx1MDAzZW9wdGxlbjtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZih2YWx1ZSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNTI1LDM4ICs1MTYsMzEgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRpZiAodmFsdWUgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsdWU7XFxuIFxcbi1cXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb3B0bGVuKSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSkpKVxcbitcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IHNpemVvZih2YWx1ZSk7XFxuK1xcdGlmIChjb3B5X3RvX2l0ZXIoXFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXFxuK3N0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gXFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW47XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aW50IGxlbiA9IG9wdC1cXHUwMDNlb3B0bGVuO1xcbiBcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZihwYXlsb2FkX2xlbikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKHB1dF91c2VyKHNpemVvZihwYXlsb2FkX2xlbiksIG9wdGxlbikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXG4tXFx0aWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIFxcdTAwMjZwYXlsb2FkX2xlbiwgc2l6ZW9mKHBheWxvYWRfbGVuKSkpXFxuK1xcdG9wdC1cXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHBheWxvYWRfbGVuKTtcXG4rXFx0aWYgKGNvcHlfdG9faXRlcihcXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbiksXFxuK1xcdFxcdFxcdCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHBheWxvYWRfbGVuKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi1cXHRcXHRcXHQgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtNTY1LDE3ICs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBUTFNfVFg6XFxuIFxcdGNhc2UgVExTX1JYOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbitcXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4rXFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF90eF96Yyhzaywgb3B0KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxuLVxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHNrLCBvcHQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxcbi1cXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyYyA9IC1FTk9QUk9UT09QVDtcXG5AQCAtNTkxLDEyICs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiB7XFxuIFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbitcXHRzb2Nrb3B0X3Qgb3B0O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGxldmVsICE9IFNPTF9UTFMpXFxuIFxcdFxcdHJldHVybiBjdHgtXFx1MDAzZXNrX3Byb3RvLVxcdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gXFxuLVxcdHJldHVybiBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRlcnIgPSBzb2Nrb3B0X2luaXRfdXNlcihcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkb190bHNfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXFxuaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xcbkBAIC0yOCw3ICsyOCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1fc29ja2V0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWNtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3NvY2tldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGxzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBBRl9WU09DS1xcbkBAIC00MCw2ICs0Myw0NSBAQFxcbiAjaWZuZGVmIElDTVBfRklMVEVSXFxuICNkZWZpbmUgSUNNUF9GSUxURVIgMVxcbiAjZW5kaWZcXG4rI2lmbmRlZiBJUFY2X0hEUklOQ0xcXG4rI2RlZmluZSBJUFY2X0hEUklOQ0wgMzZcXG4rI2VuZGlmXFxuKyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxcbisjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gN1xcbisjZW5kaWZcXG4rI2lmbmRlZiBBRl9JRUVFODAyMTU0XFxuKyNkZWZpbmUgQUZfSUVFRTgwMjE1NCAzNlxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxcbisjZGVmaW5lIFNPTF9JRUVFODAyMTU0IDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgV1BBTl9XQU5UQUNLXFxuKyNkZWZpbmUgV1BBTl9XQU5UQUNLIDBcXG4rI2VuZGlmXFxuKyNpZm5kZWYgQUZfUEhPTkVUXFxuKyNkZWZpbmUgQUZfUEhPTkVUIDM1XFxuKyNlbmRpZlxcbisjaWZuZGVmIFNPTF9QTlBJUEVcXG4rI2RlZmluZSBTT0xfUE5QSVBFIDI3NVxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTl9QUk9UT19QSVBFXFxuKyNkZWZpbmUgUE5fUFJPVE9fUElQRSAyXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUFxcbisjZGVmaW5lIFBOUElQRV9FTkNBUCAxXFxuKyNlbmRpZlxcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQX05PTkUgMFxcbisjZW5kaWZcXG4rI2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcXG4rI2RlZmluZSBQTlBJUEVfRU5DQVBfSVAgMVxcbisjZW5kaWZcXG4rI2lmbmRlZiBTT0xfVExTXFxuKyNkZWZpbmUgU09MX1RMUyAyODJcXG4rI2VuZGlmXFxuKyNpZm5kZWYgVENQX1VMUFxcbisjZGVmaW5lIFRDUF9VTFAgMzFcXG4rI2VuZGlmXFxuIFxcbiAvKiAtLS0tLS0tLS0tIG5ldGxpbmsgLS0tLS0tLS0tLSAqL1xcbiBcXG5AQCAtMzk0LDQgKzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXFxuIFxcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4gfVxcbiBcXG4rLyogLS0tLS0tLS0tLSByYXcgKGlwdjYpIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocmF3djYpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChyYXd2NilcXG4re1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZWZkIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJTT0NLX1JBVy9JUHY2IHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHJhd3Y2KVxcbit7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK31cXG4rXFxuK1RFU1RfRihyYXd2NiwgaGRyaW5jbF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogUmF3IGludCBvcHRpb25zIGNsYW1wIHRoZSByZXBvcnRlZCBsZW5ndGggZG93biB0byB0aGUgdXNlciBidWZmZXJcXG4rICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxcbisgKi9cXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX3VuZGVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBjaGVja3N1bV9kZWZhdWx0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBBIG5vbi1JQ01QdjYgcmF3IHNvY2tldCBoYXMgdGhlIGNoZWNrc3VtIGRpc2FibGVkLCByZXBvcnRlZCBhcyAtMS4gKi9cXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9DSEVDS1NVTSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9FUSgtMSwgdmFsKTtcXG4rfVxcbitcXG4rVEVTVF9GKHJhd3Y2LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHQvKiBTT0xfUkFXIHJlYWNoZXMgZG9fcmF3djZfZ2V0c29ja29wdCgpIGRpcmVjdGx5LiAqL1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIDB4N2ZmZiwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIGllZWU4MDIxNTQgKGRncmFtKSAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKGllZWU4MDIxNTQpXFxuK3tcXG4rXFx0aW50IGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChpZWVlODAyMTU0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lFRUU4MDIxNTQsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX0lFRUU4MDIxNTQgZGdyYW0gc29ja2V0OiAlc1xcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oaWVlZTgwMjE1NClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xcbit9XFxuK1xcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19vdmVyc2l6ZV9jbGFtcGVkKVxcbit7XFxuK1xcdGNoYXIgYnVmWzE2XSA9IHt9O1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcXG4rXFx0XFx0XFx0XFx0YnVmLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKGllZWU4MDIxNTQsIHdhbnRhY2tfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKDIsIG9wdGxlbik7XFxuK31cXG4rXFxuK1RFU1RfRihpZWVlODAyMTU0LCBiYWRfb3B0bmFtZSlcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCAweDdmZmYsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIGRncmFtX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9JRUVFODAyMTU0LiAqL1xcbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX2xldmVsKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1JBVywgV1BBTl9XQU5UQUNLLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU9QTk9UU1VQUCwgZXJybm8pO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIC0tLS0tLS0tLS0gcGhvbmV0IChwZXApIC0tLS0tLS0tLS0gKi9cXG4rXFxuK0ZJWFRVUkUocGhvbmV0KVxcbit7XFxuK1xcdGludCBmZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAocGhvbmV0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX1BIT05FVCwgU09DS19TRVFQQUNLRVQsIFBOX1BST1RPX1BJUEUpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIkFGX1BIT05FVCBwaXBlIHNvY2tldDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHBob25ldClcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbit9XFxuK1xcbitURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsID0gLTE7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfVFJVRSh2YWwgPT0gUE5QSVBFX0VOQ0FQX05PTkUgfHwgdmFsID09IFBOUElQRV9FTkNBUF9JUCk7XFxuK31cXG4rXFxuK1RFU1RfRihwaG9uZXQsIGVuY2FwX292ZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoYnVmKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXFxuK1xcdFxcdFxcdFxcdGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK31cXG4rXFxuKy8qIHBlcCBjbGFtcHMgdGhlIHJlcG9ydGVkIGxlbmd0aCBkb3duIHRvIHRoZSB1c2VyIGJ1ZmZlci4gVXNlIGFuXFxuKyAqIGludC1zaXplZCBiYWNraW5nIGJ1ZmZlciB3aXRoIGEgc2hvcnQgb3B0bGVuIHNvIHRoZSBiYXNlbGluZSBrZXJuZWwsXFxuKyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxcbisgKi9cXG4rVEVTVF9GKHBob25ldCwgZW5jYXBfdW5kZXJzaXplX2NsYW1wZWQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9QTlBJUEUsIFBOUElQRV9FTkNBUCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoMiwgb3B0bGVuKTtcXG4rfVxcbitcXG4rVEVTVF9GKHBob25ldCwgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbjtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfUE5QSVBFLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK1xcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcXG4rfVxcbitcXG4rLyogcGVwX2dldHNvY2tvcHQoKSByZWplY3RzIGFueSBsZXZlbCBvdGhlciB0aGFuIFNPTF9QTlBJUEUuICovXFxuK1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgXFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xcbit9XFxuK1xcbisvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKHRscylcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdGludCBzZmQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKHRscylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYSA9IHtcXG4rXFx0XFx0LnNpbl9mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKSxcXG4rXFx0fTtcXG4rXFx0c29ja2xlbl90IGFsZW4gPSBzaXplb2YoYSk7XFxuK1xcdGludCBsZmQ7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VmZCA9IC0xO1xcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSAtMTtcXG4rXFxuK1xcdGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChsZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRDUCBzb2NrZXQ6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGJpbmQobGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmEsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHxcXG4rXFx0ICAgIGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhLCBcXHUwMDI2YWxlbikpIHtcXG4rXFx0XFx0Y2xvc2UobGZkKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJsaXN0ZW5lciBzZXR1cDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHR9XFxuK1xcdHNlbGYtXFx1MDAzZWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNvbm5lY3Qoc2VsZi1cXHUwMDNlZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YSwgc2l6ZW9mKGEpKSkge1xcbitcXHRcXHRjbG9zZShsZmQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImNvbm5lY3Q6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXHRzZWxmLVxcdTAwM2VzZmQgPSBhY2NlcHQobGZkLCBOVUxMLCBOVUxMKTtcXG4rXFx0Y2xvc2UobGZkKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiVENQX1VMUD10bHM6ICVzIChidWlsdCB3aXRob3V0IFRMUz8pXFxcIixcXG4rXFx0XFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHRscylcXG4re1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZXNmZCk7XFxuK31cXG4rXFxuKy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXFxuK1RFU1RfRih0bHMsIHR4X3plcm9jb3B5X2V4YWN0KVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcXG4rXFx0aW50IHZhbCA9IC0xO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWF9aRVJPQ09QWV9STyxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnZhbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XFxuK1xcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxcbit7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2dmFsLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcXG4rfVxcbitcXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZVxcbisgKiBjb252ZXJ0ZWQgY29kZSB0ZXN0cyBvcHQtXFx1MDAzZWl0ZXJfb3V0LnVidWYgaW4gcGxhY2Ugb2Ygb3B0dmFsLlxcbisgKi9cXG4rVEVTVF9GKHRscywgY29uZl9udWxsX29wdHZhbClcXG4re1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gNjQ7XFxuK1xcbitcXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgTlVMTCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuK1RFU1RfRih0bHMsIGNvbmZfc2hvcnQpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IDI7XFxuK1xcdGNoYXIgYnVmWzJdO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIGJ1ZiwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7XFxuK31cXG4rXFxuKy8qIFRMU19UWCBiZWZvcmUgY3J5cHRvIGlzIHNldCByZXBvcnRzIG5vdC1yZWFkeS4gKi9cXG4rVEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xcbitcXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFxcdTAwMjZpbmZvLCBcXHUwMDI2b3B0bGVuKSk7XFxuK1xcdEFTU0VSVF9FUShFQlVTWSwgZXJybm8pO1xcbit9XFxuK1xcbisvKiBTZXQgVFggY3J5cHRvLCB0aGVuIHJlYWQgaXQgYmFjayBhdCB0aGUgYmFzZSBhbmQgZnVsbCBzaXplcywgZXhlcmNpc2luZ1xcbisgKiBib3RoIGNvcHlfdG9faXRlcigpIGJyYW5jaGVzLiBTS0lQIGlmIEFFUy1HQ00gaXMgdW5hdmFpbGFibGUuXFxuKyAqL1xcbitURVNUX0YodGxzLCBjb25mX2NyeXB0b19yb3VuZHRyaXApXFxuK3tcXG4rXFx0c3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4IHR4ID0ge1xcbitcXHRcXHQuaW5mby52ZXJzaW9uID0gVExTXzFfMl9WRVJTSU9OLFxcbitcXHRcXHQuaW5mby5jaXBoZXJfdHlwZSA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOCBmdWxsO1xcbitcXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvIGJhc2U7XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2dHgsIHNpemVvZih0eCkpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldCBUTFNfVFggYWVzX2djbV8xMjg6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFxuK1xcdG9wdGxlbiA9IHNpemVvZihiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXFx1MDAyNmJhc2UsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKHNpemVvZihiYXNlKSwgb3B0bGVuKTtcXG4rXFx0QVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTtcXG4rXFx0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGJhc2UuY2lwaGVyX3R5cGUpO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKGZ1bGwpO1xcbitcXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVxcdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBcXHUwMDI2ZnVsbCwgXFx1MDAyNm9wdGxlbikpO1xcbitcXHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xcbitcXHRBU1NFUlRfRVEoVExTX0NJUEhFUl9BRVNfR0NNXzEyOCwgZnVsbC5pbmZvLmNpcGhlcl90eXBlKTtcXG4rfVxcbitcXG4rVEVTVF9GKHRscywgYmFkX29wdG5hbWUpXFxuK3tcXG4rXFx0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBTT0xfVExTLCAweDdmZmYsIFxcdTAwMjZ2YWwsIFxcdTAwMjZvcHRsZW4pKTtcXG4rXFx0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjQ3Ljg5Mjc4MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDUwMzk4MTg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X1NPQ0tFVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiUEhPTkVUXCIsXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZ3JhbV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJyYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJwZXBfZ2V0c29ja29wdFwiLFxuICAgIFwidGxzX2dldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZGdyYW0sIElQdjYgcmF3LCBQaG9uZXQgUEVQLCBhbmQgVExTIHNvY2tldHMgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IGludGVyZmFjZSBhbmQgY29weV90b19pdGVyIGluc3RlYWQgb2YgY29weV90b191c2VyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHNvY2tldCBvcHRpb25zIGFyZSByZWFkIGJ5IHVzZXIgc3BhY2UsIGFuZCBpdCBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbHMuIEZ1enppbmcgdGhlc2UgZ2V0c29ja29wdCBoYW5kbGVycyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDcyNGE1NDg2ZjJiN2U5OThhMzcwMDVkZmJiNjY3ODFkZmZiZTJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMjE6MTc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYyBiL25ldC9pZWVlODAyMTU0L3NvY2tldC5jXG5pbmRleCA4NWRjZTI5NmQ3NTEzOS4uNWEzNmU4Nzg5M2Y2NDcgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1xuKysrIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmNcbkBAIC04MzEsMjAgKzgzMSwxMiBAQCBzdGF0aWMgaW50IGllZWU4MDIxNTRfZGdyYW1fZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBkZ3JhbV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuK3N0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7XG4tXG4gXHRpbnQgdmFsLCBsZW47XG4gXG4tXHRpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcbitcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIG9wdC1cdTAwM2VvcHRsZW4pO1xuIFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFdQQU5fV0FOVEFDSzpcbkBAIC04NzEsMTAgKzg2MywzMiBAQCBzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0aWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSlcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbCwgbGVuLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2dmFsLCBsZW4pKVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4rXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbit7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbitcbitcdGlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fZGdyYW1fZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXHUwMDI2b3B0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAocHV0X3VzZXIob3B0Lm9wdGxlbiwgb3B0bGVuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuY1xuaW5kZXggM2NjNTg2OThjYmJkM2EuLmMzNjE1MmQyMjk1Yjg5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcbisrKyBiL25ldC9pcHY2L3Jhdy5jXG5AQCAtMTA1MSwxNCArMTA1MSwxMiBAQCBzdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTtcbiBcdGludCB2YWwsIGxlbjtcbiBcbi1cdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0bGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBJUFY2X0hEUklOQ0w6XG5AQCAtMTA4MCwxMSArMTA3OCwxMCBAQCBzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuIFxuLVx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YoaW50KSwgbGVuKTtcbitcdGxlbiA9IHVtaW4oc2l6ZW9mKGludCksIGxlbik7XG4gXG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWwsIGxlbikpXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuK1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEwOTIsNiArMTA4OSw5IEBAIHN0YXRpYyBpbnQgZG9fcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gc3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbiB7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbitcbiBcdHN3aXRjaCAobGV2ZWwpIHtcbiBcdGNhc2UgU09MX1JBVzpcbiBcdFx0YnJlYWs7XG5AQCAtMTEwOSw3ICsxMTA5LDE4IEBAIHN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHVybiBpcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gZG9fcmF3djZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmF3djZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG5kaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmNcbmluZGV4IDcwNjkyNzEzOTM5MzNlLi43ZWY0YTlhMjQwZWY4YyAxMDA2NDRcbi0tLSBhL25ldC9waG9uZXQvcGVwLmNcbisrKyBiL25ldC9waG9uZXQvcGVwLmNcbkBAIC0xMDc4LDE3ICsxMDc4LDExIEBAIHN0YXRpYyBpbnQgcGVwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tXHRcdFx0XHRjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb19wZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgcGVwX3NvY2sgKnBuID0gcGVwX3NrKHNrKTtcbiBcdGludCBsZW4sIHZhbDtcbiBcbi1cdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuLVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiBcdGNhc2UgUE5QSVBFX0VOQ0FQOlxuIFx0XHR2YWwgPSBwbi1cdTAwM2VpZmluZGV4ID8gUE5QSVBFX0VOQ0FQX0lQIDogUE5QSVBFX0VOQ0FQX05PTkU7XG5AQCAtMTExMiwxMSArMTEwNiwzMyBAQCBzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcdH1cbiBcbi1cdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7XG4tXHRpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKVxuK1x0bGVuID0gdW1pbihzaXplb2YoaW50KSwgb3B0LVx1MDAzZW9wdGxlbik7XG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuK1x0aWYgKGNvcHlfdG9faXRlcihcdTAwMjZ2YWwsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgb3B0dmFsKSlcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBlcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbitcdFx0XHQgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbit7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbitcbitcdGlmIChsZXZlbCAhPSBTT0xfUE5QSVBFKVxuK1x0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuK1xuK1x0ZXJyID0gc29ja29wdF9pbml0X3VzZXIoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZG9fcGVwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0aWYgKHB1dF91c2VyKG9wdC5vcHRsZW4sIG9wdGxlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggOGM1ODhjZGFiNzMzZGEuLmZiYjI3NDI4N2FhNWYyIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC00MjQsMjAgKzQyNCwxNiBAQCBzdGF0aWMgX19wb2xsX3QgdGxzX3NrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgaW50IF9fdXNlciAqb3B0bGVuLCBpbnQgdHgpXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQsIGludCB0eClcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0Y29uc3Qgc3RydWN0IHRsc19jaXBoZXJfZGVzYyAqY2lwaGVyX2Rlc2M7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvO1xuIFx0c3RydWN0IGNpcGhlcl9jb250ZXh0ICpjY3R4O1xuLVx0aW50IGxlbjtcbitcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRpZiAoIW9wdHZhbCB8fCAobGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkpIHtcbitcdGlmICghb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYgfHwgbGVuIFx1MDAzYyBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ2Miw3ICs0NTgsOCBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0fVxuIFxuIFx0aWYgKGxlbiA9PSBzaXplb2YoKmNyeXB0b19pbmZvKSkge1xuLVx0XHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgY3J5cHRvX2luZm8sIHNpemVvZigqY3J5cHRvX2luZm8pKSlcbitcdFx0aWYgKGNvcHlfdG9faXRlcihjcnlwdG9faW5mbywgc2l6ZW9mKCpjcnlwdG9faW5mbyksXG4rXHRcdFx0XHQgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBzaXplb2YoKmNyeXB0b19pbmZvKSlcbiBcdFx0XHRyYyA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTQ3OCw0NCArNDc1LDM4IEBAIHN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRtZW1jcHkoY3J5cHRvX2luZm9fcmVjX3NlcShjcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MpLFxuIFx0ICAgICAgIGNjdHgtXHUwMDNlcmVjX3NlcSwgY2lwaGVyX2Rlc2MtXHUwMDNlcmVjX3NlcSk7XG4gXG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKSlcbitcdGlmIChjb3B5X3RvX2l0ZXIoY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvLFxuK1x0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKVxuIFx0XHRyYyA9IC1FRkFVTFQ7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHR1bnNpZ25lZCBpbnQgdmFsdWU7XG4tXHRpbnQgbGVuO1xuLVxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpbnQgbGVuID0gb3B0LVx1MDAzZW9wdGxlbjtcbiBcbiBcdGlmIChsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR2YWx1ZSA9IGN0eC1cdTAwM2V6ZXJvY29weV9zZW5kZmlsZTtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnZhbHVlLCBzaXplb2YodmFsdWUpLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZih2YWx1ZSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi1cdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbi1cdGludCB2YWx1ZSwgbGVuO1xuK1x0aW50IHZhbHVlLCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiAhPSBUTFNfMV8zX1ZFUlNJT04pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRpZiAobGVuIFx1MDAzYyBzaXplb2YodmFsdWUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC01MjUsMzggKzUxNiwzMSBAQCBzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRpZiAodmFsdWUgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWx1ZTtcbiBcbi1cdGlmIChwdXRfdXNlcihzaXplb2YodmFsdWUpLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCBcdTAwMjZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkpXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gc2l6ZW9mKHZhbHVlKTtcbitcdGlmIChjb3B5X3RvX2l0ZXIoXHUwMDI2dmFsdWUsIHNpemVvZih2YWx1ZSksIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gc2l6ZW9mKHZhbHVlKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsXG4tXHRcdFx0XHRcdCAgICBpbnQgX191c2VyICpvcHRsZW4pXG4rc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIFx0dTE2IHBheWxvYWRfbGVuID0gY3R4LVx1MDAzZXR4X21heF9wYXlsb2FkX2xlbjtcbi1cdGludCBsZW47XG4tXG4tXHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGludCBsZW4gPSBvcHQtXHUwMDNlb3B0bGVuO1xuIFxuIFx0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKHBheWxvYWRfbGVuKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAocHV0X3VzZXIoc2l6ZW9mKHBheWxvYWRfbGVuKSwgb3B0bGVuKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXG4tXHRpZiAoY29weV90b191c2VyKG9wdHZhbCwgXHUwMDI2cGF5bG9hZF9sZW4sIHNpemVvZihwYXlsb2FkX2xlbikpKVxuK1x0b3B0LVx1MDAzZW9wdGxlbiA9IHNpemVvZihwYXlsb2FkX2xlbik7XG4rXHRpZiAoY29weV90b19pdGVyKFx1MDAyNnBheWxvYWRfbGVuLCBzaXplb2YocGF5bG9hZF9sZW4pLFxuK1x0XHRcdCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9IHNpemVvZihwYXlsb2FkX2xlbikpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi1cdFx0XHQgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbitzdGF0aWMgaW50IGRvX3Rsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTY1LDE3ICs1NDksMTYgQEAgc3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIFRMU19UWDpcbiBcdGNhc2UgVExTX1JYOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxuLVx0XHRcdFx0XHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xuK1x0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdCwgb3B0bmFtZSA9PSBUTFNfVFgpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVExTX1RYX1pFUk9DT1BZX1JPOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7XG4rXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfemMoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfUlhfRVhQRUNUX05PX1BBRDpcbi1cdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxuLVx0XHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG4rXHRcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmMgPSAtRU5PUFJPVE9PUFQ7XG5AQCAtNTkxLDEyICs1NzQsMjUgQEAgc3RhdGljIGludCB0bHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4rXHRzb2Nrb3B0X3Qgb3B0O1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChsZXZlbCAhPSBTT0xfVExTKVxuIFx0XHRyZXR1cm4gY3R4LVx1MDAzZXNrX3Byb3RvLVx1MDAzZWdldHNvY2tvcHQoc2ssIGxldmVsLFxuIFx0XHRcdFx0XHRcdCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gXG4tXHRyZXR1cm4gZG9fdGxzX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbitcdGVyciA9IHNvY2tvcHRfaW5pdF91c2VyKFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChwdXRfdXNlcihvcHQub3B0bGVuLCBvcHRsZW4pKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2NyeXB0b19pbmZvKGNvbnN0IHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuY1xuaW5kZXggZmU1YTUyNjhiYzM0ZWMuLjk3NDA2NWEyM2ZhODI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNcbkBAIC0yOCw3ICsyOCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtX3NvY2tldHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rscy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbiBcbiAjaWZuZGVmIEFGX1ZTT0NLXG5AQCAtNDAsNiArNDMsNDUgQEBcbiAjaWZuZGVmIElDTVBfRklMVEVSXG4gI2RlZmluZSBJQ01QX0ZJTFRFUiAxXG4gI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0hEUklOQ0xcbisjZGVmaW5lIElQVjZfSERSSU5DTCAzNlxuKyNlbmRpZlxuKyNpZm5kZWYgSVBWNl9DSEVDS1NVTVxuKyNkZWZpbmUgSVBWNl9DSEVDS1NVTSA3XG4rI2VuZGlmXG4rI2lmbmRlZiBBRl9JRUVFODAyMTU0XG4rI2RlZmluZSBBRl9JRUVFODAyMTU0IDM2XG4rI2VuZGlmXG4rI2lmbmRlZiBTT0xfSUVFRTgwMjE1NFxuKyNkZWZpbmUgU09MX0lFRUU4MDIxNTQgMFxuKyNlbmRpZlxuKyNpZm5kZWYgV1BBTl9XQU5UQUNLXG4rI2RlZmluZSBXUEFOX1dBTlRBQ0sgMFxuKyNlbmRpZlxuKyNpZm5kZWYgQUZfUEhPTkVUXG4rI2RlZmluZSBBRl9QSE9ORVQgMzVcbisjZW5kaWZcbisjaWZuZGVmIFNPTF9QTlBJUEVcbisjZGVmaW5lIFNPTF9QTlBJUEUgMjc1XG4rI2VuZGlmXG4rI2lmbmRlZiBQTl9QUk9UT19QSVBFXG4rI2RlZmluZSBQTl9QUk9UT19QSVBFIDJcbisjZW5kaWZcbisjaWZuZGVmIFBOUElQRV9FTkNBUFxuKyNkZWZpbmUgUE5QSVBFX0VOQ0FQIDFcbisjZW5kaWZcbisjaWZuZGVmIFBOUElQRV9FTkNBUF9OT05FXG4rI2RlZmluZSBQTlBJUEVfRU5DQVBfTk9ORSAwXG4rI2VuZGlmXG4rI2lmbmRlZiBQTlBJUEVfRU5DQVBfSVBcbisjZGVmaW5lIFBOUElQRV9FTkNBUF9JUCAxXG4rI2VuZGlmXG4rI2lmbmRlZiBTT0xfVExTXG4rI2RlZmluZSBTT0xfVExTIDI4MlxuKyNlbmRpZlxuKyNpZm5kZWYgVENQX1VMUFxuKyNkZWZpbmUgVENQX1VMUCAzMVxuKyNlbmRpZlxuIFxuIC8qIC0tLS0tLS0tLS0gbmV0bGluayAtLS0tLS0tLS0tICovXG4gXG5AQCAtMzk0LDQgKzQzNiwzODYgQEAgVEVTVF9GKHJhdywgYmFkX29wdG5hbWUpXG4gXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4gfVxuIFxuKy8qIC0tLS0tLS0tLS0gcmF3IChpcHY2KSAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShyYXd2Nilcbit7XG4rXHRpbnQgZmQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKHJhd3Y2KVxuK3tcbitcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfUkFXLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiU09DS19SQVcvSVB2NiBzb2NrZXQ6ICVzXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04ocmF3djYpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX2V4YWN0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9IRFJJTkNMLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbitcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBoZHJpbmNsX292ZXJzaXplX2NsYW1wZWQpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gc2l6ZW9mKGJ1Zik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBJUFBST1RPX0lQVjYsIElQVjZfSERSSU5DTCxcbitcdFx0XHRcdGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rfVxuK1xuKy8qIFJhdyBpbnQgb3B0aW9ucyBjbGFtcCB0aGUgcmVwb3J0ZWQgbGVuZ3RoIGRvd24gdG8gdGhlIHVzZXIgYnVmZmVyXG4rICogaW5zdGVhZCBvZiByZXR1cm5pbmcgRUlOVkFMIG9uIGEgc2hvcnQgYnVmZmVyLlxuKyAqL1xuK1RFU1RfRihyYXd2NiwgaGRyaW5jbF91bmRlcnNpemVfY2xhbXBlZClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuID0gMjtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0hEUklOQ0wsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihyYXd2NiwgY2hlY2tzdW1fZGVmYXVsdClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdC8qIEEgbm9uLUlDTVB2NiByYXcgc29ja2V0IGhhcyB0aGUgY2hlY2tzdW0gZGlzYWJsZWQsIHJlcG9ydGVkIGFzIC0xLiAqL1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0NIRUNLU1VNLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbitcdEFTU0VSVF9FUSgtMSwgdmFsKTtcbit9XG4rXG4rVEVTVF9GKHJhd3Y2LCBiYWRfb3B0bmFtZSlcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0LyogU09MX1JBVyByZWFjaGVzIGRvX3Jhd3Y2X2dldHNvY2tvcHQoKSBkaXJlY3RseS4gKi9cbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUkFXLCAweDdmZmYsIFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogLS0tLS0tLS0tLSBpZWVlODAyMTU0IChkZ3JhbSkgLS0tLS0tLS0tLSAqL1xuK1xuK0ZJWFRVUkUoaWVlZTgwMjE1NClcbit7XG4rXHRpbnQgZmQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGllZWU4MDIxNTQpXG4re1xuK1x0c2VsZi1cdTAwM2VmZCA9IHNvY2tldChBRl9JRUVFODAyMTU0LCBTT0NLX0RHUkFNLCAwKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJBRl9JRUVFODAyMTU0IGRncmFtIHNvY2tldDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihpZWVlODAyMTU0KVxuK3tcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX2V4YWN0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsID0gLTE7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9JRUVFODAyMTU0LCBXUEFOX1dBTlRBQ0ssXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IDAgfHwgdmFsID09IDEpO1xuK31cbitcbitURVNUX0YoaWVlZTgwMjE1NCwgd2FudGFja19vdmVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdGNoYXIgYnVmWzE2XSA9IHt9O1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX0lFRUU4MDIxNTQsIFdQQU5fV0FOVEFDSyxcbitcdFx0XHRcdGJ1ZiwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGludCksIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihpZWVlODAyMTU0LCB3YW50YWNrX3VuZGVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgV1BBTl9XQU5UQUNLLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUSgyLCBvcHRsZW4pO1xuK31cbitcbitURVNUX0YoaWVlZTgwMjE1NCwgYmFkX29wdG5hbWUpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbjtcbitcdGludCB2YWw7XG4rXG4rXHRvcHRsZW4gPSBzaXplb2YodmFsKTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfSUVFRTgwMjE1NCwgMHg3ZmZmLFxuK1x0XHRcdFx0IFx1MDAyNnZhbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoRU5PUFJPVE9PUFQsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogZGdyYW1fZ2V0c29ja29wdCgpIHJlamVjdHMgYW55IGxldmVsIG90aGVyIHRoYW4gU09MX0lFRUU4MDIxNTQuICovXG4rVEVTVF9GKGllZWU4MDIxNTQsIGJhZF9sZXZlbClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIFdQQU5fV0FOVEFDSyxcbitcdFx0XHRcdCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVPUE5PVFNVUFAsIGVycm5vKTtcbitcdEFTU0VSVF9FUShzaXplb2YodmFsKSwgb3B0bGVuKTtcbit9XG4rXG4rLyogLS0tLS0tLS0tLSBwaG9uZXQgKHBlcCkgLS0tLS0tLS0tLSAqL1xuK1xuK0ZJWFRVUkUocGhvbmV0KVxuK3tcbitcdGludCBmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAocGhvbmV0KVxuK3tcbitcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfUEhPTkVULCBTT0NLX1NFUVBBQ0tFVCwgUE5fUFJPVE9fUElQRSk7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiQUZfUEhPTkVUIHBpcGUgc29ja2V0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHBob25ldClcbit7XG4rXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuK31cbitcbitURVNUX0YocGhvbmV0LCBlbmNhcF9leGFjdClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbCA9IC0xO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKHNpemVvZihpbnQpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX1RSVUUodmFsID09IFBOUElQRV9FTkNBUF9OT05FIHx8IHZhbCA9PSBQTlBJUEVfRU5DQVBfSVApO1xuK31cbitcbitURVNUX0YocGhvbmV0LCBlbmNhcF9vdmVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdGNoYXIgYnVmWzE2XSA9IHt9O1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihidWYpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgUE5QSVBFX0VOQ0FQLFxuK1x0XHRcdFx0YnVmLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbit9XG4rXG4rLyogcGVwIGNsYW1wcyB0aGUgcmVwb3J0ZWQgbGVuZ3RoIGRvd24gdG8gdGhlIHVzZXIgYnVmZmVyLiBVc2UgYW5cbisgKiBpbnQtc2l6ZWQgYmFja2luZyBidWZmZXIgd2l0aCBhIHNob3J0IG9wdGxlbiBzbyB0aGUgYmFzZWxpbmUga2VybmVsLFxuKyAqIHdoaWNoIHdyaXRlcyBhIGZ1bGwgaW50IHZpYSBwdXRfdXNlcigpLCBkb2VzIG5vdCBzY3JpYmJsZSBwYXN0IGl0LlxuKyAqL1xuK1RFU1RfRihwaG9uZXQsIGVuY2FwX3VuZGVyc2l6ZV9jbGFtcGVkKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRBU1NFUlRfRVEoMCwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfUE5QSVBFLCBQTlBJUEVfRU5DQVAsXG4rXHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKDIsIG9wdGxlbik7XG4rfVxuK1xuK1RFU1RfRihwaG9uZXQsIGJhZF9vcHRuYW1lKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRpbnQgdmFsO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKHZhbCk7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1BOUElQRSwgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKHZhbCksIG9wdGxlbik7XG4rfVxuK1xuKy8qIHBlcF9nZXRzb2Nrb3B0KCkgcmVqZWN0cyBhbnkgbGV2ZWwgb3RoZXIgdGhhbiBTT0xfUE5QSVBFLiAqL1xuK1RFU1RfRihwaG9uZXQsIGJhZF9sZXZlbClcbit7XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0aW50IHZhbDtcbitcbitcdG9wdGxlbiA9IHNpemVvZih2YWwpO1xuK1xuK1x0QVNTRVJUX0VRKC0xLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9SQVcsIFBOUElQRV9FTkNBUCwgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFTk9QUk9UT09QVCwgZXJybm8pO1xuK1x0QVNTRVJUX0VRKHNpemVvZih2YWwpLCBvcHRsZW4pO1xuK31cbitcbisvKiAtLS0tLS0tLS0tIHRscyAtLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRSh0bHMpXG4re1xuK1x0aW50IGZkO1xuK1x0aW50IHNmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAodGxzKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGEpO1xuK1x0aW50IGxmZDtcbitcbitcdHNlbGYtXHUwMDNlZmQgPSAtMTtcbitcdHNlbGYtXHUwMDNlc2ZkID0gLTE7XG4rXG4rXHRsZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGxmZCBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwiVENQIHNvY2tldDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGlmIChiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIHNpemVvZihhKSkgfHwgbGlzdGVuKGxmZCwgMSkgfHxcbitcdCAgICBnZXRzb2NrbmFtZShsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhLCBcdTAwMjZhbGVuKSkge1xuK1x0XHRjbG9zZShsZmQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJsaXN0ZW5lciBzZXR1cDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdHNlbGYtXHUwMDNlZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGNvbm5lY3Qoc2VsZi1cdTAwM2VmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmEsIHNpemVvZihhKSkpIHtcbitcdFx0Y2xvc2UobGZkKTtcbitcdFx0U0tJUChyZXR1cm4sIFwiY29ubmVjdDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdHNlbGYtXHUwMDNlc2ZkID0gYWNjZXB0KGxmZCwgTlVMTCwgTlVMTCk7XG4rXHRjbG9zZShsZmQpO1xuK1x0aWYgKHNldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwidGxzXCIsIHNpemVvZihcInRsc1wiKSkpXG4rXHRcdFNLSVAocmV0dXJuLCBcIlRDUF9VTFA9dGxzOiAlcyAoYnVpbHQgd2l0aG91dCBUTFM/KVwiLFxuK1x0XHQgICAgIHN0cmVycm9yKGVycm5vKSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04odGxzKVxuK3tcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rXHRpZiAoc2VsZi1cdTAwM2VzZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShzZWxmLVx1MDAzZXNmZCk7XG4rfVxuK1xuKy8qIGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKCk6IGZpeGVkLXNpemUgaW50LCBleGFjdCBsZW5ndGggcmVxdWlyZWQuICovXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfZXhhY3QpXG4re1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbnQpO1xuK1x0aW50IHZhbCA9IC0xO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYX1pFUk9DT1BZX1JPLFxuK1x0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShzaXplb2YoaW50KSwgb3B0bGVuKTtcbitcdEFTU0VSVF9UUlVFKHZhbCA9PSAwIHx8IHZhbCA9PSAxKTtcbit9XG4rXG4rVEVTVF9GKHRscywgdHhfemVyb2NvcHlfd3JvbmdfbGVuKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0aW50IHZhbDtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFhfWkVST0NPUFlfUk8sXG4rXHRcdFx0XHQgXHUwMDI2dmFsLCBcdTAwMjZvcHRsZW4pKTtcbitcdEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTtcbit9XG4rXG4rLyogZG9fdGxzX2dldHNvY2tvcHRfY29uZigpOiBOVUxMIG9wdHZhbCBzdGlsbCB5aWVsZHMgRUlOVkFMIC0tIHRoZVxuKyAqIGNvbnZlcnRlZCBjb2RlIHRlc3RzIG9wdC1cdTAwM2VpdGVyX291dC51YnVmIGluIHBsYWNlIG9mIG9wdHZhbC5cbisgKi9cbitURVNUX0YodGxzLCBjb25mX251bGxfb3B0dmFsKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSA2NDtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIE5VTEwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuK31cbitcbitURVNUX0YodGxzLCBjb25mX3Nob3J0KVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSAyO1xuK1x0Y2hhciBidWZbMl07XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgVExTX1RYLCBidWYsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pO1xuK31cbitcbisvKiBUTFNfVFggYmVmb3JlIGNyeXB0byBpcyBzZXQgcmVwb3J0cyBub3QtcmVhZHkuICovXG4rVEVTVF9GKHRscywgY29uZl9ub3RfcmVhZHkpXG4re1xuK1x0c3RydWN0IHRsc19jcnlwdG9faW5mbyBpbmZvO1xuK1x0c29ja2xlbl90IG9wdGxlbiA9IHNpemVvZihpbmZvKTtcbitcbitcdEFTU0VSVF9FUSgtMSwgZ2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNmluZm8sIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVCVVNZLCBlcnJubyk7XG4rfVxuK1xuKy8qIFNldCBUWCBjcnlwdG8sIHRoZW4gcmVhZCBpdCBiYWNrIGF0IHRoZSBiYXNlIGFuZCBmdWxsIHNpemVzLCBleGVyY2lzaW5nXG4rICogYm90aCBjb3B5X3RvX2l0ZXIoKSBicmFuY2hlcy4gU0tJUCBpZiBBRVMtR0NNIGlzIHVuYXZhaWxhYmxlLlxuKyAqL1xuK1RFU1RfRih0bHMsIGNvbmZfY3J5cHRvX3JvdW5kdHJpcClcbit7XG4rXHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggdHggPSB7XG4rXHRcdC5pbmZvLnZlcnNpb24gPSBUTFNfMV8yX1ZFUlNJT04sXG4rXHRcdC5pbmZvLmNpcGhlcl90eXBlID0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOCxcbitcdH07XG4rXHRzdHJ1Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjggZnVsbDtcbitcdHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gYmFzZTtcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXG4rXHRpZiAoc2V0c29ja29wdChzZWxmLVx1MDAzZWZkLCBTT0xfVExTLCBUTFNfVFgsIFx1MDAyNnR4LCBzaXplb2YodHgpKSlcbitcdFx0U0tJUChyZXR1cm4sIFwic2V0IFRMU19UWCBhZXNfZ2NtXzEyODogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdG9wdGxlbiA9IHNpemVvZihiYXNlKTtcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2YmFzZSwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGJhc2UpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX0VRKFRMU18xXzJfVkVSU0lPTiwgYmFzZS52ZXJzaW9uKTtcbitcdEFTU0VSVF9FUShUTFNfQ0lQSEVSX0FFU19HQ01fMTI4LCBiYXNlLmNpcGhlcl90eXBlKTtcbitcbitcdG9wdGxlbiA9IHNpemVvZihmdWxsKTtcbitcdEFTU0VSVF9FUSgwLCBnZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIFNPTF9UTFMsIFRMU19UWCwgXHUwMDI2ZnVsbCwgXHUwMDI2b3B0bGVuKSk7XG4rXHRBU1NFUlRfRVEoc2l6ZW9mKGZ1bGwpLCBvcHRsZW4pO1xuK1x0QVNTRVJUX0VRKFRMU19DSVBIRVJfQUVTX0dDTV8xMjgsIGZ1bGwuaW5mby5jaXBoZXJfdHlwZSk7XG4rfVxuK1xuK1RFU1RfRih0bHMsIGJhZF9vcHRuYW1lKVxuK3tcbitcdHNvY2tsZW5fdCBvcHRsZW4gPSBzaXplb2YoaW50KTtcbitcdGludCB2YWw7XG4rXG4rXHRBU1NFUlRfRVEoLTEsIGdldHNvY2tvcHQoc2VsZi1cdTAwM2VmZCwgU09MX1RMUywgMHg3ZmZmLCBcdTAwMjZ2YWwsIFx1MDAyNm9wdGxlbikpO1xuK1x0QVNTRVJUX0VRKEVOT1BST1RPT1BULCBlcnJubyk7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo0Ny44OTI3ODU1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzg3MTM5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBHZXRzb2Nrb3B0IFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBob3cgdGhlIGtlcm5lbCdzIGBnZXRzb2Nrb3B0YCBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB1c2VyIHNwYWNlLiBJIHNlZSBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIG5ldHdvcmsgc3Vic3lzdGVtczogYGllZWU4MDIxNTRgLCBgaXB2NiByYXdgLCBgcGhvbmV0YCwgYW5kIGB0bHNgLiBUaGUgcGF0dGVybiBpcyBjb25zaXN0ZW50OiB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSByZWZhY3RvcmluZyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9ucy4gSW5zdGVhZCBvZiBkaXJlY3RseSBkZWFsaW5nIHdpdGggYGNoYXIgX191c2VyICpvcHR2YWxgIGFuZCBgaW50IF9fdXNlciAqb3B0bGVuYCwgaXQncyBzd2l0Y2hpbmcgdG8gYSBgc29ja29wdF90ICpvcHRgIGFwcHJvYWNoIGFuZCBlbXBsb3lpbmcgZnVuY3Rpb25zIGxpa2UgYHNvY2tvcHRfaW5pdF91c2VyYCBhbmQgYGNvcHlfdG9faXRlcmAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYSB1bmlmaWVkIGZyYW1ld29yayBmb3Igc29ja2V0IG9wdGlvbnMsIGxpa2VseSBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMuIEknbSBzcGVjdWxhdGluZyBCUEYgaW50ZWdyYXRpb24sIGlvX3VyaW5nIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsbHkganVzdCBhIGdlbmVyYWwgY2xlYW51cCBvZiB0aGlzIGludGVyZmFjZS5cblxuQmVjYXVzZSBpdCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSAoaG93IGRhdGEgaXMgY29waWVkIG91dCBvZiB0aGUga2VybmVsIHdpdGggYGdldHNvY2tvcHRgKSwgdGhpcyBpcyBvYnZpb3VzbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhhdCBtZWFucyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHJlZmFjdG9yLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIHRoZXNlIHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2U6XG5cbiogICBgbmV0L2llZWU4MDIxNTQvc29ja2V0LmNgIHJlcXVpcmVzIGJvdGggYENPTkZJR19JRUVFODAyMTU0YCBhbmQgYENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVGBcbiogICBgbmV0L2lwdjYvcmF3LmNgIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfSVBWNmBcbiogICBgbmV0L3Bob25ldC9wZXAuY2AgcmVsaWVzIG9uIGBDT05GSUdfUEhPTkVUYFxuKiAgIGBuZXQvdGxzL3Rsc19tYWluLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19UTFNgXG5cbkknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmVhY2ggb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1NS4yMzE1MDEyNDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0Mjk3ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MTQ9aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjU1LjMzNTgwNTg1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTU3NDY4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJRUVFIDgwMi4xNS40IENvbnRleHQgYW5kIFNvY2tldCBBYnN0cmFjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgSUVFRTgwMjE1NGAgYW5kIGBJRUVFODAyMTU0X1NPQ0tFVGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGNvbnNpZGVyaW5nIGEgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIChMUi1XUEFOKSBpbXBsZW1lbnRhdGlvbi4gSSdtIGxpa2VseSBkZWFsaW5nIHdpdGggY29kZSBvciBhIHN5c3RlbSB0aGF0J3MgYnVpbHQgb24gdG9wIG9mIG9yIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZSBJRUVFIDgwMi4xNS40IHN0YW5kYXJkLiBUaGUgc3RhbmRhcmQgaXRzZWxmIGRlZmluZXMgdGhlIHBoeXNpY2FsIGFuZCBNQUMgbGF5ZXJzLCBzbyBJJ20gbGlrZWx5IGNvbmNlcm5lZCB3aXRoIGhvdyBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIFJGIHByb3RvY29sLlxuXG5UaGUgcHJlc2VuY2Ugb2YgYF9TT0NLRVRgIHN1Z2dlc3RzIHdlIGFyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYW4gYWJzdHJhY3Rpb24gbGF5ZXIuIFNwZWNpZmljYWxseSwgSSBpbWFnaW5lIGEgc29mdHdhcmUgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSA4MDIuMTUuNCByYWRpbyBpbiBhIG1vcmUgY29udmVuaWVudCwgYXBwbGljYXRpb24tZnJpZW5kbHkgd2F5LCBzaW1pbGFyIHRvIGhvdyBzdGFuZGFyZCBUQ1AvSVAgc29ja2V0cyB3b3JrIGZvciBFdGhlcm5ldCBvciB0aGUgSW50ZXJuZXQuIFRoaXMgc29ja2V0IGFic3RyYWN0aW9uIHNob3VsZCBhYnN0cmFjdCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgZnJhbWUgZm9ybWF0dGluZywgYWRkcmVzc2luZywgYW5kIGFja25vd2xlZGdlIGhhbmRsaW5nLCBvZmZlcmluZyBhIHNpbXBsZXIgcHJvZ3JhbW1pbmcgbW9kZWwuIFdlIG1pZ2h0IGJlIHVzaW5nIGEgZnJhbWV3b3JrIGxpa2UgQ29udGlraSwgVGlueU9TLCBvciBzb21ldGhpbmcgY3VzdG9tLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGdvYWwgaXMgdG8gZWZmaWNpZW50bHkgaGFuZGxlIGRhdGEgdHJhbnNmZXIgYW5kIGNvbW11bmljYXRpb24gb3ZlciBhIGxvdy1wb3dlciwgc2hvcnQtcmFuZ2Ugd2lyZWxlc3MgbmV0d29yay4gVGhlIHNwZWNpZmljcyB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1OC44OTE1NTc0MTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzgwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSE9ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Bob25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9waG9uZXQvS2NvbmZpZy01LVxcbm5ldC9waG9uZXQvS2NvbmZpZzo2OmNvbmZpZyBQSE9ORVRcXG5uZXQvcGhvbmV0L0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGhvbmV0IHByb3RvY29scyBmYW1pbHlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjU5LjAzMTk0MzgwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzE3OTgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUEhPTkVUIGFuZCB0aGUgTnVhbmNlcyBvZiBMaW5ndWlzdGljIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBzbyBcIlBIT05FVC5cIiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyBpbnRvIHRoZSBjaGFsbGVuZ2VzIGFuZCBjb21wbGV4aXRpZXMuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwaG9ub2xvZ2ljYWwgbmV0d29yaywgYnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqaG93KiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZW5jb2RlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBmZWF0dXJlLWJhc2VkIHJlcHJlc2VudGF0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IElzIGl0IGEgc3RyaWN0LCBydWxlLWdvdmVybmVkIHN5c3RlbSwgb3IgZG9lcyBpdCBpbmNvcnBvcmF0ZSBzb21lIGRlZ3JlZSBvZiBwcm9iYWJpbGlzdGljIHdlaWdodGluZywgcmVmbGVjdGluZyB0aGUgZ3JhZGllbnQgbmF0dXJlIG9mIHBob25ldGljIHJlYWxpemF0aW9uP1xuXG5UaGUgdGVybSBicmluZ3MgdXAgYSBob3N0IG9mIHN1Yi1xdWVzdGlvbnM6IHdoYXQncyB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24/IElzIHRoaXMgYSBwdXJlbHkgdGhlb3JldGljYWwgY29uc3RydWN0LCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGEgbW9kZWwgZ3JvdW5kZWQgaW4gZW1waXJpY2FsIGRhdGEsIGxpa2UgYWNvdXN0aWMgbWVhc3VyZW1lbnRzIG9yIGFydGljdWxhdG9yeSBkYXRhPyBJcyB0aGUgZ29hbCBkZXNjcmlwdGl2ZSwgYXR0ZW1wdGluZyB0byBjYXB0dXJlIHRoZSBvYnNlcnZlZCBwYXR0ZXJucywgb3IgZ2VuZXJhdGl2ZSwgYWltaW5nIHRvIHByZWRpY3Qgbm92ZWwgc291bmQgcGF0dGVybnMgYW5kIHZhcmlhdGlvbnM/IFdlIGhhdmUgdG8gbG9vayBhdCB0aGUgbWV0aG9kcyBlbXBsb3llZDogSXMgdGhpcyBhIGhhbmQtY3JhZnRlZCBzeXN0ZW0sIG9yIHNvbWV0aGluZyB0aGF0IGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgbGVhcm5lZD8gV2hhdCBhcmUgdGhlIGRhdGEgc2V0cyB0aGUgbmV0d29yayBpcyBiYXNlZCBvbj9cblxuSSBhbHNvIHdhbnQgdG8ga25vdyBob3cgdGhlIG5ldHdvcmsgaGFuZGxlcyB2YXJpYXRpb25zLiBJcyBpdCBkZXNpZ25lZCB0byBhY2NvbW1vZGF0ZSBkaWFsZWN0YWwgZGlmZmVyZW5jZXMgYW5kIHRoZSBpbmhlcmVudCB2YXJpYWJpbGl0eSBvZiBzcGVlY2ggcHJvZHVjdGlvbj8gSG93IHdlbGwgZG9lcyBpdCBleHBsYWluIHBoZW5vbWVuYSBsaWtlIGFsbG9waG9ueSwgYXNzaW1pbGF0aW9uLCBhbmQgbmV1dHJhbGl6YXRpb24/IERvZXMgaXQgY29uc2lkZXIgdGhlIHByb3NvZGljIHN0cnVjdHVyZT9cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgZmFzY2luYXRpbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29ubmVjdGluZyBwaG9ub2xvZ3kgd2l0aCBwaG9uZXRpY3MuIFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHBlcmNlcHRpb24gYW5kIHByb2R1Y3Rpb24gaW5mb3JtIHRoZXNlIG5ldHdvcmtzLlxuV2UgbXVzdCBsb29rIGF0IGltcGxlbWVudGF0aW9uLiBXaGF0IGtpbmQgb2YgYWxnb3JpdGhtIHVuZGVycGlucyBpdD8gV2hhdCBhcmUgdGhlIGNvbnN0cmFpbnRzLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zP1xuXG5JbiB0aGUgZW5kLCB3aGF0IGluc2lnaHRzIGNhbiB0aGlzIHN0cnVjdHVyZSBvZmZlcj8gRG9lcyBpdCBjaGFsbGVuZ2UgZXhpc3RpbmcgcGhvbm9sb2dpY2FsIHRoZW9yeSwgb3IgZG9lcyBpdCBwcm92aWRlIGEgbmV3IHdheSBvZiBmb3JtYWxpemluZyBvdXIgdW5kZXJzdGFuZGluZz8gSXMgdGhlIG1vZGVsIGdlbmVyYWxpemFibGUgYWNyb3NzIGxhbmd1YWdlcz8gSSBjYW4ndCB3YWl0IHRvIHNlZSBob3cgdGhlIFwiUEhPTkVUXCIgc3lzdGVtIGFkZHJlc3NlcyB0aGVzZSBjcnVjaWFsIHF1ZXN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjAzLjE2Mzc0NTMxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQxNzg1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy9LY29uZmlnLTQtI1xcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTgtXFxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowMy4yNjc5MzExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTEyNDAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvY2tldCBvcHRpb24gaW1wbGVtZW50YXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgYFRMU2AuIGBJUHY2YCBpcyB1c3VhbGx5IG9uLCBidXQgd2UgY2FuIGRlZmluaXRlbHkgaW5jb3Jwb3JhdGUgaXQuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAgd2l0aGluIGBuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY2AsIGByYXd2Nl9nZXRzb2Nrb3B0YCBmcm9tIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgZmluYWxseSwgYHRsc19nZXRzb2Nrb3B0YCBsb2NhdGVkIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLlxuXG5MZXQncyBzdGFydCBieSB2ZXJpZnlpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGRncmFtX2dldHNvY2tvcHRgLiBJcyBpdCBleHBvcnRlZCBvciBzdGF0aWM/IEFoLCB0aGUgcGF0Y2ggaW5kaWNhdGVzIGl0J3MgYHN0YXRpY2AuIEhvbGQgb24sIHRoZSBwcm9tcHQgYWR2aXNlcyB1cyB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhvc2Ugc3RhdGljIG9uZXMgZ2V0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBtZWFuaW5nIHRoZXkgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBJbnRlcmVzdGluZy4uLiBub3csIHdoZXJlIGlzIGBkZ3JhbV9nZXRzb2Nrb3B0YCBiZWluZyAqdXNlZCo/IFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjAwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjA3Ljc5OTA3MzY3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzgzMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRncmFtX2dldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2llZWU4MDIxNTQvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvc29ja2V0LmM9NzkzPXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04MzMtXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6ODM0OnN0YXRpYyBpbnQgZG9fZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2Nrb3B0X3QgKm9wdClcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04MzUte1xcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODcxLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjg3MjpzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTg3My1cXHRcXHRcXHQgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtODg0LVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjg4NTpcXHRlcnIgPSBkb19kZ3JhbV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcXHUwMDI2b3B0KTtcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy04ODYtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jPTk2OD1zdGF0aWMgc3RydWN0IHByb3RvIGllZWU4MDIxNTRfZGdyYW1fcHJvdCA9IHtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTk4MS1cXHQuaW9jdGxcXHRcXHQ9IGRncmFtX2lvY3RsLFxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjk4MjpcXHQuZ2V0c29ja29wdFxcdD0gZGdyYW1fZ2V0c29ja29wdCxcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy05ODMtXFx0LnNldHNvY2tvcHRcXHQ9IGRncmFtX3NldHNvY2tvcHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjA3Ljg5OTQ2NDczOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIxNzkwMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZ2V0c29ja29wdCBGdW5jdGlvbiBDYWxsIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGdldHNvY2tvcHRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGllZWU4MDIxNTRfZGdyYW1fcHJvdGAuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGAuZ2V0c29ja29wdGAsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSdzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnZvbHZlZCB0aGF0IHdvdWxkIGJlIGJldHRlciB0byBmb2N1cyBvbi4gTm9wZSwgYGRncmFtX2dldHNvY2tvcHRgICppcyogdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHNwZWNpZmljIHByb3RvY29sLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEl0J3Mgc3RhdGljLCB5ZXMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIHdvbid0IHRyeSB0byBpbmxpbmUgaXQsIHNvIEkgY2FuIHNhZmVseSBmb2N1cyBteSBlZmZvcnRzIHRoZXJlLlxuXG5BaCwgcmlnaHQsIGBpZWVlODAyMTU0X2RncmFtX3Byb3RgIGlzIGEgYHN0cnVjdCBwcm90b2AuIFRoaXMgbWVhbnMgdGhlICphY3R1YWwqIHN5c2NhbGwgZW50cnkgcG9pbnQgaXMgYSBjaGFpbiBvZiBjYWxsczogYHN5c19nZXRzb2Nrb3B0YCAtXHUwMDNlIGBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0YCAtXHUwMDNlIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWdldHNvY2tvcHRgLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBkaWdnaW5nIGludG8gYGRncmFtX2dldHNvY2tvcHRgIGlzIHRoZSByaWdodCBtb3ZlLCBzaW5jZSBpdCdzIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBhbmQsIGFzIGNvbmZpcm1lZCwgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCdzIGEgc29saWQgdW5kZXJzdGFuZGluZy5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0IGByYXd2Nl9nZXRzb2Nrb3B0YCBpcyBkb2luZyBpbiBjb21wYXJpc29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoxMi40MjEyNTg3NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzk4MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXd2Nl9nZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3Jhdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3Jhdy5jPTEwMzE9c3RhdGljIGludCByYXd2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEwNTMtXFxubmV0L2lwdjYvcmF3LmM6MTA1NDpzdGF0aWMgaW50IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxubmV0L2lwdjYvcmF3LmMtMTA1NS17XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0xMDg4LVxcbm5ldC9pcHY2L3Jhdy5jOjEwODk6c3RhdGljIGludCByYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvaXB2Ni9yYXcuYy0xMDkwLVxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTExNS1cXG5uZXQvaXB2Ni9yYXcuYzoxMTE2OlxcdGVyciA9IGRvX3Jhd3Y2X2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbm5ldC9pcHY2L3Jhdy5jLTExMTctXFx0aWYgKGVycilcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0xMjE2LVxcdC5zZXRzb2Nrb3B0XFx0ICAgPSByYXd2Nl9zZXRzb2Nrb3B0LFxcbm5ldC9pcHY2L3Jhdy5jOjEyMTc6XFx0LmdldHNvY2tvcHRcXHQgICA9IHJhd3Y2X2dldHNvY2tvcHQsXFxubmV0L2lwdjYvcmF3LmMtMTIxOC1cXHQuc2VuZG1zZ1xcdCAgID0gcmF3djZfc2VuZG1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTIuNTM1MjQ4NzM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODg4ODY3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gYHJhd3Y2X2dldHNvY2tvcHRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHVudXN1YWwsIGJ1dCBJIGtub3cgaXQncyBiZWluZyB1c2VkIGJlY2F1c2Ugc29tZW9uZSwgc29tZXdoZXJlLCBpcyB0YWtpbmcgaXRzIGFkZHJlc3MuIFRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFdoeSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBnZXR0aW5nIGFkZHJlc3NlZD8gVGhpcyBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGl0J3MgYmVpbmcgYWNjZXNzZWQgb3V0c2lkZSBvZiBpdHMgaW50ZW5kZWQgc2NvcGUsIHByb2JhYmx5IHRocm91Z2ggc29tZSBmdW5jdGlvbiBwb2ludGVyIHRyaWNrZXJ5IG9yIHBvc3NpYmx5IHNvbWUgc29ydCBvZiBsaWJyYXJ5IGluamVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBiZWluZyB1c2VkLlxuXG5BbHJpZ2h0LCBsZXQncyBwaXZvdCB0byBpbnZlc3RpZ2F0aW5nIGBwZXBfZ2V0c29ja29wdGAuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBmdW5jdGlvbnMsIGl0J3MgcmVhc29uYWJsZSB0byBzdXNwZWN0IHRoYXQgdGhlIHByb2JsZW0gaXMgZWl0aGVyIHdpdGggdGhlIGNhbGxpbmcgY29kZSwgb3IgdGhlIGNvZGUgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbGF0dGVyIHdvcmtzLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZvcm1lciBhcyB3ZWxsLiBMZXQncyBzZWUgaWYgdGhpcyBzaGVkcyBhbnkgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4gSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZGVsZWdhdGlvbiBvciBmb3J3YXJkaW5nIGhlcmUsIG9yIG1heWJlIGV2ZW4gYSBkaXJlY3QgY2FsbCBpZiB3ZSdyZSAqcmVhbGx5KiBsdWNreSwgd2hpY2ggd291bGQgc2hvdyB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYHBlcF9nZXRzb2Nrb3B0YCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIGxvb2sgZm9yIGNsdWVzIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgcmF3djZfZ2V0c29ja29wdGAgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTE5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTYuMDI0MTM4NjkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1MzY1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVwX2dldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Bob25ldC9wZXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGhvbmV0L3BlcC5jPTEwMTk9c3RhdGljIGludCBwZXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcGhvbmV0L3BlcC5jLTEwODAtXFxubmV0L3Bob25ldC9wZXAuYzoxMDgxOnN0YXRpYyBpbnQgZG9fcGVwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxubmV0L3Bob25ldC9wZXAuYy0xMDgyLXtcXG4tLVxcbm5ldC9waG9uZXQvcGVwLmMtMTExNS1cXG5uZXQvcGhvbmV0L3BlcC5jOjExMTY6c3RhdGljIGludCBwZXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L3Bob25ldC9wZXAuYy0xMTE3LVxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L3Bob25ldC9wZXAuYy0xMTI4LVxcbm5ldC9waG9uZXQvcGVwLmM6MTEyOTpcXHRlcnIgPSBkb19wZXBfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgXFx1MDAyNm9wdCk7XFxubmV0L3Bob25ldC9wZXAuYy0xMTMwLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvcGhvbmV0L3BlcC5jPTEzODA9c3RhdGljIHN0cnVjdCBwcm90byBwZXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvcGhvbmV0L3BlcC5jLTEzODYtXFx0LnNldHNvY2tvcHRcXHQ9IHBlcF9zZXRzb2Nrb3B0LFxcbm5ldC9waG9uZXQvcGVwLmM6MTM4NzpcXHQuZ2V0c29ja29wdFxcdD0gcGVwX2dldHNvY2tvcHQsXFxubmV0L3Bob25ldC9wZXAuYy0xMzg4LVxcdC5zZW5kbXNnXFx0PSBwZXBfc2VuZG1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTYuMTM1NjgxMDk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTE2NjI1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gU29ja2V0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBgcGVwX2dldHNvY2tvcHRgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IEkgc2VlIHRoYXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQncyBhIGNsYXNzaWMgY29kZSBzbWVsbCwgdXN1YWxseSBtZWFuaW5nIGl0J3MgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0J3Mgc3VwcG9zZWQgdG8gYmUgcmVzdHJpY3RlZCB0by4gTGV0IG1lIHF1aWNrbHkgcGl2b3QuIExldCdzIHNlZSBpZiBzb21ldGhpbmcgc2ltaWxhciBpcyBoYXBwZW5pbmcgd2l0aCBgdGxzX2dldHNvY2tvcHRgLiBQZXJoYXBzIHRoaXMgaXMgYSBtb3JlIHdpZGVzcHJlYWQgaXNzdWUgd2l0aCB0aGUgc29ja2V0IG9wdGlvbiBoYW5kbGluZywgYW5kIEkgY2FuIHF1aWNrbHkgYXNjZXJ0YWluIGEgcGF0dGVybi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4gTGV0J3Mgc2VlIGhvdyBgdGxzX2dldHNvY2tvcHRgIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTkuMzg3MzQ3NjM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4OTg3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2dldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX21haW4uYz0zOTk9c3RhdGljIF9fcG9sbF90IHRsc19za19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTQyNi1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NDI3OnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0LCBpbnQgdHgpXFxubmV0L3Rscy90bHNfbWFpbi5jLTQyOC17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNDg1LVxcbm5ldC90bHMvdGxzX21haW4uYzo0ODY6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbm5ldC90bHMvdGxzX21haW4uYy00ODcte1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTUwMS1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NTAyOnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja29wdF90ICpvcHQpXFxubmV0L3Rscy90bHNfbWFpbi5jLTUwMy17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNTI1LVxcbm5ldC90bHMvdGxzX21haW4uYzo1MjY6c3RhdGljIGludCBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2tvcHRfdCAqb3B0KVxcbm5ldC90bHMvdGxzX21haW4uYy01Mjcte1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTU0Mi1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NTQzOnN0YXRpYyBpbnQgZG9fdGxzX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja29wdF90ICpvcHQpXFxubmV0L3Rscy90bHNfbWFpbi5jLTU0NC17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNTUxLVxcdGNhc2UgVExTX1JYOlxcbm5ldC90bHMvdGxzX21haW4uYzo1NTI6XFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9jb25mKHNrLCBvcHQsIG9wdG5hbWUgPT0gVExTX1RYKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTUzLVxcdFxcdGJyZWFrO1xcbm5ldC90bHMvdGxzX21haW4uYy01NTQtXFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XFxubmV0L3Rscy90bHNfbWFpbi5jOjU1NTpcXHRcXHRyYyA9IGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHQpO1xcbm5ldC90bHMvdGxzX21haW4uYy01NTYtXFx0XFx0YnJlYWs7XFxubmV0L3Rscy90bHNfbWFpbi5jLTU1Ny1cXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxcbm5ldC90bHMvdGxzX21haW4uYzo1NTg6XFx0XFx0cmMgPSBkb190bHNfZ2V0c29ja29wdF9ub19wYWQoc2ssIG9wdCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTU1OS1cXHRcXHRicmVhaztcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTYwLVxcdGNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjpcXG5uZXQvdGxzL3Rsc19tYWluLmM6NTYxOlxcdFxcdHJjID0gZG9fdGxzX2dldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTU2Mi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy01NzItXFxubmV0L3Rscy90bHNfbWFpbi5jOjU3MzpzdGF0aWMgaW50IHRsc19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTc0LVxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTU4Ny1cXG5uZXQvdGxzL3Rsc19tYWluLmM6NTg4OlxcdGVyciA9IGRvX3Rsc19nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBcXHUwMDI2b3B0KTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtNTg5LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMDItXFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLnNldHNvY2tvcHRcXHQ9IHRsc19zZXRzb2Nrb3B0O1xcbm5ldC90bHMvdGxzX21haW4uYzoxMDAzOlxcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5nZXRzb2Nrb3B0XFx0PSB0bHNfZ2V0c29ja29wdDtcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAwNC1cXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZGlzY29ubmVjdFxcdD0gdGxzX2Rpc2Nvbm5lY3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjE5LjUzNTI1MzY1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk5NTU3MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTb2NrZXQgT3B0aW9uIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gYHRsc19nZXRzb2Nrb3B0YCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYnV0IGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGdyYW1fZ2V0c29ja29wdGAsIGByYXd2Nl9nZXRzb2Nrb3B0YCwgYHBlcF9nZXRzb2Nrb3B0YCwgYW5kLCBvZiBjb3Vyc2UsIGB0bHNfZ2V0c29ja29wdGAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRm9yIGByYXd2Nl9nZXRzb2Nrb3B0YCwgaXQncyBzdHJhaWdodGZvcndhcmQ6IHdlIG5lZWQgYENPTkZJR19JUFY2YC4gRm9yIGBkZ3JhbV9nZXRzb2Nrb3B0YCwgd2UnbGwgbmVlZCBgQ09ORklHX0lFRUU4MDIxNTRgIGFuZCBgQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUYC4gYHBlcF9nZXRzb2Nrb3B0YCByZXF1aXJlcyBgQ09ORklHX1BIT05FVGAuIEFuZCBmb3IgYHRsc19nZXRzb2Nrb3B0YCwgd2UgbmVlZCBgQ09ORklHX1RMU2AuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYElFRUU4MDIxNTRfU09DS0VUYC4gWWVwLCBhcyBleHBlY3RlZCwgaXQgZGVwZW5kcyBvbiBgSUVFRTgwMjE1NGAuIEdvb2QuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgYFBIT05FVGAgYW5kIGBUTFNgLCBhbmQgdGhleSBhcmUganVzdCBgUEhPTkVUYCBhbmQgYFRMU2AsIHJlc3BlY3RpdmVseS5cblxuTm93IEkgbmVlZCB0byByZS12ZXJpZnkgdGhlIGRlcGVuZGVuY3kgb24gYElQVjZgLiBZZXAsIHdlJ3JlIHN0aWxsIGdvb2QgdGhlcmUuXG5cbkkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBsdXJraW5nPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4uLkFoLCBubywgaXQgbG9va3MgbGlrZSBgTUFDODAyMTU0YCBkZXBlbmRzIG9uIGBJRUVFODAyMTU0YCwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gT2theSwgdGhhdCBzZWVtcyB0byBiZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjUuMzM0ODE0NDg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyNzkyMTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjUuNDQxMTAxNzQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTE0NjEyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgc29tZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AsIHJpZ2h0PyBJIG1lYW4sIGV2ZXJ5dGhpbmcgKnNob3VsZCogaGF2ZSBzb21lIGxldmVsIG9mIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBiYXNlZCBvbiBmZWF0dXJlcyBvciBoYXJkd2FyZeKApiBCdXQgdGhlcmUncyAqbm90aGluZyogdGhlcmU/IE5vIGBkZXBlbmRzIG9uYCBjbGF1c2VzPyBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgSSdsbCBhZG1pdCwgYW5kIGEgcG90ZW50aWFsIGluZGljYXRvciBvZiBzb21ldGhpbmcgd29ydGggaW52ZXN0aWdhdGluZy4gQWxyaWdodCwgbGV0J3MganVzdCBnbyBhaGVhZCBhbmQgcmVhZCB0aGlzIGZpbGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uIFRoaXMgaXMgbGlrZWx5IHRvIHRlbGwgbWUgd2hldGhlciB0aGlzIG1vZHVsZSBpcyBkZXNpZ25lZCB0byBiZSB1bml2ZXJzYWxseSBhdmFpbGFibGUgb3Igd2hldGhlciBzb21ldGhpbmcgZGVlcGVyIGhhcyBnb25lIGF3cnkuIEkgYmV0IHRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjguNDMyNTY2MzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSUVFRTgwMjE1NFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgSUVFRSBTdGQgODAyLjE1LjQgZGVmaW5lcyBhIGxvdyBkYXRhIHJhdGUsIGxvdyBwb3dlciBhbmQgbG93XFxuICAgNjpcXHRcXHQgIGNvbXBsZXhpdHkgc2hvcnQgcmFuZ2Ugd2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3Jrcy4gSXQgd2FzXFxuICAgNzpcXHRcXHQgIGRlc2lnbmVkIHRvIG9yZ2FuaXNlIG5ldHdvcmtzIG9mIHNlbnNvcnMsIHN3aXRjaGVzLCBldGMgYXV0b21hdGlvblxcbiAgIDg6XFx0XFx0ICBkZXZpY2VzLiBNYXhpbXVtIGFsbG93ZWQgZGF0YSByYXRlIGlzIDI1MCBrYi9zIGFuZCB0eXBpY2FsIHBlcnNvbmFsXFxuICAgOTpcXHRcXHQgIG9wZXJhdGluZyBzcGFjZSBhcm91bmQgMTBtLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMUi1XUEFOIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXFxuICAxMjpcXHRcXHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlcy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgSUVFRTgwMjE1NFxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG4gIDE3OlxcdFxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgQWRkcyBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0IGZvciBubDgwMjE1NC5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXFxcIlxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFNvY2tldCBpbnRlcmZhY2UgZm9yIElFRUUgODAyLjE1LjQuIENvbnRhaW5zIERHUkFNIHNvY2tldHMgaW50ZXJmYWNlXFxuICAyNjpcXHRcXHQgIGZvciA4MDIuMTUuNCBkYXRhZnJhbWVzLiBBbHNvIFJBVyBzb2NrZXQgaW50ZXJmYWNlIHRvIGJ1aWxkIE1BQ1xcbiAgMjc6XFx0XFx0ICBoZWFkZXIgZnJvbSB1c2Vyc3BhY2UuXFxuICAyODpcXHRcXG4gIDI5OlxcdHNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnXFxcIlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjI4LjQzMjYzMjc3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcxMjIwMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLlxuXG4qKk5hdmlnYXRpbmcgdGhlIFdpcmVsZXNzIE5ldHdvcmsgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGVzZSBuZXR3b3JrIHN0YW5kYXJkcywgc3BlY2lmaWNhbGx5IGBJRUVFODAyMTU0YCBhbmQgaXRzIHNvY2tldCBpbnRlcmZhY2UsIGBJRUVFODAyMTU0X1NPQ0tFVGAuIFdoZXJlIGRvIHRoZXNlIGZpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHN0YXJ0aW5nIHdpdGggYG5ldC9waG9uZXQvS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBob3cgdGhpcyBzdGFjayBpcyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzEuMzAzODY4NjkzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGhvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUGhvbmV0IHByb3RvY29sXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQSE9ORVRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJQaG9uZXQgcHJvdG9jb2xzIGZhbWlseVxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhlIFBob25lIE5ldHdvcmsgcHJvdG9jb2wgKFBob05ldCkgaXMgYSBwYWNrZXQtb3JpZW50ZWRcXG4gIDEwOlxcdFxcdCAgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZXZlbG9wZWQgYnkgTm9raWEgZm9yIHVzZSB3aXRoIGl0cyBtb2RlbXMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgVGhpcyBpcyByZXF1aXJlZCBmb3IgTWFlbW8gdG8gdXNlIGNlbGx1bGFyIGRhdGEgY29ubmVjdGl2aXR5IChpZlxcbiAgMTM6XFx0XFx0ICBzdXBwb3J0ZWQpLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnRyb2wgTm9raWEgcGhvbmVzXFxuICAxNDpcXHRcXHQgIGZyb20gYSBMaW51eCBjb21wdXRlciwgYWx0aG91Z2ggQVQgY29tbWFuZHMgbWF5IGJlIGVhc2llciB0byB1c2UuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBwaG9uZXQuIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjMxLjMwNDA0ODg3M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE0NjcwNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2Ugbm90ZXM6XG5cbioqRm9jdXNpbmcgaW4gb24gTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IHNlZW1zIHRvIGJlIGhpbnRpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmssIGFuZCB0aGUgdGVybSBgUEhPTkVUYCBwcm9iYWJseSByZWxhdGVzIHRvIHNvbWUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgSSBuZWVkIHRvIGNvbmZpZ3VyZS4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBgbmV0L3Rscy9LY29uZmlnYCBpcyBhIHJlYWxseSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyB0aGlzIGxpa2VseSBkZWZpbmVzIHRoZSBvcHRpb25zIGFuZCBzZXR0aW5ncyByZWxhdGVkIHRvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb2YgbmV0d29yayBzZWN1cml0eSBzdGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODozNC4yMTg3MjI2MzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzQuMjE4ODE0OTE2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTAwMTUxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVExTIENvbnRleHQgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBzdHJhaWdodCB0byB0aGUgcG9pbnQ6IGBUTFNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCwgYW5kIHF1aWNrbHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFNwZWNpZmljYWxseSwgYG5ldC9pcHY2L0tjb25maWdgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCdzIHRoZSBzZWN0aW9uIGdvdmVybmluZyBJUHY2IG5ldHdvcmtpbmcsIGFuZCBUTFMgb2Z0ZW4gZGVhbHMgd2l0aCBzZWN1cmUgY29ubmVjdGlvbnMgb3ZlciB0aGUgbmV0d29yayBzdGFjay4gSSdtIGV4cGVjdGluZyB0aGlzIGNvbmZpZyBmaWxlIHRvIHByb3ZpZGUgaW5zaWdodCBvbiByZWxldmFudCBrZXJuZWwgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgVExTYC4gUGVyaGFwcyB0aGlzIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gc2VjdXJpdHkgb3B0aW9ucyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBUTFNgIHN1cHBvcnQgaXMgY29uZGl0aW9uYWwsIGFuZCBpZiBzbywgd2hhdCB0cmlnZ2VycyBpdC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjM3LjM2ODgzNDEwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0NDUyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctMjAtXFxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMjItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzgtXFxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxcbm5ldC9pcHY2L0tjb25maWctNDAtXFx0Ym9vbCBcXFwiSVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxcbm5ldC9pcHY2L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBNb2JpbGl0eVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTE5LVxcbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxcbm5ldC9pcHY2L0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQ5LVxcbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxcbm5ldC9pcHY2L0tjb25maWctMTUxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTYxLVxcbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxcbm5ldC9pcHY2L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTc2LVxcbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbm5ldC9pcHY2L0tjb25maWctMTk3LVxcdGJvb2xcXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1VcXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjMzLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjQyLVxcbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNDQtXFx0Ym9vbCBcXFwiSVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjc4LVxcbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXFxubmV0L2lwdjYvS2NvbmZpZy0yODAtXFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yOTktXFxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvS2NvbmZpZy0zMDEtXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXFxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXFx0Ym9vbCBcXFwiSVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMjctXFxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjM3LjQ2MTI4NjE0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTMwODE0NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgZ2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24gZm9yIElQdjYqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGBnZXRzb2Nrb3B0YCBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBgSVBWNmAuIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGtleSBvbmVzIGFyZSBgSUVFRTgwMjE1NGAsIGBJRUVFODAyMTU0X1NPQ0tFVGAsIGBJUFY2YCwgYFBIT05FVGAsIGFuZCBgVExTYC4gTm93LCBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zLCBJIGhhdmUgdGhlc2U6IGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYHJhd3Y2X2dldHNvY2tvcHRgLCBgcGVwX2dldHNvY2tvcHRgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YC5cblxuV2FpdCBhIG1pbnV0ZSwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQuIEFoYSwgSSBzZWUgYSBidW5jaCBvZiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uczogYGRvX2RncmFtX2dldHNvY2tvcHRgLCBgZG9fcmF3djZfZ2V0c29ja29wdGAsIGBkb19wZXBfZ2V0c29ja29wdGAsIGBkb190bHNfZ2V0c29ja29wdF9jb25mYCwgYGRvX3Rsc19nZXRzb2Nrb3B0X3R4X3pjYCwgYGRvX3Rsc19nZXRzb2Nrb3B0X25vX3BhZGAsIGBkb190bHNfZ2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAsIGFuZCBgZG9fdGxzX2dldHNvY2tvcHRgLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtZWFucyB0aGUgY29ycmVjdCBvbmVzIHRvIGNvbnNpZGVyIGFyZSBkZWZpbml0ZWx5IGBkZ3JhbV9nZXRzb2Nrb3B0YCwgYHJhd3Y2X2dldHNvY2tvcHRgLCBgcGVwX2dldHNvY2tvcHRgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YC5cblxuTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCBgZGdyYW1fZ2V0c29ja29wdGAuIExldCBtZSBjaGVjayBpZiBpdCdzIHRoZSBvbmx5IG9uZSBvZiBpdHMgdHlwZSBpbiBgbmV0L2llZWU4MDIxNTQvc29ja2V0LmNgLiBIb2xkIG9uLi4uIHRoZXJlJ3MgYWxzbyBgcmF3X2dldHNvY2tvcHRgPyBIbW0sIHRoYXQncyB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGByYXdfZ2V0c29ja29wdGAgaXMgd2hhdCBJIHRoaW5rIGl0IGlzIGFuZCB0aGF0IGl0IGhhc24ndCBiZWVuIHJlY2VudGx5IG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0My4zOTIxMDc2MDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjEyMzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXdfZ2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaWVlZTgwMjE1NC9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zNjI9c3RhdGljIHZvaWQgaWVlZTgwMjE1NF9yYXdfZGVsaXZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtMzgxLVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjM4MjpzdGF0aWMgaW50IHJhd19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy0zODMtXFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz0zOTQ9c3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X3Jhd19wcm90ID0ge1xcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtNDA1LVxcdC5kaXNjb25uZWN0XFx0PSByYXdfZGlzY29ubmVjdCxcXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYzo0MDY6XFx0LmdldHNvY2tvcHRcXHQ9IHJhd19nZXRzb2Nrb3B0LFxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jLTQwNy1cXHQuc2V0c29ja29wdFxcdD0gcmF3X3NldHNvY2tvcHQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjQzLjkzNDI0MjYwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgxNTE4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IHRoZSBwYXRjaCBkaWRuJ3QgdG91Y2ggYW55dGhpbmcgb3V0c2lkZSBvZiBgZGdyYW1fZ2V0c29ja29wdGAgZGlyZWN0bHkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBvdGhlciBmaWxlcyBtZW50aW9uZWQsIHNwZWNpZmljYWxseSwgSSBjYW4gc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHJhd3Y2X2dldHNvY2tvcHRgIGluIGBuZXQvaXB2Ni9yYXcuY2AsIGBwZXBfZ2V0c29ja29wdGAgaW4gYG5ldC9waG9uZXQvcGVwLmNgLCBhbmQgYHRsc19nZXRzb2Nrb3B0YCBpbiBgbmV0L3Rscy90bHNfbWFpbi5jYC4gVGhvc2UgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gSXQgYXBwZWFycyB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmNgIGlzIGp1c3QgYSB0ZXN0IGZpbGUsIHNvIG5vIG5lZWQgdG8gZGVsdmUgZnVydGhlciBpbnRvIHRoYXQgZm9yIGZ1enppbmcgc2NvcGUuXG5cblNvLCBqdXN0IHRvIGJlIGNyeXN0YWwgY2xlYXIsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaGVyZSBhcmUgYGRncmFtX2dldHNvY2tvcHRgLCBgcmF3djZfZ2V0c29ja29wdGAsIGBwZXBfZ2V0c29ja29wdGAsIGFuZCBgdGxzX2dldHNvY2tvcHRgLlxuXG5Ob3cgZm9yIHRoZSBjb25maWdzLi4uIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYElFRUU4MDIxNTRgLCBgSUVFRTgwMjE1NF9TT0NLRVRgLCBgSVBWNmAsIGBQSE9ORVRgLCBhbmQgYFRMU2AuIEp1c3QgZG91YmxlLWNoZWNraW5nIG15IGFzc3VtcHRpb25zLCB5ZXMsIGBUTFNgIGRvZXMgaW5kZWVkIGRlcGVuZCBvbiBgSU5FVGAsIHdoaWNoIGlzIGFsd2F5cyBlbmFibGVkLCBzbyBubyBuZWVkIHRvIHdvcnJ5IHRoZXJlLiBOZWl0aGVyIGBQSE9ORVRgIG5vciBgSUVFRTgwMjE1NGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIGBJUFY2YCBhbHNvIGhhcyBubyBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBwdXJwb3Nlcy4gSSBkb24ndCBzZWUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzIHRvIGB0bHNfZ2V0c29ja29wdGAgb3RoZXIgdGhhbiBgQ09ORklHX1RMU2AuXG5cblJpZ2h0LCBsZXQncyByZWNhcCBteSB0aG91Z2h0IHByb2Nlc3MuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2V2ZXJhbCBgZ2V0c29ja29wdGAgaGFuZGxlcnMg4oCTIHNwZWNpZmljYWxseSBmb3IgSUVFRSA4MDIuMTUuNCBkZ3JhbSwgSVB2NiByYXcsIFBob25ldCBQRVAsIGFuZCBUTFMgc29ja2V0cy4gSXQncyBtb3ZpbmcgdGhlbSB0byB1c2UgdGhlIG5ldyBgc29ja29wdF90YCBpbnRlcmZhY2UgYW5kIGBjb3B5X3RvX2l0ZXJgIGluc3RlYWQgb2YgYGNvcHlfdG9fdXNlcmAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHVzZXIgc3BhY2UgcmVhZHMgc29ja2V0IG9wdGlvbnMsIGFuZCBpdCBhZmZlY3RzIHNvbWUgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gSXQncyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBgZ2V0c29ja29wdGAgaGFuZGxlcnMgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgc29saWQgYW5kIGZyZWUgb2YgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzkyLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo1Mi4yMTU3NjQ3ODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5OTI2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfU09DS0VUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJQSE9ORVRcIixcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRncmFtX2dldHNvY2tvcHRcIixcbiAgICBcInJhd3Y2X2dldHNvY2tvcHRcIixcbiAgICBcInBlcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0bHNfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBkZ3JhbSwgSVB2NiByYXcsIFBob25ldCBQRVAsIGFuZCBUTFMgc29ja2V0cyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgaW50ZXJmYWNlIGFuZCBjb3B5X3RvX2l0ZXIgaW5zdGVhZCBvZiBjb3B5X3RvX3VzZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgc29ja2V0IG9wdGlvbnMgYXJlIHJlYWQgYnkgdXNlciBzcGFjZSwgYW5kIGl0IGFmZmVjdHMgY29yZSBuZXR3b3JraW5nIHByb3RvY29scy4gRnV6emluZyB0aGVzZSBnZXRzb2Nrb3B0IGhhbmRsZXJzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdlcmUgaW50cm9kdWNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9TT0NLRVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlBIT05FVFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGdyYW1fZ2V0c29ja29wdFwiLFxuICAgIFwicmF3djZfZ2V0c29ja29wdFwiLFxuICAgIFwicGVwX2dldHNvY2tvcHRcIixcbiAgICBcInRsc19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25zIGZvciBJRUVFIDgwMi4xNS40IGRncmFtLCBJUHY2IHJhdywgUGhvbmV0IFBFUCwgYW5kIFRMUyBzb2NrZXRzIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCBpbnRlcmZhY2UgYW5kIGNvcHlfdG9faXRlciBpbnN0ZWFkIG9mIGNvcHlfdG9fdXNlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBzb2NrZXQgb3B0aW9ucyBhcmUgcmVhZCBieSB1c2VyIHNwYWNlLCBhbmQgaXQgYWZmZWN0cyBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2xzLiBGdXp6aW5nIHRoZXNlIGdldHNvY2tvcHQgaGFuZGxlcnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGUgY29udmVyc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4pzcg[1] Phase: Succeeded StartedAt: 2026-07-27 21:19:04 +0000 UTC FinishedAt: 2026-07-27 21:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 21:19:04 +0000 UTC FinishedAt: 2026-07-27 21:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[2] Phase: Succeeded StartedAt: 2026-07-27 21:19:04 +0000 UTC FinishedAt: 2026-07-28 01:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 21:19:05 +0000 UTC FinishedAt: 2026-07-28 01:57:00 +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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 21:19:05 +0000 UTC FinishedAt: 2026-07-27 21:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 21:19:05 +0000 UTC FinishedAt: 2026-07-27 21:19:12 +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-workflow4pzcg/series-workflow4pzcg-convert-artifact-1445847653/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 21:19:20 +0000 UTC FinishedAt: 2026-07-27 22:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 21:19:20 +0000 UTC FinishedAt: 2026-07-27 22:08:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bae304cf-fbac-4ae2-be9a-44f634b1f6fd,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-workflow4pzcg/series-workflow4pzcg-convert-artifact-1445847653/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": "5bc2c0db-19bf-4b62-a517-3372a7414e67", "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-workflow4pzcg/series-workflow4pzcg-build-action-2226183819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 21:19:21 +0000 UTC FinishedAt: 2026-07-27 22:08:30 +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:*bae304cf-fbac-4ae2-be9a-44f634b1f6fd,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-workflow4pzcg/series-workflow4pzcg-convert-artifact-1445847653/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": "5bc2c0db-19bf-4b62-a517-3372a7414e67", "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-workflow4pzcg/series-workflow4pzcg-build-action-2226183819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:08:40 +0000 UTC FinishedAt: 2026-07-27 22:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:08:40 +0000 UTC FinishedAt: 2026-07-27 22:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:08:40 +0000 UTC FinishedAt: 2026-07-27 22:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:08:40 +0000 UTC FinishedAt: 2026-07-27 22:08:45 +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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-workflow4pzcg/series-workflow4pzcg-convert-artifact-607595328/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:08:50 +0000 UTC FinishedAt: 2026-07-27 22:10:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:08:50 +0000 UTC FinishedAt: 2026-07-27 22:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5bc2c0db-19bf-4b62-a517-3372a7414e67,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-workflow4pzcg/series-workflow4pzcg-build-action-2226183819/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-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:10:53 +0000 UTC FinishedAt: 2026-07-27 22:10:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:10:53 +0000 UTC FinishedAt: 2026-07-27 22:10:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:10:53 +0000 UTC FinishedAt: 2026-07-27 22:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:10:53 +0000 UTC FinishedAt: 2026-07-27 22:53:24 +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:*bae304cf-fbac-4ae2-be9a-44f634b1f6fd,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-workflow4pzcg/series-workflow4pzcg-convert-artifact-607595328/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": "bd763e48-3ed9-447b-b2da-338bd394be07", "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-workflow4pzcg/series-workflow4pzcg-build-action-1926404348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:10:53 +0000 UTC FinishedAt: 2026-07-27 22:53:14 +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:*bae304cf-fbac-4ae2-be9a-44f634b1f6fd,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-workflow4pzcg/series-workflow4pzcg-convert-artifact-607595328/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": "bd763e48-3ed9-447b-b2da-338bd394be07", "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-workflow4pzcg/series-workflow4pzcg-build-action-1926404348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:53:24 +0000 UTC FinishedAt: 2026-07-27 22:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:53:24 +0000 UTC FinishedAt: 2026-07-27 22:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:53:24 +0000 UTC FinishedAt: 2026-07-27 22:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:53:24 +0000 UTC FinishedAt: 2026-07-27 22:55:14 +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:*bd763e48-3ed9-447b-b2da-338bd394be07,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-workflow4pzcg/series-workflow4pzcg-build-action-1926404348/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-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-28 01:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-28 01:57:00 +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":["dgram_getsockopt","rawv6_getsockopt","pep_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:*5bc2c0db-19bf-4b62-a517-3372a7414e67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd763e48-3ed9-447b-b2da-338bd394be07,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-workflow4pzcg/series-workflow4pzcg-build-action-2226183819/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-workflow4pzcg/series-workflow4pzcg-build-action-1926404348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-27 22:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-27 22:55:28 +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":["dgram_getsockopt","rawv6_getsockopt","pep_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-workflow4pzcg/series-workflow4pzcg-convert-artifact-137419417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-27 22:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-27 22:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:24 +0000 UTC FinishedAt: 2026-07-27 22:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:34 +0000 UTC FinishedAt: 2026-07-28 01:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pzcg[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":["dgram_getsockopt","rawv6_getsockopt","pep_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":"3a33bf32-43af-4239-bcf1-a2fcb74bcd51","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-27 22:55:34 +0000 UTC FinishedAt: 2026-07-28 01:56:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5bc2c0db-19bf-4b62-a517-3372a7414e67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd763e48-3ed9-447b-b2da-338bd394be07,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-workflow4pzcg/series-workflow4pzcg-build-action-2226183819/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-workflow4pzcg/series-workflow4pzcg-build-action-1926404348/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-workflow4pzcg/series-workflow4pzcg-convert-artifact-137419417/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,}