Name: series-workflowm7kcw Phase: Succeeded StartedAt: 2026-08-29 13:37:13 +0000 UTC FinishedAt: 2026-08-29 17:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[0] Phase: Succeeded StartedAt: 2026-08-29 13:37:13 +0000 UTC FinishedAt: 2026-08-29 13:41:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 13:37:13 +0000 UTC FinishedAt: 2026-08-29 13:41:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "e4f20a7e-1bc8-4076-b731-a3d654e51906" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udpv6_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHB2Nl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cblxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTk5NTJmNjcwMDg1ZTI3OTFmN2YyOGM0NTc1YjA2YzdiOGZjMDk0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEzOjM5OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IGZkODc1OTA4YWMwYzYuLjU2NmM2MzRhNWE1OTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmNcbkBAIC0xNzE2LDYgJiM0MzsxNzE2LDExIEBAIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0fVxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRpZiAodW5saWtlbHkodXAtXHUwMDNlcGVuZGluZykpIHtcbiBcdFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXG4gXHRcdC8qIC4uLiB3aGljaCBpcyBhbiBldmlkZW50IGFwcGxpY2F0aW9uIGJ1Zy4gLS1BTksgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwdjZfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB1ZHB2Nl9zZW5kbXNnKCkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBzb2NrZXQgbG9jayB0byBlbnN1cmUgdGhlIHNvY2tldCBmYW1pbHkgaXMgc3RpbGwgQUZfSU5FVDYsIGhhbmRsaW5nIHBvdGVudGlhbCBjb25jdXJyZW50IGZhbWlseSBjaGFuZ2VzIChlLmcuIElQVjZfQUREUkZPUk0pLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIElQdjYgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5OTUyZjY3MDA4NWUyNzkxZjdmMjhjNDU3NWIwNmM3YjhmYzA5NGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzozOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggZmQ4NzU5MDhhYzBjNi4uNTY2YzYzNGE1YTU5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTE3MTYsNiAmIzQzOzE3MTYsMTEgQEAgaW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJfQogCiAJbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJaWYgKHVubGlrZWx5KHVwLSZndDtwZW5kaW5nKSkgewogCQkvKiBUaGUgc29ja2V0IGlzIGFscmVhZHkgY29ya2VkIHdoaWxlIHByZXBhcmluZyBpdC4gKi8KIAkJLyogLi4uIHdoaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnLiAtLUFOSyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJc3N1ZSBpbiBVRFB2NiBUcmFuc21pc3Npb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGdvZXMgc3RyYWlnaHQgdG8gYG5ldC9pcHY2L3VkcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgaW4gdGhpcyBjYXNlLCB3aGVyZSB0aGluZ3MgbWlnaHQgYnJlYWsuIFRoZSBjb21taXQgbW9kaWZpZXMgdGhlIGB1ZHB2Nl9zZW5kbXNnYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3Igc2VuZGluZyBVRFAgcGFja2V0cyBvdmVyIElQdjYuIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAodW5saWtlbHkoc2stJmd0O3NrX2ZhbWlseSAhPSBBRl9JTkVUNikpYC4gSG1tbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBrbm93IGBzay0mZ3Q7c2tfZmFtaWx5YCByZXByZXNlbnRzIHRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgc29ja2V0IGFuZCBgQUZfSU5FVDZgIGlzIElQdjYuIFRoZSBjaGVjayBzZWVtcyB0byBiZSBzYXlpbmcsICYjMzQ7aWYgdGhlIHNvY2tldCBpc24mIzM5O3QgSVB2NiwgcmVqZWN0IHRoZSBzZW5kLiYjMzQ7CgpOb3csIHRoaXMgZmVlbHMgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBXaHkgaXMgdGhpcyBjaGVjayAqbm93KiBiZWluZyBpbnRyb2R1Y2VkPyBJcyB0aGlzIGFkZHJlc3NpbmcgYSBrbm93biB2dWxuZXJhYmlsaXR5IG9yIGJ1Zz8gT3IgcGVyaGFwcyBhIG5ldyBmZWF0dXJlIG9yIG9wdGltaXphdGlvbiBpcyBlbmFibGVkPyBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnM6IElmIHRoaXMgKndhc24mIzM5O3QqIGNoZWNrZWQgYmVmb3JlLCB3aGF0IHdhcyB0aGUgYmVoYXZpb3IgaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcz8gV2FzIHRoZXJlIGEgc3VidGxlIGJ1ZyBiZWluZyBleHBsb2l0ZWQsIG9yIGFuIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3Q/CgpUbyB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY2L3VkcC5jYCB0byBzZWUgd2hlcmUgdGhpcyBjaGVjayBpcyBwbGFjZWQgd2l0aGluIHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkLiBUaGlzIGNvdWxkIHVuY292ZXIgYW55IHNwZWNpZmljIGVycm9yIHNjZW5hcmlvcy4gV2FzIHRoZXJlIHByaW9yIGNvZGUgd2hpY2ggdGhpcyBoYXMgcmVwbGFjZWQ/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29ja2V0IGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBkZWNpZGUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmVwZXJjdXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzAwOlx0XHRcdGdvdG8gZG9fY29uZmlybTtcbjE3MDE6XHRiYWNrX2Zyb21fY29uZmlybTpcbjE3MDI6XHRcbjE3MDM6XHRcdC8qIExvY2tsZXNzIGZhc3QgcGF0aCBmb3IgdGhlIG5vbi1jb3JraW5nIGNhc2UgKi9cbjE3MDQ6XHRcdGlmICghY29ya3JlcSkge1xuMTcwNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTcwNjpcdFxuMTcwNzpcdFx0XHRza2IgPSBpcDZfbWFrZV9za2Ioc2ssIGlwX2dlbmVyaWNfZ2V0ZnJhZywgbXNnLCB1bGVuLFxuMTcwODpcdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LFxuMTcwOTpcdFx0XHRcdFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXG4xNzEwOlx0XHRcdFx0XHQgICBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBcdTAwMjZjb3JrKTtcbjE3MTE6XHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuMTcxMjpcdFx0XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpXG4xNzEzOlx0XHRcdFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcdTAwMjZjb3JrLmJhc2UpO1xuMTcxNDpcdFx0XHQvKiBpcDZfbWFrZV9za2Igc3RlYWxzIGRzdCByZWZlcmVuY2UgKi9cbjE3MTU6XHRcdFx0Z290byBvdXRfbm9fZHN0O1xuMTcxNjpcdFx0fVxuMTcxNzpcdFxuMTcxODpcdFx0bG9ja19zb2NrKHNrKTtcbjE3MTk6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4xNzIwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzIxOlx0XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4xNzIyOlx0XHRcdGdvdG8gb3V0O1xuMTcyMzpcdFx0fVxuMTcyNDpcdFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4xNzI1Olx0XHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuMTcyNjpcdFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4xNzI3Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzI4Olx0XG4xNzI5Olx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7dWRwIGNvcmsgYXBwIGJ1ZyAyXFxuXCYjMzQ7KTtcbjE3MzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE3MzE6XHRcdFx0Z290byBvdXQ7XG4xNzMyOlx0XHR9XG4xNzMzOlx0XG4xNzM0Olx0XHRXUklURV9PTkNFKHVwLVx1MDAzZXBlbmRpbmcsIEFGX0lORVQ2KTtcbjE3MzU6XHRcbjE3MzY6XHRkb19hcHBlbmRfZGF0YTpcbjE3Mzc6XHRcdHVwLVx1MDAzZWxlbiAmIzQzOz0gdWxlbjtcbjE3Mzg6XHRcdGVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXG4xNzM5Olx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LCBmbDYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gYWRkcmVzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgaG93IHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gaXMgYmVoYXZpbmcuIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWV0aGluZyBhbWlzcyB3aXRoIElQdjQgc29ja2V0cyBiZWluZyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBwcmltYXJpbHkgZGVzaWduZWQgZm9yIElQdjYsIHdoaWNoIGlzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYSBzb2NrZXQgb3JpZ2luYWxseSBjcmVhdGVkIGFzIElQdjYgaXMgc29tZWhvdyB0cmFuc2l0aW9uaW5nIHRvIElQdjQuIGBJUFY2X0FERFJGT1JNYCBpcyBpbW1lZGlhdGVseSBzdXNwZWN0LiBQZXJoYXBzIGEgY29ubmVjdGVkIFVEUCBzb2NrZXQgaXMgaW52b2x2ZWQsIG9yIGV2ZW4gYSByYWNlIGNvbmRpdGlvbiBhcm91bmQgYHNldHNvY2tvcHRgIGFuZCBgY29ubmVjdGAgbWlnaHQgYmUgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBmYW1pbHkgc3dpdGNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYElQVjZfQUREUkZPUk1gIGFjdHVhbGx5IGZvcmNlcyBhIGZhbWlseSBzd2l0Y2ggb2YgdGhlIHNvY2tldC4gQWx0ZXJuYXRpdmVseSwgY291bGQgYSBjaGFuZ2UgdG8gYEFGX0lORVRgIGhhcHBlbiBlbHNld2hlcmU/IFRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxpbmcgYFdSSVRFX09OQ0UodXAtJmd0O3BlbmRpbmcsIEFGX0lORVQ2KTtgIHdoaWNoIHNlZW1zIG9kZC4gRnVydGhlcm1vcmUsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGlwNl9hcHBlbmRfZGF0YShzaywgLi4uKWAgYXNzdW1lcyBgaW5ldDZfc2soc2spYCBpcyB2YWxpZC4gU28gdGhpcyBtZWFucyB0aGUgY29ya2luZyBwcm9jZXNzIGFuZCBzb2NrZXQgZmFtaWx5IGhhdmUgdG8gYmUgYWxpZ25lZCwgb3IgdGhlIGNvZGUgaXMgZXhwZWN0aW5nIGEgc3dpdGNoICpkdXJpbmcqIGNvcmtpbmcsIHdoaWNoIHNlZW1zIGluaGVyZW50bHkgcmlza3kuIEkgbmVlZCB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgcG90ZW50aWFsIGZvciBkaXNjcmVwYW5jaWVzIGJldHdlZW4gdGhlIGludGVuZGVkIHNvY2tldCBmYW1pbHkgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHMsIGVzcGVjaWFsbHkgd2hlbiBjb3JraW5nIGlzIGludm9sdmVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgc3Vycm91bmRpbmcgYElQVjZfQUREUkZPUk1gIGFuZCBvdGhlciBjb2RlIHRoYXQgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIGNoYW5naW5nIHRoZSBzb2NrZXQmIzM5O3MgZmFtaWx5LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgbmV0L2lwdjYgZGlyZWN0b3J5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBWNl9BRERSRk9STSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FmX2luZXQ2LmM9NDI2PWludCBpbmV0Nl9iaW5kX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy00MzEtXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjQzMjpcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xubmV0L2lwdjYvYWZfaW5ldDYuYy00MzMtXHRwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9NTQ3PWludCBpbmV0Nl9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU2OS1cdGRlZmF1bHQ6XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjU3MDpcdFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU3MS1cdFx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTYzMT1pbnQgaW5ldDZfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjM4LVxubmV0L2lwdjYvYWZfaW5ldDYuYzo2Mzk6XHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0NT1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTQ6XHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjU1LVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTAtXHQvKiBBbm90aGVyIHRocmVhZCBoYXMgY29udmVydGVkIHRoZSBzb2NrZXQgaW50byBJUHY0IHdpdGhcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1NTE6XHQgKiBJUFY2X0FERFJGT1JNIGNvbmN1cnJlbnRseS5cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTItXHQgKi9cbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTU3LVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU1ODpcdGNhc2UgSVBWNl9BRERSRk9STTpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTktXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMDc4PWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDkwLVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTA5MTpcdGNhc2UgSVBWNl9BRERSRk9STTpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDkyLVx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGB1ZHBfc2VuZG1zZ2AgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYHVkcF9zZW5kbXNnYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHNlbmRpbmcgVURQIGRhdGFncmFtcywgc28gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3JpdGljYWwgdG8uLi4gd2VsbCwgZXZlcnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24sIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIG9idmlvdXM6IHdoYXQgYXJlIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHM/IFdoYXQmIzM5O3MgdGhlIGNvbnRyb2wgZmxvdz8gV2hhdCBsb2NraW5nIGlzIGludm9sdmVkLCBpZiBhbnk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3M/IEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc29ja2V0IG9wdGlvbnMsIGVzcGVjaWFsbHkgdGhpbmdzIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiBvciBjb25nZXN0aW9uIGNvbnRyb2wuIERvZXMgaXQgdXNlIHRoZSBnZW5lcmljIG5ldHdvcmsgc3RhY2sgZnVuY3Rpb25zIGVmZmVjdGl2ZWx5LCBvciBkb2VzIGl0IGhhdmUgY3VzdG9tIGNvZGU/IEkgYWxzbyB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyczsgYXJlIHRoZXJlIGFueSBkcml2ZXItc3BlY2lmaWMgcXVpcmtzIHRoYXQgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHJlbGlhYmlsaXR5PyBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja19zb2NrXFwoc2tcXCk7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmM9MTIzNT1pbnQgdWRwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvdWRwLmMtMTI3MC1cdFx0ICovXG5uZXQvaXB2NC91ZHAuYzoxMjcxOlx0XHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMTI3Mi1cdFx0aWYgKGxpa2VseSh1cC1cdTAwM2VwZW5kaW5nKSkge1xuLS1cbm5ldC9pcHY0L3VkcC5jLTE0NDgtXG5uZXQvaXB2NC91ZHAuYzoxNDQ5Olx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3VkcC5jLTE0NTAtXHRpZiAodW5saWtlbHkodXAtXHUwMDNlcGVuZGluZykpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYz0xNTExPXZvaWQgdWRwX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvaXB2NC91ZHAuYy0xNTE4LVxubmV0L2lwdjQvdWRwLmM6MTUxOTpcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0xNTIwLVx0aWYgKHVwLVx1MDAzZXBlbmRpbmcgXHUwMDI2XHUwMDI2ICF1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxuLS1cbm5ldC9pcHY0L3VkcC5jPTIxNDg9c3RhdGljIGludCB1ZHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvaXB2NC91ZHAuYy0yMTUyLVxubmV0L2lwdjQvdWRwLmM6MjE1MzpcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0yMTU0LVx0cmVzID0gX19pcDRfZGF0YWdyYW1fY29ubmVjdChzaywgdWFkZHIsIGFkZHJfbGVuKTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yMTg5PWludCB1ZHBfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC9pcHY0L3VkcC5jLTIxOTAte1xubmV0L2lwdjQvdWRwLmM6MjE5MTpcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0yMTkyLVx0X191ZHBfZGlzY29ubmVjdChzaywgZmxhZ3MpO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTI4OTA9aW50IHVkcF9saWJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdWRwLmMtMjkwMS1cdFx0aWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGIHx8IG9wdG5hbWUgPT0gU09fUkNWQlVGRk9SQ0UpIHtcbm5ldC9pcHY0L3VkcC5jOjI5MDI6XHRcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMjkwMy1cdFx0XHQvKiBwYWlyZWQgd2l0aCBSRUFEX09OQ0UgaW4gdWRwX3JtZW1fcmVsZWFzZSgpICovXG4tLVxubmV0L2lwdjQvdWRwLmMtMjkyMy1cdFx0XHR1ZHBfY2xlYXJfYml0KENPUkssIHNrKTtcbm5ldC9pcHY0L3VkcC5jOjI5MjQ6XHRcdFx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3VkcC5jLTI5MjUtXHRcdFx0cHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7XG4tLVxubmV0L2lwdjQvdWRwLmMtMjkzMC1cdGNhc2UgVURQX0VOQ0FQOlxubmV0L2lwdjQvdWRwLmM6MjkzMTpcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMjkzMi1cdFx0c3dpdGNoICh2YWwpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0yOTcyLVx0Y2FzZSBVRFBfR1JPOlxubmV0L2lwdjQvdWRwLmM6Mjk3MzpcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMjk3NC1cdFx0Lyogd2hlbiBlbmFibGluZyBHUk8sIGFjY2VwdCB0aGUgcmVsYXRlZCBHU08gcGFja2V0IHR5cGUgKi9cbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTEwPWludCB1ZHBfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTMxMTItXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbm5ldC9pcHY0L3VkcC5jOjMxMTM6XHRcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0zMTE0LVxuLS1cbm5ldC9pcHY0L3VkcC5jPTM1MTU9c3RhdGljIGludCBicGZfaXRlcl91ZHBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjQvdWRwLmMtMzUyNi1cbm5ldC9pcHY0L3VkcC5jOjM1Mjc6XHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMzUyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgYHVkcHY2X3NlbmRtc2dgOiBBIFF1aWNrIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGB1ZHB2Nl9zZW5kbXNnYC4gSXQmIzM5O3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIElQdjYgVURQJiMzOTtzIHNlbmRtc2cgZnVuY3Rpb25hbGl0eS4gTXkgZ3V0IHNheXMgaXQmIzM5O3Mgd29ydGggYSBjbG9zZXIgaW5zcGVjdGlvbiwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBGaXJzdCwgaXMgaXQganVzdCBkZWNvcmF0aXZlIGNvZGUsIG9yIGRvZXMgaXQgYWN0dWFsbHkgKmRvKiBzb21ldGhpbmc/IFdlbGwsIHRoYXQgYGlmICh1bmxpa2VseShzay0mZ3Q7c2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlgIGNoZWNrIGluZGljYXRlcyBmdW5jdGlvbmFsIGxvZ2ljIHdpdGggYW4gYC1FQUZOT1NVUFBPUlRgIGVycm9yIHJldHVybi4gU28sIG5vLCBpdCYjMzk7cyBub3QganVzdCBmbHVmZi4gR29vZC4gTmV4dCwgaXMgdGhpcyBjb2RlIGV2ZW4gaGl0IGluIHR5cGljYWwgZGVwbG95bWVudHM/IElQdjYgVURQIGlzIGV2ZXJ5d2hlcmUsIGFuZCB0aGlzIGlzIHdoZXJlIHRoYXQgc2VuZG1zZyBvcGVyYXRpb24gbGl2ZXMsIHNvIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmluYWxseSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gWWVzISBDb3JlIG5ldHdvcmsgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBpdCBoYW5kbGVzIElQdjYsIGlzIGFic29sdXRlbHkgYSBwcmltZSB0YXJnZXQuIEFueSBzdWJ0bGUgYnVnIGNhbiBoYXZlIGZhci1yZWFjaGluZyBlZmZlY3RzLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgZm9yIGBuZXQvaXB2Ni91ZHAuY2AgYW5kIHNwZWNpZmljYWxseSBgdWRwdjZfc2VuZG1zZ2AuIFRpbWUgdG8gcG9rZSBhcm91bmQgaW4gYG5ldC9pcHY2L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxubmV0L2lwdjYvTWFrZWZpbGU6MTA6XHRcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cdFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaXB2Ni15YCB0aGluZyBpcyBnZXR0aW5nIGNvbXBpbGVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIEl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCBwcm9jZWR1cmU7IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIElQdjYgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbCBpcyBnb2luZyB0byBiZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBvYmplY3QgZmlsZSBsaXN0cywgYW5kIGhvcGVmdWxseSBzb21lIGNsZXZlciB1c2Ugb2YgbWFrZSB2YXJpYWJsZXMuIEhvcGVmdWxseSBpdCB3aWxsIGJlIGVhc2lseSByZWFkYWJsZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBJUHY2IHN1YnN5c3RlbSwgc28gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBsZXZlbCBvZiBjb21wbGV4aXR5LCBidXQgbm90aGluZyBJIGNhbiYjMzk7dCBoYW5kbGUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgaW5zaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUNikgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG4gICA3Olx0XG4gICA4Olx0aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxuICAgOTpcdFx0XHRhZGRybGFiZWwubyBcXFxuICAxMDpcdFx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxuICAxMTpcdFx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiAgMTI6XHRcdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4gIDEzOlx0XHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4gIDE0Olx0XG4gIDE1Olx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xuICAxNjpcdGlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG4gIDE3Olx0XG4gIDE4Olx0aXB2Ni0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXG4gIDE5Olx0XHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXG4gIDIwOlx0aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuICAyMTpcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWI2X3J1bGVzLm9cbiAgMjI6XHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMjM6XHRpcHY2LSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDI0Olx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xuICAyNTpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xuICAyNjpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuICAyNzpcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuICAyODpcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgJiM0Mzs9IGlvYW02X2lwdHVubmVsLm9cbiAgMjk6XHRcbiAgMzA6XHRvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xuICAzMTpcdG9iai0kKENPTkZJR19JTkVUNl9FU1ApICYjNDM7PSBlc3A2Lm9cbiAgMzI6XHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuICAzMzpcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICYjNDM7PSBpcGNvbXA2Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwpICYjNDM7PSB4ZnJtNl90dW5uZWwub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICYjNDM7PSB0dW5uZWw2Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSAmIzQzOz0gbWlwNi5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xuICAzODpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAzOTpcdFxuICA0MDpcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzUxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYENPTkZJR19JUFY2YC4gV2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQ/IE15IGluaXRpYWwgaHVuY2ggaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBuZXR3b3JraW5nIG9uZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBuZXQvaXB2Ni9LY29uZmlnYCBkaXJlY3RseSwgb3IgbWF5YmUgZXZlbiB0aGUgbW9yZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AgZmlsZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZlYXR1cmVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgYENPTkZJR19JUFY2YC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNlxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBJUHY2IGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbCBsaW5lcywgYXBwcm94aW1hdGVseSB0aGUgZmlyc3QgdHdlbnR5IG9yIHNvLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUsIHRvcC1sZXZlbCBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBvdmVyYWxsIGVuYWJsZS9kaXNhYmxlIHN3aXRjaCBmb3IgSVB2NiwgcHJvYmFibHkgc29tZSBrZXkgZGVmYXVsdCBiZWhhdmlvcnMsIG1heWJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JrIG9yIHBsYXRmb3JtIGZlYXR1cmVzLi4uIEl04oCZcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gdHJlZSwgc28gYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgb2ZmZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBJUHY2IGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUFY2XG4gICA3Olx0XHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU3VwcG9ydCBmb3IgSVAgdmVyc2lvbiA2IChJUHY2KS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgSVB2Niwgc2VlXG4gIDE0Olx0XHQgIFx1MDAzY2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjZcdTAwM2UuXG4gIDE1Olx0XHQgIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBJUHY2IHVuZGVyIExpbnV4LCBzZWVcbiAgMTY6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYucnN0IGFuZCByZWFkIHRoZSBIT1dUTyBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9IT1dUTy9MaW51eCYjNDM7SVB2Ni1IT1dUTy9cdTAwM2VcbiAgMTg6XHRcbiAgMTk6XHRpZiBJUFY2XG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiAgMjI6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFJvdXRlciBQcmVmZXJlbmNlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byB0aGUgUm91dGVyXG4gIDI1Olx0XHQgIEFkdmVydGlzZW1lbnQgbWVzc2FnZSB3aGljaCBpbXByb3ZlcyB0aGUgYWJpbGl0eSBvZiBob3N0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBJUHY2IFVEUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gYW5kIEkgc2VlIGBtZW51Y29uZmlnIElQVjZgIGhhcyBhIGJvb2xlYW4gZW50cnksICYjMzQ7VGhlIElQdjYgcHJvdG9jb2wmIzM0Oy4gU3RhbmRhcmQgc3R1ZmYuIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFB2NiBzZW5kIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGVyZSBnaXZlcyBtZSBjb25maWRlbmNlIHRvIGxvb2sgZm9yIHRoZSByZWxldmFudCBjb2RlLCBzbyBJJiMzOTtsbCBkcmlsbCBkb3duIHRvIGBuZXQvaXB2Ni91ZHAuY2AuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgdGhlIGxvdy1kb3duIG9uIGB1ZHB2Nl9zZW5kbXNnYC4gSSBuZWVkIHRvIHNlZSB0aGUgZGVjbGFyYXRpb24gYW5kLCBpbXBvcnRhbnRseSwgd2hhdCB0aGUgc3ltYm9sIG5hbWUgaXMuIFRoaXMgaXMgYWxsIGFib3V0IGNvbmZpcm1pbmcgdGhlIGNvZGUmIzM5O3MgdGhlcmUsIHVuZGVyc3RhbmRpbmcgaG93IGl0JiMzOTtzIGVuYWJsZWQgdmlhIHRoZSBjb25maWcsIGFuZCBnZXR0aW5nIHJlYWR5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZl9pbmV0Ni5jPTYzMT1pbnQgaW5ldDZfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjQxOlx0cmV0dXJuIElORElSRUNUX0NBTExfMihwcm90LVx1MDAzZXNlbmRtc2csIHRjcF9zZW5kbXNnLCB1ZHB2Nl9zZW5kbXNnLFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NDItXHRcdFx0ICAgICAgIHNrLCBtc2csIHNpemUpO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTYxNy1cdFx0XHQgKiBidXQgdGhlcmUgaXMgc3RpbGwgYSByYWNlLiAgU2VlIHRoZSBsb2NrbGVzcyBwYXRoXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjE4Olx0XHRcdCAqIGluIHVkcHY2X3NlbmRtc2coKSBhbmQgaXB2Nl9sb2NhbF9yeHBtdHUoKS5cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTktXHRcdFx0ICovXG4tLVxubmV0L2lwdjYvdWRwLmM9MTM1Nj1zdGF0aWMgaW50IHVkcF92Nl9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXG4tLVxubmV0L2lwdjYvdWRwLmMtMTM3My1cdHVoLVx1MDAzZWRlc3QgPSBmbDYtXHUwMDNlZmw2X2Rwb3J0O1xubmV0L2lwdjYvdWRwLmM6MTM3NDpcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcHY2X3NlbmRtc2cuICovXG5uZXQvaXB2Ni91ZHAuYy0xMzc1LVx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XG4tLVxubmV0L2lwdjYvdWRwLmM9MTQzOD1zdGF0aWMgaW50IHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xNDU4LVxubmV0L2lwdjYvdWRwLmM6MTQ1OTppbnQgdWRwdjZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9pcHY2L3VkcC5jLTE0NjAte1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE3NzktfVxubmV0L2lwdjYvdWRwLmM6MTc4MDpFWFBPUlRfU1lNQk9MKHVkcHY2X3NlbmRtc2cpO1xubmV0L2lwdjYvdWRwLmMtMTc4MS1cbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTAwPXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE5MTEtXHQuZ2V0c29ja29wdFx0XHQ9IHVkcHY2X2dldHNvY2tvcHQsXG5uZXQvaXB2Ni91ZHAuYzoxOTEyOlx0LnNlbmRtc2dcdFx0PSB1ZHB2Nl9zZW5kbXNnLFxubmV0L2lwdjYvdWRwLmMtMTkxMy1cdC5yZWN2bXNnXHRcdD0gdWRwdjZfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzNQoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAzODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFB2NiBTZW5kIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBkaWZmIG9ubHkgdG91Y2hlcyBgdWRwdjZfc2VuZG1zZ2AgaW4gYG5ldC9pcHY2L3VkcC5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBzaWduaWZpY2FudGx5LiBJJiMzOTttIG5vdyB2ZXJpZnlpbmcgdGhhdCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgdGhpcyBpcyB0aGUgb25seSByZWxldmFudCBvbmUuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgYHVkcHY2X3NlbmRtc2dgIGEgc3RhdGljIGZ1bmN0aW9uPyBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzaW5jZSBpdCYjMzk7cyBleHBvcnRlZCB2aWEgYEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZylgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgZmlsZS4KCk5vdywgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0JiMzOTtzIGEgaG90IHBhdGguIFNpbmNlIGl0JiMzOTtzIGFuIEFQSSBlbnRyeXBvaW50IChgc2VuZG1zZ2ApLCBJIGRvbiYjMzk7dCBiZWxpZXZlIHRoaXMgdG8gYmUgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBUaGlzIGlzIHZhbHVhYmxlIGNvbnRleHQgZm9yIGFueSBmdXp6aW5nIGVmZm9ydHMuCgpGaW5hbGx5LCBJIG5vdGUgdGhlIGBJUFY2YCBjb25maWd1cmF0aW9uIG9wdGlvbi4gT2J2aW91c2x5IHJlbGV2YW50IGdpdmVuIHRoZSBmaWxlIHBhdGguIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhY2NvdW50ZWQgZm9yLgoKSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdWRwdjZfc2VuZG1zZygpIGFmdGVyIGFjcXVpcmluZyB0aGUgc29ja2V0IGxvY2sgdG8gZW5zdXJlIHRoZSBzb2NrZXQgZmFtaWx5IGlzIHN0aWxsIEFGX0lORVQ2LCBoYW5kbGluZyBwb3RlbnRpYWwgY29uY3VycmVudCBmYW1pbHkgY2hhbmdlcyAoZS5nLiBJUFY2X0FERFJGT1JNKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBJUHY2IG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHB2Nl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cblxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5OTUyZjY3MDA4NWUyNzkxZjdmMjhjNDU3NWIwNmM3YjhmYzA5NGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzozOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggZmQ4NzU5MDhhYzBjNi4uNTY2YzYzNGE1YTU5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTE3MTYsNiAmIzQzOzE3MTYsMTEgQEAgaW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJfQogCiAJbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJaWYgKHVubGlrZWx5KHVwLSZndDtwZW5kaW5nKSkgewogCQkvKiBUaGUgc29ja2V0IGlzIGFscmVhZHkgY29ya2VkIHdoaWxlIHByZXBhcmluZyBpdC4gKi8KIAkJLyogLi4uIHdoaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnLiAtLUFOSyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVRFB2NiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCBwcm9ibGVtIGl0JiMzOTtzIGFkZHJlc3NpbmcuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlOiBhIG5ldyBjaGVjayB3aXRoaW4gYHVkcHY2X3NlbmRtc2dgLiBJdCYjMzk7cyBhIHF1aWNrIGNvbmRpdGlvbmFsIHN0YXRlbWVudDogYGlmICh1bmxpa2VseShzay0mZ3Q7c2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlgLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBhcmUgd2UgY2hlY2tpbmcgdGhlIGFkZHJlc3MgZmFtaWx5IHdpdGhpbiBhIGZ1bmN0aW9uIG5hbWVkIGB1ZHB2Nl9zZW5kbXNnYD8gU2hvdWxkbiYjMzk7dCB0aGlzICpvbmx5KiBiZSBkZWFsaW5nIHdpdGggSVB2NiBzb2NrZXRzPwoKVGhlIGFkZGl0aW9uIG9mIHRoaXMgY2hlY2sgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnIG9yIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IGZhbWlseSB1c2FnZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbm93IGd1YXJkaW5nIGFnYWluc3QgYSBjb25kaXRpb24gd2hlcmUgYSBub24tSVB2NiBzb2NrZXQgbWlnaHQgYmUgcGFzc2VkIHRvIHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2Ygd2hlcmUgeW91IGNhbiBnZXQgYSBuYXN0eSBidWcuCgpUaGUgY29tbWVudCAmIzM0O3doaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnJiMzNDsgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IHRoZSBjb2RlICp3YXNuJiMzOTt0KiBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24sIGFuZCB0aGUgcHJlc2VuY2Ugb2Ygc3VjaCBhIGNvbmRpdGlvbiBpcyBsaWtlbHkgZHVlIHRvIGFuIGVycm9yIHVwc3RyZWFtLCBtYXliZSBpbiB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhpcyBzb2NrZXQuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBhdHRlbXB0aW5nIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGNyYXNoaW5nLCBvciByZXR1cm5pbmcgYW4gaW5jb3JyZWN0IGVycm9yLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGVjayB1c2VzIGB1bmxpa2VseSgpYCBoaW50cyB0aGlzIGNvbmRpdGlvbiBpcyBleHBlY3RlZCB0byBiZSByYXJlLCBwcm9iYWJseSB0cmlnZ2VyZWQgYnkgYSBwcm9ncmFtbWluZyBtaXN0YWtlLiBUaGUgJiMzNDtsb2NrX3NvY2soc2spJiMzNDsgYW5kICYjMzQ7cmVsZWFzZV9zb2NrKHNrKSYjMzQ7IGNhbGxzIHN1Z2dlc3QgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGxvY2tlZCwgc28gdGhpcyBpcyBhbm90aGVyIGRhdGEgc2FmZXR5IGNoZWNrIHRoYXQgd2Ugc2hvdWxkIGJlIHRha2luZyBub3RpY2Ugb2YuCgpJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgcmV2aWV3IHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lIDE3MTYgdG8gc2VlIGhvdyBgdXAtJmd0O3BlbmRpbmdgIGlzIHVzZWQgYW5kIGhvdyB0aGlzIG5ldyBgQUZfSU5FVDZgIGNoZWNrIGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBsb2dpYy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhpcyBwYXRjaCBtaXRpZ2F0ZXMgdGhlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGlmIHRoaXMgYEVBRk5PU1VQUE9SVGAgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIsIGFuZCBpZiB0aGlzIGNvdWxkIGJlIGFuIGV4cGxvaXQgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjgwOlx0XHRcdGZsNi1cdTAwM2VmbG93aTZfb2lmID0gUkVBRF9PTkNFKG5wLVx1MDAzZW1jYXN0X29pZik7XG4xNjgxOlx0XHRcdGNvbm5lY3RlZCA9IGZhbHNlO1xuMTY4MjpcdFx0fSBlbHNlIGlmICghZmw2LVx1MDAzZWZsb3dpNl9vaWYpXG4xNjgzOlx0XHRcdGZsNi1cdTAwM2VmbG93aTZfb2lmID0gUkVBRF9PTkNFKG5wLVx1MDAzZXVjYXN0X29pZik7XG4xNjg0Olx0XG4xNjg1Olx0XHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTZfdG9fZmxvd2lfY29tbW9uKGZsNikpO1xuMTY4NjpcdFxuMTY4NzpcdFx0Zmw2LVx1MDAzZWZsb3dsYWJlbCA9IGlwNl9tYWtlX2Zsb3dpbmZvKGlwYzYudGNsYXNzLCBmbDYtXHUwMDNlZmxvd2xhYmVsKTtcbjE2ODg6XHRcbjE2ODk6XHRcdGRzdCA9IGlwNl9za19kc3RfbG9va3VwX2Zsb3coc2ssIGZsNiwgZmluYWxfcCwgY29ubmVjdGVkKTtcbjE2OTA6XHRcdGlmIChJU19FUlIoZHN0KSkge1xuMTY5MTpcdFx0XHRlcnIgPSBQVFJfRVJSKGRzdCk7XG4xNjkyOlx0XHRcdGRzdCA9IE5VTEw7XG4xNjkzOlx0XHRcdGdvdG8gb3V0O1xuMTY5NDpcdFx0fVxuMTY5NTpcdFxuMTY5NjpcdFx0aWYgKGlwYzYuaGxpbWl0IFx1MDAzYyAwKVxuMTY5NzpcdFx0XHRpcGM2LmhsaW1pdCA9IGlwNl9za19kc3RfaG9wbGltaXQobnAsIGZsNiwgZHN0KTtcbjE2OTg6XHRcbjE2OTk6XHRcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzXHUwMDI2TVNHX0NPTkZJUk0pXG4xNzAwOlx0XHRcdGdvdG8gZG9fY29uZmlybTtcbjE3MDE6XHRiYWNrX2Zyb21fY29uZmlybTpcbjE3MDI6XHRcbjE3MDM6XHRcdC8qIExvY2tsZXNzIGZhc3QgcGF0aCBmb3IgdGhlIG5vbi1jb3JraW5nIGNhc2UgKi9cbjE3MDQ6XHRcdGlmICghY29ya3JlcSkge1xuMTcwNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTcwNjpcdFxuMTcwNzpcdFx0XHRza2IgPSBpcDZfbWFrZV9za2Ioc2ssIGlwX2dlbmVyaWNfZ2V0ZnJhZywgbXNnLCB1bGVuLFxuMTcwODpcdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LFxuMTcwOTpcdFx0XHRcdFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXG4xNzEwOlx0XHRcdFx0XHQgICBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBcdTAwMjZjb3JrKTtcbjE3MTE6XHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuMTcxMjpcdFx0XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpXG4xNzEzOlx0XHRcdFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcdTAwMjZjb3JrLmJhc2UpO1xuMTcxNDpcdFx0XHQvKiBpcDZfbWFrZV9za2Igc3RlYWxzIGRzdCByZWZlcmVuY2UgKi9cbjE3MTU6XHRcdFx0Z290byBvdXRfbm9fZHN0O1xuMTcxNjpcdFx0fVxuMTcxNzpcdFxuMTcxODpcdFx0bG9ja19zb2NrKHNrKTtcbjE3MTk6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4xNzIwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzIxOlx0XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4xNzIyOlx0XHRcdGdvdG8gb3V0O1xuMTcyMzpcdFx0fVxuMTcyNDpcdFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4xNzI1Olx0XHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuMTcyNjpcdFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4xNzI3Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzI4Olx0XG4xNzI5Olx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7dWRwIGNvcmsgYXBwIGJ1ZyAyXFxuXCYjMzQ7KTtcbjE3MzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE3MzE6XHRcdFx0Z290byBvdXQ7XG4xNzMyOlx0XHR9XG4xNzMzOlx0XG4xNzM0Olx0XHRXUklURV9PTkNFKHVwLVx1MDAzZXBlbmRpbmcsIEFGX0lORVQ2KTtcbjE3MzU6XHRcbjE3MzY6XHRkb19hcHBlbmRfZGF0YTpcbjE3Mzc6XHRcdHVwLVx1MDAzZWxlbiAmIzQzOz0gdWxlbjtcbjE3Mzg6XHRcdGVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXG4xNzM5Olx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LCBmbDYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIHRyeWluZyB0byBkZWJ1ZyBvciB1bmRlcnN0YW5kIGB1ZHB2Nl9zZW5kbXNnYDoKCioqRGl2aW5nIERlZXAgaW50byBgdWRwdjZfc2VuZG1zZ2AgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIHdpdGhpbiBgdWRwdjZfc2VuZG1zZ2AuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgaXNzdWVzLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lcyAqYmVmb3JlKiBhbmQgKmFmdGVyKiB0aGUgc2VjdGlvbiBJJiMzOTttIGZvY3VzaW5nIG9uLiBJdCYjMzk7cyBhbG1vc3QgbmV2ZXIgaXNvbGF0ZWQuIEkmIzM5O2xsIHJlYWQgdGhyb3VnaCBsaW5lcyAxNTAwIHRvIDE2ODAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCBmb3IgYW5hbHlzaXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBwYXJhbWV0ZXJzIGFyZSBzZXQsIGVycm9yIGhhbmRsaW5nIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy4gTGV0JiMzOTtzIHN0YXJ0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUwMDpcdFx0XHRcdGdvdG8gZG9fdWRwX3NlbmRtc2c7XG4xNTAxOlx0XHRcdGNhc2UgQUZfVU5TUEVDOlxuMTUwMjpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZSA9IHNpbjYgPSBOVUxMO1xuMTUwMzpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZWxlbiA9IGFkZHJfbGVuID0gMDtcbjE1MDQ6XHRcdFx0XHRkYWRkciA9IE5VTEw7XG4xNTA1Olx0XHRcdFx0YnJlYWs7XG4xNTA2Olx0XHRcdGRlZmF1bHQ6XG4xNTA3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTA4Olx0XHRcdH1cbjE1MDk6XHRcdH0gZWxzZSBpZiAoIVJFQURfT05DRSh1cC1cdTAwM2VwZW5kaW5nKSkge1xuMTUxMDpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuMTUxMTpcdFx0XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuMTUxMjpcdFx0XHRkYWRkciA9IFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuMTUxMzpcdFx0fSBlbHNlXG4xNTE0Olx0XHRcdGRhZGRyID0gTlVMTDtcbjE1MTU6XHRcbjE1MTY6XHRcdGlmIChkYWRkcikge1xuMTUxNzpcdFx0XHRpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKGRhZGRyKSkge1xuMTUxODpcdFx0XHRcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XG4xNTE5Olx0XHRcdFx0c2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuMTUyMDpcdFx0XHRcdHNpbi5zaW5fcG9ydCA9IHNpbjYgPyBzaW42LVx1MDAzZXNpbjZfcG9ydCA6IGluZXQtXHUwMDNlaW5ldF9kcG9ydDtcbjE1MjE6XHRcdFx0XHRzaW4uc2luX2FkZHIuc19hZGRyID0gZGFkZHItXHUwMDNlczZfYWRkcjMyWzNdO1xuMTUyMjpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZSA9IFx1MDAyNnNpbjtcbjE1MjM6XHRcdFx0XHRtc2ctXHUwMDNlbXNnX25hbWVsZW4gPSBzaXplb2Yoc2luKTtcbjE1MjQ6XHRkb191ZHBfc2VuZG1zZzpcbjE1MjU6XHRcdFx0XHRlcnIgPSBpcHY2X29ubHlfc29jayhzaykgP1xuMTUyNjpcdFx0XHRcdFx0LUVORVRVTlJFQUNIIDogdWRwX3NlbmRtc2coc2ssIG1zZywgbGVuKTtcbjE1Mjc6XHRcdFx0XHRtc2ctXHUwMDNlbXNnX25hbWUgPSBzaW42O1xuMTUyODpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZWxlbiA9IGFkZHJfbGVuO1xuMTUyOTpcdFx0XHRcdHJldHVybiBlcnI7XG4xNTMwOlx0XHRcdH1cbjE1MzE6XHRcdH1cbjE1MzI6XHRcbjE1MzM6XHRcdC8qIFJvdWdoIGNoZWNrIG9uIGFyaXRobWV0aWMgb3ZlcmZsb3csXG4xNTM0Olx0XHQgICBiZXR0ZXIgY2hlY2sgaXMgbWFkZSBpbiBpcDZfYXBwZW5kX2RhdGEoKS5cbjE1MzU6XHRcdCAgICovXG4xNTM2Olx0XHRpZiAobGVuIFx1MDAzZSBJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKVxuMTUzNzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMTUzODpcdFxuMTUzOTpcdFx0aWYgKFJFQURfT05DRSh1cC1cdTAwM2VwZW5kaW5nKSkge1xuMTU0MDpcdFx0XHRpZiAoUkVBRF9PTkNFKHVwLVx1MDAzZXBlbmRpbmcpID09IEFGX0lORVQpXG4xNTQxOlx0XHRcdFx0cmV0dXJuIHVkcF9zZW5kbXNnKHNrLCBtc2csIGxlbik7XG4xNTQyOlx0XHRcdC8qXG4xNTQzOlx0XHRcdCAqIFRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcy5cbjE1NDQ6XHRcdFx0ICogVGhlIHNvY2tldCBsb2NrIG11c3QgYmUgaGVsZCB3aGlsZSBpdCYjMzk7cyBjb3JrZWQuXG4xNTQ1Olx0XHRcdCAqL1xuMTU0NjpcdFx0XHRsb2NrX3NvY2soc2spO1xuMTU0NzpcdFx0XHRpZiAobGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4xNTQ4Olx0XHRcdFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcgIT0gQUZfSU5FVDYpKSB7XG4xNTQ5Olx0XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTU1MDpcdFx0XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4xNTUxOlx0XHRcdFx0fVxuMTU1MjpcdFx0XHRcdGRzdCA9IE5VTEw7XG4xNTUzOlx0XHRcdFx0Z290byBkb19hcHBlbmRfZGF0YTtcbjE1NTQ6XHRcdFx0fVxuMTU1NTpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTU1NjpcdFx0fVxuMTU1NzpcdFx0dWxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuMTU1ODpcdFxuMTU1OTpcdFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcbjE1NjA6XHRcbjE1NjE6XHRcdGlmIChzaW42KSB7XG4xNTYyOlx0XHRcdGlmIChzaW42LVx1MDAzZXNpbjZfcG9ydCA9PSAwKVxuMTU2MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTU2NDpcdFxuMTU2NTpcdFx0XHRmbDYtXHUwMDNlZmw2X2Rwb3J0ID0gc2luNi1cdTAwM2VzaW42X3BvcnQ7XG4xNTY2Olx0XHRcdGRhZGRyID0gXHUwMDI2c2luNi1cdTAwM2VzaW42X2FkZHI7XG4xNTY3Olx0XG4xNTY4Olx0XHRcdGlmIChpbmV0Nl90ZXN0X2JpdChTTkRGTE9XLCBzaykpIHtcbjE1Njk6XHRcdFx0XHRmbDYtXHUwMDNlZmxvd2xhYmVsID0gc2luNi1cdTAwM2VzaW42X2Zsb3dpbmZvXHUwMDI2SVBWNl9GTE9XSU5GT19NQVNLO1xuMTU3MDpcdFx0XHRcdGlmIChmbDYtXHUwMDNlZmxvd2xhYmVsIFx1MDAyNiBJUFY2X0ZMT1dMQUJFTF9NQVNLKSB7XG4xNTcxOlx0XHRcdFx0XHRmbG93bGFiZWwgPSBmbDZfc29ja19sb29rdXAoc2ssIGZsNi1cdTAwM2VmbG93bGFiZWwpO1xuMTU3MjpcdFx0XHRcdFx0aWYgKElTX0VSUihmbG93bGFiZWwpKVxuMTU3MzpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NzQ6XHRcdFx0XHR9XG4xNTc1Olx0XHRcdH1cbjE1NzY6XHRcbjE1Nzc6XHRcdFx0LypcbjE1Nzg6XHRcdFx0ICogT3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlmZmljdWx0IHRvIG1haW50YWluXG4xNTc5Olx0XHRcdCAqIHNrLVx1MDAzZXNrX2RzdF9jYWNoZS5cbjE1ODA6XHRcdFx0ICovXG4xNTgxOlx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgXHUwMDI2XHUwMDI2XG4xNTgyOlx0XHRcdCAgICBpcHY2X2FkZHJfZXF1YWwoZGFkZHIsIFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSlcbjE1ODM6XHRcdFx0XHRkYWRkciA9IFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuMTU4NDpcdFxuMTU4NTpcdFx0XHRpZiAoYWRkcl9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgXHUwMDI2XHUwMDI2XG4xNTg2Olx0XHRcdCAgICBzaW42LVx1MDAzZXNpbjZfc2NvcGVfaWQgXHUwMDI2XHUwMDI2XG4xNTg3Olx0XHRcdCAgICBfX2lwdjZfYWRkcl9uZWVkc19zY29wZV9pZChfX2lwdjZfYWRkcl90eXBlKGRhZGRyKSkpXG4xNTg4Olx0XHRcdFx0Zmw2LVx1MDAzZWZsb3dpNl9vaWYgPSBzaW42LVx1MDAzZXNpbjZfc2NvcGVfaWQ7XG4xNTg5Olx0XHR9IGVsc2Uge1xuMTU5MDpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuMTU5MTpcdFx0XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuMTU5MjpcdFxuMTU5MzpcdFx0XHRmbDYtXHUwMDNlZmw2X2Rwb3J0ID0gaW5ldC1cdTAwM2VpbmV0X2Rwb3J0O1xuMTU5NDpcdFx0XHRkYWRkciA9IFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuMTU5NTpcdFx0XHRmbDYtXHUwMDNlZmxvd2xhYmVsID0gbnAtXHUwMDNlZmxvd19sYWJlbDtcbjE1OTY6XHRcdFx0Y29ubmVjdGVkID0gdHJ1ZTtcbjE1OTc6XHRcdH1cbjE1OTg6XHRcbjE1OTk6XHRcdGlmICghZmw2LVx1MDAzZWZsb3dpNl9vaWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJUHY2IFNvY2tldCBBbm9tYWx5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmRpdGlvbjogYHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDZgIHdpdGhpbiBgdWRwdjZfc2VuZG1zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgZXZlbiBoZXJlPyBXaGF0IGNpcmN1bXN0YW5jZXMgd291bGQgY2F1c2UgYSBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHkgdG8gKm5vdCogYmUgSVB2NiB3aXRoaW4gYW4gSVB2Ni1zcGVjaWZpYyBmdW5jdGlvbj8gVGhhdCYjMzk7cyBqdXN0IGJpemFycmUuIAoKV2FpdCBhIG1pbnV0ZSwgaXMgaXQgcG9zc2libGUgdGhlIGFkZHJlc3MgZmFtaWx5IGNoYW5nZXMgKmFmdGVyKiB0aGUgc29ja2V0IGlzIGNyZWF0ZWQ/IFBlcmhhcHMgYSBjb25uZWN0ZWQgQUZfSU5FVCBzb2NrZXQgaXMgc29tZWhvdyBiZWluZyBwYXNzZWQgdG8gYHVkcHY2X3NlbmRtc2dgPyBPciBtYXliZSBpdCYjMzk7cyBiZWVuIGRpc2Nvbm5lY3RlZD8gV2hhdCBpZiBhbiBBRl9JTkVUIHNvY2tldCBpcyBtaXN0YWtlbmx5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gT3IgY291bGQgdGhlcmUgYmUgc29tZSBraW5kIG9mIGFkZHJlc3MgZmFtaWx5IGNvbnZlcnNpb24gaGFwcGVuaW5nLCBsaWtlIGFuIEFGX0lORVQ2IHNvY2tldCBiZWluZyBkb3duZ3JhZGVkIHNvbWVob3c/IFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgYSByZWFsbHkgc3VidGxlIGJ1ZywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgoKUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBMZXQgbWUgY2hlY2sgYGluZXRfc2VuZG1zZ2AsIGBpbmV0Nl9zZW5kbXNnYCwgYW5kIGB1ZHBfc2VuZG1zZ2AgdG8gc2VlIGhvdyB0aGUgc29ja2V0JiMzOTtzIGZhbWlseSBpcyBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgcnVuIGEgcXVpY2sgYGdpdCBncmVwYCB3aXRoaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgc2tfZmFtaWx5ICE9IEFGX0lORVQ2YCBvciBzaW1pbGFyIGNoZWNrcy4gSG9wZWZ1bGx5LCBJIGNhbiBzZWUgaG93IHRoaXMgY2hlY2sgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2ZhbWlseSAhPSBBRl9JTkVUNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTYxNT1pbnQgc2tfcmV1c2Vwb3J0X2F0dGFjaF9icGYodTMyIHVmZCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE2MzktXHRcdCAgICAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9maWx0ZXIuYzoxNjQwOlx0XHQgICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTE2NDEtXHRcdFx0ZXJyID0gLUVOT1RTVVBQO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU3NTA9c3RhdGljIGludCBzb2xfaXB2Nl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc1My17XG5uZXQvY29yZS9maWx0ZXIuYzo1NzU0Olx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNilcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc4NDA9QlBGX0NBTExfNShicGZfdGNwX2NoZWNrX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzg4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjc4ODE6XHRcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpXG5uZXQvY29yZS9maWx0ZXIuYy03ODgyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc5MTM9QlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NTAtXG5uZXQvY29yZS9maWx0ZXIuYzo3OTUxOlx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzk1Mi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTItXHQgKi9cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1NTM6XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTQtXHRcdGdvdG8gdW5sb2NrO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE0NTk9aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjYvdWRwLmMtMTcxOC1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2Ni91ZHAuYzoxNzE5Olx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcbm5ldC9pcHY2L3VkcC5jLTE3MjAtXHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2tjbS9rY21zb2NrLmM9MTI0MD1zdGF0aWMgaW50IGtjbV9hdHRhY2goc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqY3NvY2ssXG4tLVxubmV0L2tjbS9rY21zb2NrLmMtMTI2Mi1cdC8qIE9ubHkgYWxsb3cgVENQIHNvY2tldHMgdG8gYmUgYXR0YWNoZWQgZm9yIG5vdyAqL1xubmV0L2tjbS9rY21zb2NrLmM6MTI2MzpcdGlmICgoY3NrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSB8fFxubmV0L2tjbS9rY21zb2NrLmMtMTI2NC1cdCAgICBjc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApIHtcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jPTExMjk9aW50IG5ldGxibF9jb25uX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2Ny1cdGNhc2UgQUZfSU5FVDY6XG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jOjExNjg6XHRcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2OS1cdFx0XHRyZXRfdmFsID0gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9MTk9c3NpemVfdCBkb191ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmMtMjUtXHRcdGlmIChzYS1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbm5ldC9yeHJwYy9vdXRwdXQuYzoyNjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG5uZXQvcnhycGMvb3V0cHV0LmMtMjctXHRcdFx0XHRwcl93YXJuKFwmIzM0O0FGX0lORVQ2IGFkZHJlc3Mgb24gQUZfSU5FVCBzb2NrZXRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBkb19pcHY2X3NldHNvY2tvcHRgIGZ1bmN0aW9uIGFuZCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IGxpbmUgNTUyLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHByb2JhYmx5IGluIHRoZSBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBmaWxlLCBuZWFyIHRoYXQgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvZiB0aGUgSVB2NiBzb2NrZXQgb3B0aW9ucyBiZWluZyBzZXQsIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBhbmQgaG93IHRob3NlIHNldHRpbmdzIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUgdmFyaW91cyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgY291bGQgYmUgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZW0gYXQgdGhpcyBsZXZlbC4gR290dGEgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzb2NrZXQgb3B0aW9ucyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXG4gNTQxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTQyOlx0XG4gNTQzOlx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcbiA1NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNTQ1Olx0XHR9XG4gNTQ2Olx0XHR9XG4gNTQ3Olx0XG4gNTQ4Olx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4gNTQ5Olx0XG4gNTUwOlx0XHQvKiBBbm90aGVyIHRocmVhZCBoYXMgY29udmVydGVkIHRoZSBzb2NrZXQgaW50byBJUHY0IHdpdGhcbiA1NTE6XHRcdCAqIElQVjZfQUREUkZPUk0gY29uY3VycmVudGx5LlxuIDU1MjpcdFx0ICovXG4gNTUzOlx0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlcbiA1NTQ6XHRcdFx0Z290byB1bmxvY2s7XG4gNTU1Olx0XG4gNTU2Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA1NTc6XHRcbiA1NTg6XHRcdGNhc2UgSVBWNl9BRERSRk9STTpcbiA1NTk6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNTYwOlx0XHRcdFx0Z290byBlX2ludmFsO1xuIDU2MTpcdFx0XHRpZiAodmFsID09IFBGX0lORVQpIHtcbiA1NjI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1JBVylcbiA1NjM6XHRcdFx0XHRcdGJyZWFrO1xuIDU2NDpcdFxuIDU2NTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuIDU2NjpcdFx0XHRcdFx0aWYgKHVkcF9zayhzayktXHUwMDNlcGVuZGluZyA9PSBBRl9JTkVUNikge1xuIDU2NzpcdFx0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuIDU2ODpcdFx0XHRcdFx0XHRicmVhaztcbiA1Njk6XHRcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVB2NiBTb2NrZXQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGB1ZHB2Nl9zZW5kbXNnYCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBjbGlja2VkLiBJdCBsb29rcyBsaWtlIGBJUFY2X0FERFJGT1JNYCBtaWdodCBiZSBhYmxlIHRvIGNvbmN1cnJlbnRseSBjaGFuZ2UgYSBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHksIHNwZWNpZmljYWxseSBmcm9tIElQdjYgdG8gSVB2NC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLgoKSSBzZWUgdGhhdCBiZWZvcmUgdGhlIGBsb2NrX3NvY2soc2spYCBjYWxsLCBpdCYjMzk7cyBwb3NzaWJsZSB0byB1c2UgYHNldHNvY2tvcHQoSVBWNl9BRERSRk9STSlgIHRvIHN3aXRjaCB0aGUgc29ja2V0IGZyb20gQUZfSU5FVDYgdG8gQUZfSU5FVC4gVGhlbiwgYHVkcHY2X3NlbmRtc2dgIGxvY2tzIHRoZSBzb2NrZXQsIHNldHMgYFdSSVRFX09OQ0UodXAtJmd0O3BlbmRpbmcsIEFGX0lORVQ2KTtgLCBhbmQgZ29lcyBvbiB0byBjYWxsIGBpcDZfYXBwZW5kX2RhdGEoLi4uKWAgYW5kIHRoZSByZXN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zICphZnRlciogdGhlIHNvY2tldCBpcyBsb2NrZWQgaWYgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIG5vIGxvbmdlciBBRl9JTkVUNj8gVGhhdOKAmXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbWlnaHQgYmUuCgpUaGUgcGF0Y2ggcHJvdmlkZXMgc29tZSBuZXcgY29kZSB0aGF0IGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIGlzc3VlLiBJdCBjaGVja3MgaWYgYHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDZgICphZnRlciogYGxvY2tfc29jayhzaylgLiBJZiBpdCYjMzk7cyBub3QgSVB2NiwgaXQgcmVsZWFzZXMgdGhlIHNvY2tldCwgcmV0dXJucyBgLUVBRk5PU1VQUE9SVGAsIGFuZCBnb2VzIHRvIGBvdXRgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBtaXRpZ2F0ZSB0aGlzIGV4YWN0IHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBnb29kLgoKTm93LCBJIG5lZWQgdG8gdHJhY2Ugd2hhdCBoYXBwZW5zIHdoZW4gd2UgYGdvdG8gb3V0O2AgaW4gYHVkcHY2X3NlbmRtc2dgLiBLbm93aW5nIHRoZSAmIzM0O291dCYjMzQ7IHBhdGggd2lsbCB0ZWxsIG1lIGlmIHRoZSBzb2NrZXQgaXMgcHJvcGVybHkgY2xlYW5lZCB1cCBvciB3aGV0aGVyIGFuIGluY29tcGxldGUgc3RhdGUgaXMgbGVmdCBiZWhpbmQuIFRoaXMgd2lsbCBkaWN0YXRlIGlmIHRoZSBmaXggaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc1MDpcdFx0XHRlcnIgPSBpbmV0Nl90ZXN0X2JpdChSRUNWRVJSNiwgc2spID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7XG4xNzUxOlx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTc1MjpcdFxuMTc1MzpcdG91dDpcbjE3NTQ6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4xNzU1Olx0b3V0X25vX2RzdDpcbjE3NTY6XHRcdGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTtcbjE3NTc6XHRcdHR4b3B0X3B1dChvcHRfdG9fZnJlZSk7XG4xNzU4Olx0XHRpZiAoIWVycilcbjE3NTk6XHRcdFx0cmV0dXJuIGxlbjtcbjE3NjA6XHRcdC8qXG4xNzYxOlx0XHQgKiBFTk9CVUZTID0gbm8ga2VybmVsIG1lbSwgU09DS19OT1NQQUNFID0gbm8gc25kYnVmIHNwYWNlLiAgUmVwb3J0aW5nXG4xNzYyOlx0XHQgKiBFTk9CVUZTIG1pZ2h0IG5vdCBiZSBnb29kIChpdCYjMzk7cyBub3QgdHVuYWJsZSBwZXIgc2UpLCBidXQgb3RoZXJ3aXNlXG4xNzYzOlx0XHQgKiB3ZSBkb24mIzM5O3QgaGF2ZSBhIGdvb2Qgc3RhdGlzdGljIChJcE91dERpc2NhcmRzIGJ1dCBpdCBjYW4gYmUgdG9vIG1hbnlcbjE3NjQ6XHRcdCAqIHRoaW5ncykuICBXZSBjb3VsZCBhZGQgYW5vdGhlciBuZXcgc3RhdCBidXQgYXQgbGVhc3QgZm9yIG5vdyB0aGF0XG4xNzY1Olx0XHQgKiBzZWVtcyBsaWtlIG92ZXJraWxsLlxuMTc2NjpcdFx0ICovXG4xNzY3Olx0XHRpZiAoZXJyID09IC1FTk9CVUZTIHx8IHRlc3RfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKSlcbjE3Njg6XHRcdFx0VURQNl9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBVRFBfTUlCX1NOREJVRkVSUk9SUyk7XG4xNzY5Olx0XG4xNzcwOlx0XHRyZXR1cm4gZXJyO1xuMTc3MTpcdFxuMTc3MjpcdGRvX2NvbmZpcm06XG4xNzczOlx0XHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1BST0JFKVxuMTc3NDpcdFx0XHRkc3RfY29uZmlybV9uZWlnaChkc3QsIFx1MDAyNmZsNi1cdTAwM2VkYWRkcik7XG4xNzc1Olx0XHRpZiAoIShtc2ctXHUwMDNlbXNnX2ZsYWdzXHUwMDI2TVNHX1BST0JFKSB8fCBsZW4pXG4xNzc2Olx0XHRcdGdvdG8gYmFja19mcm9tX2NvbmZpcm07XG4xNzc3Olx0XHRlcnIgPSAwO1xuMTc3ODpcdFx0Z290byBvdXQ7XG4xNzc5Olx0fVxuMTc4MDpcdEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZyk7XG4xNzgxOlx0XG4xNzgyOlx0c3RhdGljIHZvaWQgdWRwdjZfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuMTc4MzpcdHtcbjE3ODQ6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4xNzg1Olx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbjE3ODY6XHRcbjE3ODc6XHRcdGlmICghUkVBRF9PTkNFKHVwLVx1MDAzZXBlbmRpbmcpIHx8IHVkcF90ZXN0X2JpdChDT1JLLCBzaykpXG4xNzg4Olx0XHRcdHJldHVybjtcbjE3ODk6XHRcbjE3OTA6XHRcdGxvY2tfc29jayhzayk7XG4xNzkxOlx0XHRpZiAodXAtXHUwMDNlcGVuZGluZyBcdTAwMjZcdTAwMjYgIXVkcF90ZXN0X2JpdChDT1JLLCBzaykpXG4xNzkyOlx0XHRcdHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTtcbjE3OTM6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzk0Olx0fVxuMTc5NTpcdFxuMTc5NjpcdHN0YXRpYyB2b2lkIHVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4xNzk3Olx0e1xuMTc5ODpcdFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4xNzk5Olx0XHRsb2NrX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQwCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDY5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdDogS0FTQU4gdnMuIEtNU0FOKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nOiBpdCYjMzk7cyBhZGRpbmcgYSBkZWZlbnNpdmUgY2hlY2sgd2l0aGluIGB1ZHB2Nl9zZW5kbXNnKClgICphZnRlciogYGxvY2tfc29jayhzaylgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiBgc2stJmd0O3NrX2ZhbWlseWAgaXMgYEFGX0lORVQ2YCwgYW5kIGlmIG5vdCwgcmVsZWFzZXMgdGhlIHNvY2tldCBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEFuZCBiZWZvcmUgSSBnZXQgYW55IGZ1cnRoZXIsIHRoZSBjbGVhbnVwIGlzIGdvaW5nIHRvIHJldHVybiBgLUVBRk5PU1VQUE9SVGAgd2hpY2ggd2lsbCBjYWxsIHRoZXNlIGltcG9ydGFudCBjbGVhbnVwIGFjdGlvbnM6IGBkc3RfcmVsZWFzZShkc3QpYCwgYGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKWAsIGFuZCBgdHhvcHRfcHV0KG9wdF90b19mcmVlKWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IEtNU0FOIGlzIHVuaXF1ZWx5IHBvc2l0aW9uZWQgdG8gY2F0Y2gsIGJleW9uZCB3aGF0IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgZmluZD8gTGV0IG1lIGdvIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDoKCjEuICAqKkRvZXMgaXQgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgZGF0YSB0aGF0IGlzIHBhc3NlZCBiYWNrIHRvIHVzZXItc3BhY2UgdmlhIG1ldGhvZHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBTS0IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMgb3IgQlBGIGJ1ZmZlcnMuIEl0JiMzOTtzIGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgcHJvY2Vzc2luZy4KCjIuICAqKkRvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC4gYHNrLSZndDtza19mYW1pbHlgIGlzIHBhcnQgb2YgdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLCBhbmQgaXQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgc29ja2V0IGlzIGNyZWF0ZWQuIFRoYXQgZmllbGQgaXMgbm90IHRoZSBzb3VyY2Ugb2YgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgaW4gdGhpcyBjb2RlIHBhdGguCgozLiAgKipEb2VzIGl0IGNyZWF0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyoqIE5vLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBjb21wbGljYXRlZCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBkb3duIHRoZSBsaW5lLgoKNC4gICoqRG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObywgaXQgZG9lc24mIzM5O3QgdG91Y2ggYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBvZiBidWZmZXJzLgoKVGhlIGJ1ZyB0aGlzIHBhdGNoIGZpeGVzIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudDogaXQgcHJldmVudHMgYHVkcHY2X3NlbmRtc2dgIGZyb20gcHJvY2VlZGluZyB3aXRoIElQdjYtc3BlY2lmaWMgb3BlcmF0aW9ucyBpZiB0aGUgc29ja2V0JiMzOTtzIGZhbWlseSBoYXMgYmVlbiBjb25jdXJyZW50bHkgY2hhbmdlZCB0byBgQUZfSU5FVGAgdmlhIGBJUFY2X0FERFJGT1JNYC4gV2l0aG91dCB0aGlzIGNoZWNrLCB3ZSYjMzk7ZCBwb3RlbnRpYWxseSBoYXZlIGEgdHlwZSBjb25mdXNpb24vc3RhdGUgbWlzbWF0Y2gvdXNlLWFmdGVyLWZyZWUvYmFkIGNhc3QgYmV0d2VlbiBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAuIFRob3NlIGtpbmRzIG9mIG1lbW9yeSBhY2Nlc3MgZXJyb3JzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBzYW5pdGl6ZXJzLgoKVGhpcyBwYXRjaCwgaW4gb3RoZXIgd29yZHMsIGRvZXNuJiMzOTt0ICpleHBvc2UqIG9yICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCwgY3JlYXRlZCwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIEl0IHByZXZlbnRzIGEgcG90ZW50aWFsIG1lbW9yeSBhY2Nlc3MgaXNzdWUgdGhhdCBpcyBhbHJlYWR5IGxpa2VseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIHRvb2xzLiBUaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGhlcmUgaXMgcHJldHR5IGNsZWFyLgoKR2l2ZW4gdGhlIGNyaXRlcmlhIHRoYXQgSSBoYXZlLCBhbmQgd2l0aCB0aGUgJiMzNDtDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTiYjMzQ7IGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgbWluZCwgdGhlIHJ1bGUgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGlzICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBHaXZlbiB0aGUgcGF0Y2ggYW5kIG15IGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB0aGF0IHdvdWxkIGJlIGZsYWdnZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcmlzaywgc28gSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cblxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgdWRwdjZfc2VuZG1zZ2AgdW5kZXIgYGxvY2tfc29jayhzaylgIHRvIGVuc3VyZSBgc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2YC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgd2hlcmUgYW5vdGhlciB0aHJlYWQgY29udmVydHMgdGhlIHNvY2tldCB0byBgQUZfSU5FVGAgdmlhIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0LCBhdm9pZGluZyBzdWJzZXF1ZW50IHByb3RvY29sIG1pc21hdGNoIGFuZCB0eXBlIGNvbmZ1c2lvbiAvIGNvcnJ1cHRpb24gaXNzdWVzIGluIGBpcDZfYXBwZW5kX2RhdGFgLlxuXG5UaGUgY2hlY2sgcmVhZHMgdGhlIHdlbGwtaW5pdGlhbGl6ZWQgYHNrLVx1MDAzZXNrX2ZhbWlseWAgZmllbGQgb2YgYHN0cnVjdCBzb2NrYCBhbmQgZXhpdHMgZWFybHkgd2l0aCBgLUVBRk5PU1VQUE9SVGAuIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdHlwZS1jb25mdXNpb24gYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6MDYuMTUwODAxNzQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDk2NzQxMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHB2Nl9zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgdWRwdjZfc2VuZG1zZ2AgdW5kZXIgYGxvY2tfc29jayhzaylgIHRvIGVuc3VyZSBgc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cXG5cXG5UaGUgY2hlY2sgcmVhZHMgdGhlIHdlbGwtaW5pdGlhbGl6ZWQgYHNrLVxcdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdWRwdjZfc2VuZG1zZygpIGFmdGVyIGFjcXVpcmluZyB0aGUgc29ja2V0IGxvY2sgdG8gZW5zdXJlIHRoZSBzb2NrZXQgZmFtaWx5IGlzIHN0aWxsIEFGX0lORVQ2LCBoYW5kbGluZyBwb3RlbnRpYWwgY29uY3VycmVudCBmYW1pbHkgY2hhbmdlcyAoZS5nLiBJUFY2X0FERFJGT1JNKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBJUHY2IG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjA2LjE1MDgyMjk2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2NjE1ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTk5NTJmNjcwMDg1ZTI3OTFmN2YyOGM0NTc1YjA2YzdiOGZjMDk0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzozOTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXFxuaW5kZXggZmQ4NzU5MDhhYzBjNi4uNTY2YzYzNGE1YTU5NCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xcbisrKyBiL25ldC9pcHY2L3VkcC5jXFxuQEAgLTE3MTYsNiArMTcxNiwxMSBAQCBpbnQgdWRwdjZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0fVxcbiBcXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxuK1xcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGlmICh1bmxpa2VseSh1cC1cXHUwMDNlcGVuZGluZykpIHtcXG4gXFx0XFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXFxuIFxcdFxcdC8qIC4uLiB3aGljaCBpcyBhbiBldmlkZW50IGFwcGxpY2F0aW9uIGJ1Zy4gLS1BTksgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6MDYuNTE4MTQ3NjA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mzc3MDI3NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTk1MmY2NzAwODVlMjc5MWY3ZjI4YzQ1NzViMDZjN2I4ZmMwOTRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6Mzk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXG5pbmRleCBmZDg3NTkwOGFjMGM2Li41NjZjNjM0YTVhNTk0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbisrKyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtMTcxNiw2ICsxNzE2LDExIEBAIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0fVxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuIFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTowNi41MTgxNDkxODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQ0ODA5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJc3N1ZSBpbiBVRFB2NiBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHN0cmFpZ2h0IHRvIGBuZXQvaXB2Ni91ZHAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGluIHRoaXMgY2FzZSwgd2hlcmUgdGhpbmdzIG1pZ2h0IGJyZWFrLiBUaGUgY29tbWl0IG1vZGlmaWVzIHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24g4oCTIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3Igc2VuZGluZyBVRFAgcGFja2V0cyBvdmVyIElQdjYuIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlgLiBIbW1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkga25vdyBgc2stXHUwMDNlc2tfZmFtaWx5YCByZXByZXNlbnRzIHRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgc29ja2V0IGFuZCBgQUZfSU5FVDZgIGlzIElQdjYuIFRoZSBjaGVjayBzZWVtcyB0byBiZSBzYXlpbmcsIFwiaWYgdGhlIHNvY2tldCBpc24ndCBJUHY2LCByZWplY3QgdGhlIHNlbmQuXCJcblxuTm93LCB0aGlzIGZlZWxzIHBvdGVudGlhbGx5IGltcG9ydGFudC4gV2h5IGlzIHRoaXMgY2hlY2sgKm5vdyogYmVpbmcgaW50cm9kdWNlZD8gSXMgdGhpcyBhZGRyZXNzaW5nIGEga25vd24gdnVsbmVyYWJpbGl0eSBvciBidWc/IE9yIHBlcmhhcHMgYSBuZXcgZmVhdHVyZSBvciBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZD8gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zOiBJZiB0aGlzICp3YXNuJ3QqIGNoZWNrZWQgYmVmb3JlLCB3aGF0IHdhcyB0aGUgYmVoYXZpb3IgaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcz8gV2FzIHRoZXJlIGEgc3VidGxlIGJ1ZyBiZWluZyBleHBsb2l0ZWQsIG9yIGFuIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3Q/XG5cblRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLCBJIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2Ni91ZHAuY2AgdG8gc2VlIHdoZXJlIHRoaXMgY2hlY2sgaXMgcGxhY2VkIHdpdGhpbiB0aGUgYHVkcHY2X3NlbmRtc2dgIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgdHJpZ2dlcmVkLiBUaGlzIGNvdWxkIHVuY292ZXIgYW55IHNwZWNpZmljIGVycm9yIHNjZW5hcmlvcy4gV2FzIHRoZXJlIHByaW9yIGNvZGUgd2hpY2ggdGhpcyBoYXMgcmVwbGFjZWQ/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29ja2V0IGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBkZWNpZGUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmVwZXJjdXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjEyLjI2Mjk2MDY1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzAwOlxcdFxcdFxcdGdvdG8gZG9fY29uZmlybTtcXG4xNzAxOlxcdGJhY2tfZnJvbV9jb25maXJtOlxcbjE3MDI6XFx0XFxuMTcwMzpcXHRcXHQvKiBMb2NrbGVzcyBmYXN0IHBhdGggZm9yIHRoZSBub24tY29ya2luZyBjYXNlICovXFxuMTcwNDpcXHRcXHRpZiAoIWNvcmtyZXEpIHtcXG4xNzA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdFxcdHNrYiA9IGlwNl9tYWtlX3NrYihzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXFxuMTcwODpcXHRcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHVkcGhkciksIFxcdTAwMjZpcGM2LFxcbjE3MDk6XFx0XFx0XFx0XFx0XFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXFxuMTcxMDpcXHRcXHRcXHRcXHRcXHQgICBtc2ctXFx1MDAzZW1zZ19mbGFncywgXFx1MDAyNmNvcmspO1xcbjE3MTE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbjE3MTI6XFx0XFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxcbjE3MTM6XFx0XFx0XFx0XFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcXHUwMDI2Y29yay5iYXNlKTtcXG4xNzE0OlxcdFxcdFxcdC8qIGlwNl9tYWtlX3NrYiBzdGVhbHMgZHN0IHJlZmVyZW5jZSAqL1xcbjE3MTU6XFx0XFx0XFx0Z290byBvdXRfbm9fZHN0O1xcbjE3MTY6XFx0XFx0fVxcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjE3MTk6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxuMTcyMDpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3MjE6XFx0XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNzIyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MjM6XFx0XFx0fVxcbjE3MjQ6XFx0XFx0aWYgKHVubGlrZWx5KHVwLVxcdTAwM2VwZW5kaW5nKSkge1xcbjE3MjU6XFx0XFx0XFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXFxuMTcyNjpcXHRcXHRcXHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXFxuMTcyNzpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3Mjg6XFx0XFxuMTcyOTpcXHRcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJ1ZHAgY29yayBhcHAgYnVnIDJcXFxcblxcXCIpO1xcbjE3MzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNzMxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRcXHRXUklURV9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nLCBBRl9JTkVUNik7XFxuMTczNTpcXHRcXG4xNzM2OlxcdGRvX2FwcGVuZF9kYXRhOlxcbjE3Mzc6XFx0XFx0dXAtXFx1MDAzZWxlbiArPSB1bGVuO1xcbjE3Mzg6XFx0XFx0ZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBpcF9nZW5lcmljX2dldGZyYWcsIG1zZywgdWxlbixcXG4xNzM5OlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgXFx1MDAyNmlwYzYsIGZsNixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6MTIuMjYzMDc0NjA3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMTE3OTEwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFkZHJlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyB0aGUgYHVkcHY2X3NlbmRtc2dgIGZ1bmN0aW9uIGlzIGJlaGF2aW5nLiBUaGVyZSBzZWVtcyB0byBiZSBzb21ldGhpbmcgYW1pc3Mgd2l0aCBJUHY0IHNvY2tldHMgYmVpbmcgcGFzc2VkIHRvIGEgZnVuY3Rpb24gcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBJUHY2LCB3aGljaCBpcyBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGEgc29ja2V0IG9yaWdpbmFsbHkgY3JlYXRlZCBhcyBJUHY2IGlzIHNvbWVob3cgdHJhbnNpdGlvbmluZyB0byBJUHY0LiBgSVBWNl9BRERSRk9STWAgaXMgaW1tZWRpYXRlbHkgc3VzcGVjdC4gUGVyaGFwcyBhIGNvbm5lY3RlZCBVRFAgc29ja2V0IGlzIGludm9sdmVkLCBvciBldmVuIGEgcmFjZSBjb25kaXRpb24gYXJvdW5kIGBzZXRzb2Nrb3B0YCBhbmQgYGNvbm5lY3RgIG1pZ2h0IGJlIHRoZSByb290IGNhdXNlIG9mIHRoaXMgZmFtaWx5IHN3aXRjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYElQVjZfQUREUkZPUk1gIGFjdHVhbGx5IGZvcmNlcyBhIGZhbWlseSBzd2l0Y2ggb2YgdGhlIHNvY2tldC4gQWx0ZXJuYXRpdmVseSwgY291bGQgYSBjaGFuZ2UgdG8gYEFGX0lORVRgIGhhcHBlbiBlbHNld2hlcmU/IFRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxpbmcgYFdSSVRFX09OQ0UodXAtXHUwMDNlcGVuZGluZywgQUZfSU5FVDYpO2Agd2hpY2ggc2VlbXMgb2RkLiBGdXJ0aGVybW9yZSwgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaXA2X2FwcGVuZF9kYXRhKHNrLCAuLi4pYCBhc3N1bWVzIGBpbmV0Nl9zayhzaylgIGlzIHZhbGlkLiBTbyB0aGlzIG1lYW5zIHRoZSBjb3JraW5nIHByb2Nlc3MgYW5kIHNvY2tldCBmYW1pbHkgaGF2ZSB0byBiZSBhbGlnbmVkLCBvciB0aGUgY29kZSBpcyBleHBlY3RpbmcgYSBzd2l0Y2ggKmR1cmluZyogY29ya2luZywgd2hpY2ggc2VlbXMgaW5oZXJlbnRseSByaXNreS4gSSBuZWVkIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZSBwb3RlbnRpYWwgZm9yIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiB0aGUgaW50ZW5kZWQgc29ja2V0IGZhbWlseSBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cywgZXNwZWNpYWxseSB3aGVuIGNvcmtpbmcgaXMgaW52b2x2ZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIHN1cnJvdW5kaW5nIGBJUFY2X0FERFJGT1JNYCBhbmQgb3RoZXIgY29kZSB0aGF0IG1pZ2h0IGJlIHJlc3BvbnNpYmxlIGZvciBjaGFuZ2luZyB0aGUgc29ja2V0J3MgZmFtaWx5LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgbmV0L2lwdjYgZGlyZWN0b3J5LiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMwLjU3NDg2Nzg4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxODcxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9BRERSRk9STVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jPTQyNj1pbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy00MzEtXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo0MzI6XFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVxcdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDMzLVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz01NDc9aW50IGluZXQ2X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy01NjktXFx0ZGVmYXVsdDpcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjU3MDpcXHRcXHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXFx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXFxubmV0L2lwdjYvYWZfaW5ldDYuYy01NzEtXFx0XFx0cHJvdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCk7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTYzMT1pbnQgaW5ldDZfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02MzgtXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2Mzk6XFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVxcdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz02NDU9aW50IGluZXQ2X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjU0OlxcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NS1cXHRwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTUwLVxcdC8qIEFub3RoZXIgdGhyZWFkIGhhcyBjb252ZXJ0ZWQgdGhlIHNvY2tldCBpbnRvIElQdjQgd2l0aFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1NTE6XFx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU1Mi1cXHQgKi9cXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTctXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU1ODpcXHRjYXNlIElQVjZfQUREUkZPUk06XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU1OS1cXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTA3OD1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDkwLVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDkxOlxcdGNhc2UgSVBWNl9BRERSRk9STTpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTA5Mi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMwLjgwMzA1OTkwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTY1NjI4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGB1ZHBfc2VuZG1zZ2AgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGB1ZHBfc2VuZG1zZ2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UgaXQncyB0aGUgY29yZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBVRFAgZGF0YWdyYW1zLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCB0by4uLiB3ZWxsLCBldmVyeXRoaW5nLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBvYnZpb3VzOiB3aGF0IGFyZSB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHM/IFdoYXQncyB0aGUgY29udHJvbCBmbG93PyBXaGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQsIGlmIGFueT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzb2NrZXQgb3B0aW9ucywgZXNwZWNpYWxseSB0aGluZ3MgcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uIG9yIGNvbmdlc3Rpb24gY29udHJvbC4gRG9lcyBpdCB1c2UgdGhlIGdlbmVyaWMgbmV0d29yayBzdGFjayBmdW5jdGlvbnMgZWZmZWN0aXZlbHksIG9yIGRvZXMgaXQgaGF2ZSBjdXN0b20gY29kZT8gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXJzOyBhcmUgdGhlcmUgYW55IGRyaXZlci1zcGVjaWZpYyBxdWlya3MgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcmVsaWFiaWxpdHk/IFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMzLjA5OTYyNTA5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDczNTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NrX3NvY2tcXFxcKHNrXFxcXCk7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3VkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTEyMzU9aW50IHVkcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTI3MC1cXHRcXHQgKi9cXG5uZXQvaXB2NC91ZHAuYzoxMjcxOlxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdWRwLmMtMTI3Mi1cXHRcXHRpZiAobGlrZWx5KHVwLVxcdTAwM2VwZW5kaW5nKSkge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTQ0OC1cXG5uZXQvaXB2NC91ZHAuYzoxNDQ5OlxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdWRwLmMtMTQ1MC1cXHRpZiAodW5saWtlbHkodXAtXFx1MDAzZXBlbmRpbmcpKSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xNTExPXZvaWQgdWRwX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTE1MTgtXFxubmV0L2lwdjQvdWRwLmM6MTUxOTpcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTE1MjAtXFx0aWYgKHVwLVxcdTAwM2VwZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICF1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjE0OD1zdGF0aWMgaW50IHVkcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjE1Mi1cXG5uZXQvaXB2NC91ZHAuYzoyMTUzOlxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdWRwLmMtMjE1NC1cXHRyZXMgPSBfX2lwNF9kYXRhZ3JhbV9jb25uZWN0KHNrLCB1YWRkciwgYWRkcl9sZW4pO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjE4OT1pbnQgdWRwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxubmV0L2lwdjQvdWRwLmMtMjE5MC17XFxubmV0L2lwdjQvdWRwLmM6MjE5MTpcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTIxOTItXFx0X191ZHBfZGlzY29ubmVjdChzaywgZmxhZ3MpO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjg5MD1pbnQgdWRwX2xpYl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI5MDEtXFx0XFx0aWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGIHx8IG9wdG5hbWUgPT0gU09fUkNWQlVGRk9SQ0UpIHtcXG5uZXQvaXB2NC91ZHAuYzoyOTAyOlxcdFxcdFxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC91ZHAuYy0yOTAzLVxcdFxcdFxcdC8qIHBhaXJlZCB3aXRoIFJFQURfT05DRSBpbiB1ZHBfcm1lbV9yZWxlYXNlKCkgKi9cXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI5MjMtXFx0XFx0XFx0dWRwX2NsZWFyX2JpdChDT1JLLCBzayk7XFxubmV0L2lwdjQvdWRwLmM6MjkyNDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTI5MjUtXFx0XFx0XFx0cHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yOTMwLVxcdGNhc2UgVURQX0VOQ0FQOlxcbm5ldC9pcHY0L3VkcC5jOjI5MzE6XFx0XFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTI5MzItXFx0XFx0c3dpdGNoICh2YWwpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI5NzItXFx0Y2FzZSBVRFBfR1JPOlxcbm5ldC9pcHY0L3VkcC5jOjI5NzM6XFx0XFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTI5NzQtXFx0XFx0Lyogd2hlbiBlbmFibGluZyBHUk8sIGFjY2VwdCB0aGUgcmVsYXRlZCBHU08gcGFja2V0IHR5cGUgKi9cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMxMTA9aW50IHVkcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTEyLVxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbm5ldC9pcHY0L3VkcC5jOjMxMTM6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC91ZHAuYy0zMTE0LVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzUxNT1zdGF0aWMgaW50IGJwZl9pdGVyX3VkcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM1MjYtXFxubmV0L2lwdjQvdWRwLmM6MzUyNzpcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTM1MjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMzLjE5NDM2NDMwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NDc1MjM1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBgdWRwdjZfc2VuZG1zZ2A6IEEgUXVpY2sgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGB1ZHB2Nl9zZW5kbXNnYC4gSXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgSVB2NiBVRFAncyBzZW5kbXNnIGZ1bmN0aW9uYWxpdHkuIE15IGd1dCBzYXlzIGl0J3Mgd29ydGggYSBjbG9zZXIgaW5zcGVjdGlvbiwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIEZpcnN0LCBpcyBpdCBqdXN0IGRlY29yYXRpdmUgY29kZSwgb3IgZG9lcyBpdCBhY3R1YWxseSAqZG8qIHNvbWV0aGluZz8gV2VsbCwgdGhhdCBgaWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpYCBjaGVjayBpbmRpY2F0ZXMgZnVuY3Rpb25hbCBsb2dpYyB3aXRoIGFuIGAtRUFGTk9TVVBQT1JUYCBlcnJvciByZXR1cm4uIFNvLCBubywgaXQncyBub3QganVzdCBmbHVmZi4gR29vZC4gTmV4dCwgaXMgdGhpcyBjb2RlIGV2ZW4gaGl0IGluIHR5cGljYWwgZGVwbG95bWVudHM/IElQdjYgVURQIGlzIGV2ZXJ5d2hlcmUsIGFuZCB0aGlzIGlzIHdoZXJlIHRoYXQgc2VuZG1zZyBvcGVyYXRpb24gbGl2ZXMsIHNvIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmluYWxseSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gWWVzISBDb3JlIG5ldHdvcmsgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBpdCBoYW5kbGVzIElQdjYsIGlzIGFic29sdXRlbHkgYSBwcmltZSB0YXJnZXQuIEFueSBzdWJ0bGUgYnVnIGNhbiBoYXZlIGZhci1yZWFjaGluZyBlZmZlY3RzLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIGZvciBgbmV0L2lwdjYvdWRwLmNgIGFuZCBzcGVjaWZpY2FsbHkgYHVkcHY2X3NlbmRtc2dgLiBUaW1lIHRvIHBva2UgYXJvdW5kIGluIGBuZXQvaXB2Ni9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTo0MC4wNDE4OTAyMzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjI4MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcXHRcXHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXFx0XFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDAuMDkyNTIzMjE3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTAyMDMxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaXB2Ni15YCB0aGluZyBpcyBnZXR0aW5nIGNvbXBpbGVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIEl0J3MgcHJldHR5IHN0YW5kYXJkIHByb2NlZHVyZTsgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NiBzdXBwb3J0IHdpdGhpbiB0aGUga2VybmVsIGlzIGdvaW5nIHRvIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcywgb2JqZWN0IGZpbGUgbGlzdHMsIGFuZCBob3BlZnVsbHkgc29tZSBjbGV2ZXIgdXNlIG9mIG1ha2UgdmFyaWFibGVzLiBIb3BlZnVsbHkgaXQgd2lsbCBiZSBlYXNpbHkgcmVhZGFibGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBJUHY2IHN1YnN5c3RlbSwgc28gSSdtIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIGNvbXBsZXhpdHksIGJ1dCBub3RoaW5nIEkgY2FuJ3QgaGFuZGxlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgaW5zaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDIuMjAyNzI5MDM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVDYpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxuICAxNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlwdjYtJChDT05GSUdfWEZSTSkgKz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXFxcXG4gIDE5OlxcdFxcdHhmcm02X291dHB1dC5vIHhmcm02X3Byb3RvY29sLm9cXG4gIDIwOlxcdGlwdjYtJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIub1xcbiAgMjE6XFx0aXB2Ni0kKENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUykgKz0gZmliNl9ydWxlcy5vXFxuICAyMjpcXHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjM6XFx0aXB2Ni0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAyNDpcXHRpcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG4gIDI1OlxcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxuICAyNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSArPSBzZWc2X2htYWMub1xcbiAgMjc6XFx0aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4gIDI4OlxcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgKz0gaW9hbTZfaXB0dW5uZWwub1xcbiAgMjk6XFx0XFxuICAzMDpcXHRvYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxuICAzMTpcXHRvYmotJChDT05GSUdfSU5FVDZfRVNQKSArPSBlc3A2Lm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRCkgKz0gZXNwNl9vZmZsb2FkLm9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICs9IGlwY29tcDYub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMKSArPSB4ZnJtNl90dW5uZWwub1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgKz0gdHVubmVsNi5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSArPSBtaXA2Lm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhL1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIvXFxuICAzOTpcXHRcXG4gIDQwOlxcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgKz0gaXA2X3Z0aS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjQyLjIwMjgwODkzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc3Njc4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggYENPTkZJR19JUFY2YC4gV2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydD8gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgbmV0d29ya2luZyBvbmVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBuZXQvaXB2Ni9LY29uZmlnYCBkaXJlY3RseSwgb3IgbWF5YmUgZXZlbiB0aGUgbW9yZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AgZmlsZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmVhdHVyZXMuIEknbSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGBDT05GSUdfSVBWNmAuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDUuNzgwNDg5NzI4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc3MjM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDUuODQ4MjY3MzY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjg2NDUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgSVB2NiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIElQdjYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGluaXRpYWwgbGluZXMsIGFwcHJveGltYXRlbHkgdGhlIGZpcnN0IHR3ZW50eSBvciBzby4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgY29yZSwgdG9wLWxldmVsIHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgb3ZlcmFsbCBlbmFibGUvZGlzYWJsZSBzd2l0Y2ggZm9yIElQdjYsIHByb2JhYmx5IHNvbWUga2V5IGRlZmF1bHQgYmVoYXZpb3JzLCBtYXliZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29yayBvciBwbGF0Zm9ybSBmZWF0dXJlcy4uLiBJdOKAmXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCB0byB0aGUgSVB2NiBjb25maWd1cmF0aW9uIHRyZWUsIHNvIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgb2ZmZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NTAuOTE2OTE1NzgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVB2NiBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBWNlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IHlcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU3VwcG9ydCBmb3IgSVAgdmVyc2lvbiA2IChJUHY2KS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBJUHY2LCBzZWVcXG4gIDE0OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjZcXHUwMDNlLlxcbiAgMTU6XFx0XFx0ICBGb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgSVB2NiB1bmRlciBMaW51eCwgc2VlXFxuICAxNjpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcHY2LnJzdCBhbmQgcmVhZCB0aGUgSE9XVE8gYXRcXG4gIDE3OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL0hPV1RPL0xpbnV4K0lQdjYtSE9XVE8vXFx1MDAzZVxcbiAgMTg6XFx0XFxuICAxOTpcXHRpZiBJUFY2XFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxuICAyMjpcXHRcXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFJvdXRlciBQcmVmZXJlbmNlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byB0aGUgUm91dGVyXFxuICAyNTpcXHRcXHQgIEFkdmVydGlzZW1lbnQgbWVzc2FnZSB3aGljaCBpbXByb3ZlcyB0aGUgYWJpbGl0eSBvZiBob3N0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTo1MC45MTY5OTEwMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MTEzNzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgVURQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gYW5kIEkgc2VlIGBtZW51Y29uZmlnIElQVjZgIGhhcyBhIGJvb2xlYW4gZW50cnksIFwiVGhlIElQdjYgcHJvdG9jb2xcIi4gU3RhbmRhcmQgc3R1ZmYuIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFB2NiBzZW5kIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGVyZSBnaXZlcyBtZSBjb25maWRlbmNlIHRvIGxvb2sgZm9yIHRoZSByZWxldmFudCBjb2RlLCBzbyBJJ2xsIGRyaWxsIGRvd24gdG8gYG5ldC9pcHY2L3VkcC5jYC4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCB0aGUgbG93LWRvd24gb24gYHVkcHY2X3NlbmRtc2dgLiBJIG5lZWQgdG8gc2VlIHRoZSBkZWNsYXJhdGlvbiBhbmQsIGltcG9ydGFudGx5LCB3aGF0IHRoZSBzeW1ib2wgbmFtZSBpcy4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgY29kZSdzIHRoZXJlLCB1bmRlcnN0YW5kaW5nIGhvdyBpdCdzIGVuYWJsZWQgdmlhIHRoZSBjb25maWcsIGFuZCBnZXR0aW5nIHJlYWR5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTo1My40MDgxMzE3NjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDQ3MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcHY2X3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuYz02MzE9aW50IGluZXQ2X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjQxOlxcdHJldHVybiBJTkRJUkVDVF9DQUxMXzIocHJvdC1cXHUwMDNlc2VuZG1zZywgdGNwX3NlbmRtc2csIHVkcHY2X3NlbmRtc2csXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NDItXFx0XFx0XFx0ICAgICAgIHNrLCBtc2csIHNpemUpO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTctXFx0XFx0XFx0ICogYnV0IHRoZXJlIGlzIHN0aWxsIGEgcmFjZS4gIFNlZSB0aGUgbG9ja2xlc3MgcGF0aFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo2MTg6XFx0XFx0XFx0ICogaW4gdWRwdjZfc2VuZG1zZygpIGFuZCBpcHY2X2xvY2FsX3J4cG10dSgpLlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTktXFx0XFx0XFx0ICovXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xMzU2PXN0YXRpYyBpbnQgdWRwX3Y2X3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTYgKmZsNixcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTEzNzMtXFx0dWgtXFx1MDAzZWRlc3QgPSBmbDYtXFx1MDAzZWZsNl9kcG9ydDtcXG5uZXQvaXB2Ni91ZHAuYzoxMzc0OlxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcHY2X3NlbmRtc2cuICovXFxubmV0L2lwdjYvdWRwLmMtMTM3NS1cXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE0Mzg9c3RhdGljIGludCB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xNDU4LVxcbm5ldC9pcHY2L3VkcC5jOjE0NTk6aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L2lwdjYvdWRwLmMtMTQ2MC17XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xNzc5LX1cXG5uZXQvaXB2Ni91ZHAuYzoxNzgwOkVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZyk7XFxubmV0L2lwdjYvdWRwLmMtMTc4MS1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5MDA9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTExLVxcdC5nZXRzb2Nrb3B0XFx0XFx0PSB1ZHB2Nl9nZXRzb2Nrb3B0LFxcbm5ldC9pcHY2L3VkcC5jOjE5MTI6XFx0LnNlbmRtc2dcXHRcXHQ9IHVkcHY2X3NlbmRtc2csXFxubmV0L2lwdjYvdWRwLmMtMTkxMy1cXHQucmVjdm1zZ1xcdFxcdD0gdWRwdjZfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NTMuNTA0MTg0OTIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NzAwNDU5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURQdjYgU2VuZCBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGRpZmYgb25seSB0b3VjaGVzIGB1ZHB2Nl9zZW5kbXNnYCBpbiBgbmV0L2lwdjYvdWRwLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIGZvY3VzIHNpZ25pZmljYW50bHkuIEknbSBub3cgdmVyaWZ5aW5nIHRoYXQgSSd2ZSBpZGVudGlmaWVkIGFsbCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgdGhpcyBpcyB0aGUgb25seSByZWxldmFudCBvbmUuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBgdWRwdjZfc2VuZG1zZ2AgYSBzdGF0aWMgZnVuY3Rpb24/IEEgcXVpY2sgY2hlY2sgcmV2ZWFscyBpdCdzICpub3QqIHN0YXRpYywgc2luY2UgaXQncyBleHBvcnRlZCB2aWEgYEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZylgLiBUaGF0J3MgaW1wb3J0YW50OyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IGZpbGUuXG5cbk5vdywgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3MgYSBob3QgcGF0aC4gU2luY2UgaXQncyBhbiBBUEkgZW50cnlwb2ludCAoYHNlbmRtc2dgKSwgSSBkb24ndCBiZWxpZXZlIHRoaXMgdG8gYmUgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBUaGlzIGlzIHZhbHVhYmxlIGNvbnRleHQgZm9yIGFueSBmdXp6aW5nIGVmZm9ydHMuXG5cbkZpbmFsbHksIEkgbm90ZSB0aGUgYElQVjZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBPYnZpb3VzbHkgcmVsZXZhbnQgZ2l2ZW4gdGhlIGZpbGUgcGF0aC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBhY2NvdW50ZWQgZm9yLlxuXG5JJ20gcmVhZHkgdG8gbW92ZSBvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTM1LCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDoyMC4yMDQ2NDcxODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzc3NDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcHY2X3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB1ZHB2Nl9zZW5kbXNnKCkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBzb2NrZXQgbG9jayB0byBlbnN1cmUgdGhlIHNvY2tldCBmYW1pbHkgaXMgc3RpbGwgQUZfSU5FVDYsIGhhbmRsaW5nIHBvdGVudGlhbCBjb25jdXJyZW50IGZhbWlseSBjaGFuZ2VzIChlLmcuIElQVjZfQUREUkZPUk0pLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIElQdjYgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDoyMC4yODg0Mjc2MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzU5MTA1MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6MjAuMjg4ODk4NTg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODAzNTg2Mjg3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGB1ZHB2Nl9zZW5kbXNnYCB1bmRlciBgbG9ja19zb2NrKHNrKWAgdG8gZW5zdXJlIGBzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2YC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgd2hlcmUgYW5vdGhlciB0aHJlYWQgY29udmVydHMgdGhlIHNvY2tldCB0byBgQUZfSU5FVGAgdmlhIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0LCBhdm9pZGluZyBzdWJzZXF1ZW50IHByb3RvY29sIG1pc21hdGNoIGFuZCB0eXBlIGNvbmZ1c2lvbiAvIGNvcnJ1cHRpb24gaXNzdWVzIGluIGBpcDZfYXBwZW5kX2RhdGFgLlxcblxcblRoZSBjaGVjayByZWFkcyB0aGUgd2VsbC1pbml0aWFsaXplZCBgc2stXFx1MDAzZXNrX2ZhbWlseWAgZmllbGQgb2YgYHN0cnVjdCBzb2NrYCBhbmQgZXhpdHMgZWFybHkgd2l0aCBgLUVBRk5PU1VQUE9SVGAuIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdHlwZS1jb25mdXNpb24gYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTk1MmY2NzAwODVlMjc5MWY3ZjI4YzQ1NzViMDZjN2I4ZmMwOTRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6Mzk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXG5pbmRleCBmZDg3NTkwOGFjMGM2Li41NjZjNjM0YTVhNTk0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbisrKyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtMTcxNiw2ICsxNzE2LDExIEBAIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0fVxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuIFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDoyMC4yODg4OTk3NDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwNDc5MjIzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVURQdjYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5IGFuZCB3aGF0IHByb2JsZW0gaXQncyBhZGRyZXNzaW5nLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZTogYSBuZXcgY2hlY2sgd2l0aGluIGB1ZHB2Nl9zZW5kbXNnYC4gSXQncyBhIHF1aWNrIGNvbmRpdGlvbmFsIHN0YXRlbWVudDogYGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKWAuIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2h5IGFyZSB3ZSBjaGVja2luZyB0aGUgYWRkcmVzcyBmYW1pbHkgd2l0aGluIGEgZnVuY3Rpb24gbmFtZWQgYHVkcHY2X3NlbmRtc2dgPyBTaG91bGRuJ3QgdGhpcyAqb25seSogYmUgZGVhbGluZyB3aXRoIElQdjYgc29ja2V0cz9cblxuVGhlIGFkZGl0aW9uIG9mIHRoaXMgY2hlY2sgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnIG9yIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IGZhbWlseSB1c2FnZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBub3cgZ3VhcmRpbmcgYWdhaW5zdCBhIGNvbmRpdGlvbiB3aGVyZSBhIG5vbi1JUHY2IHNvY2tldCBtaWdodCBiZSBwYXNzZWQgdG8gdGhlIGB1ZHB2Nl9zZW5kbXNnYCBmdW5jdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHdoZXJlIHlvdSBjYW4gZ2V0IGEgbmFzdHkgYnVnLlxuXG5UaGUgY29tbWVudCBcIndoaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnXCIgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IHRoZSBjb2RlICp3YXNuJ3QqIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiwgYW5kIHRoZSBwcmVzZW5jZSBvZiBzdWNoIGEgY29uZGl0aW9uIGlzIGxpa2VseSBkdWUgdG8gYW4gZXJyb3IgdXBzdHJlYW0sIG1heWJlIGluIHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGlzIHNvY2tldC4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IGEgZGVmZW5zaXZlIG1lYXN1cmUsIGF0dGVtcHRpbmcgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gY3Jhc2hpbmcsIG9yIHJldHVybmluZyBhbiBpbmNvcnJlY3QgZXJyb3IuIFRoZSBmYWN0IHRoYXQgdGhlIGNoZWNrIHVzZXMgYHVubGlrZWx5KClgIGhpbnRzIHRoaXMgY29uZGl0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHJhcmUsIHByb2JhYmx5IHRyaWdnZXJlZCBieSBhIHByb2dyYW1taW5nIG1pc3Rha2UuIFRoZSBcImxvY2tfc29jayhzaylcIiBhbmQgXCJyZWxlYXNlX3NvY2soc2spXCIgY2FsbHMgc3VnZ2VzdCB0aGUgc29ja2V0IGlzIGFscmVhZHkgbG9ja2VkLCBzbyB0aGlzIGlzIGFub3RoZXIgZGF0YSBzYWZldHkgY2hlY2sgdGhhdCB3ZSBzaG91bGQgYmUgdGFraW5nIG5vdGljZSBvZi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgcmV2aWV3IHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lIDE3MTYgdG8gc2VlIGhvdyBgdXAtXHUwMDNlcGVuZGluZ2AgaXMgdXNlZCBhbmQgaG93IHRoaXMgbmV3IGBBRl9JTkVUNmAgY2hlY2sgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIGxvZ2ljLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgaG93IHRoaXMgcGF0Y2ggbWl0aWdhdGVzIHRoZW0uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGlmIHRoaXMgYEVBRk5PU1VQUE9SVGAgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIsIGFuZCBpZiB0aGlzIGNvdWxkIGJlIGFuIGV4cGxvaXQgdmVjdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6NDcuMzM2ODI0ODI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjgwOlxcdFxcdFxcdGZsNi1cXHUwMDNlZmxvd2k2X29pZiA9IFJFQURfT05DRShucC1cXHUwMDNlbWNhc3Rfb2lmKTtcXG4xNjgxOlxcdFxcdFxcdGNvbm5lY3RlZCA9IGZhbHNlO1xcbjE2ODI6XFx0XFx0fSBlbHNlIGlmICghZmw2LVxcdTAwM2VmbG93aTZfb2lmKVxcbjE2ODM6XFx0XFx0XFx0Zmw2LVxcdTAwM2VmbG93aTZfb2lmID0gUkVBRF9PTkNFKG5wLVxcdTAwM2V1Y2FzdF9vaWYpO1xcbjE2ODQ6XFx0XFxuMTY4NTpcXHRcXHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTZfdG9fZmxvd2lfY29tbW9uKGZsNikpO1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRmbDYtXFx1MDAzZWZsb3dsYWJlbCA9IGlwNl9tYWtlX2Zsb3dpbmZvKGlwYzYudGNsYXNzLCBmbDYtXFx1MDAzZWZsb3dsYWJlbCk7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdGRzdCA9IGlwNl9za19kc3RfbG9va3VwX2Zsb3coc2ssIGZsNiwgZmluYWxfcCwgY29ubmVjdGVkKTtcXG4xNjkwOlxcdFxcdGlmIChJU19FUlIoZHN0KSkge1xcbjE2OTE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkc3QpO1xcbjE2OTI6XFx0XFx0XFx0ZHN0ID0gTlVMTDtcXG4xNjkzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE2OTQ6XFx0XFx0fVxcbjE2OTU6XFx0XFxuMTY5NjpcXHRcXHRpZiAoaXBjNi5obGltaXQgXFx1MDAzYyAwKVxcbjE2OTc6XFx0XFx0XFx0aXBjNi5obGltaXQgPSBpcDZfc2tfZHN0X2hvcGxpbWl0KG5wLCBmbDYsIGRzdCk7XFxuMTY5ODpcXHRcXG4xNjk5OlxcdFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFnc1xcdTAwMjZNU0dfQ09ORklSTSlcXG4xNzAwOlxcdFxcdFxcdGdvdG8gZG9fY29uZmlybTtcXG4xNzAxOlxcdGJhY2tfZnJvbV9jb25maXJtOlxcbjE3MDI6XFx0XFxuMTcwMzpcXHRcXHQvKiBMb2NrbGVzcyBmYXN0IHBhdGggZm9yIHRoZSBub24tY29ya2luZyBjYXNlICovXFxuMTcwNDpcXHRcXHRpZiAoIWNvcmtyZXEpIHtcXG4xNzA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdFxcdHNrYiA9IGlwNl9tYWtlX3NrYihzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXFxuMTcwODpcXHRcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHVkcGhkciksIFxcdTAwMjZpcGM2LFxcbjE3MDk6XFx0XFx0XFx0XFx0XFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXFxuMTcxMDpcXHRcXHRcXHRcXHRcXHQgICBtc2ctXFx1MDAzZW1zZ19mbGFncywgXFx1MDAyNmNvcmspO1xcbjE3MTE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbjE3MTI6XFx0XFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxcbjE3MTM6XFx0XFx0XFx0XFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcXHUwMDI2Y29yay5iYXNlKTtcXG4xNzE0OlxcdFxcdFxcdC8qIGlwNl9tYWtlX3NrYiBzdGVhbHMgZHN0IHJlZmVyZW5jZSAqL1xcbjE3MTU6XFx0XFx0XFx0Z290byBvdXRfbm9fZHN0O1xcbjE3MTY6XFx0XFx0fVxcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjE3MTk6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxuMTcyMDpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3MjE6XFx0XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNzIyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MjM6XFx0XFx0fVxcbjE3MjQ6XFx0XFx0aWYgKHVubGlrZWx5KHVwLVxcdTAwM2VwZW5kaW5nKSkge1xcbjE3MjU6XFx0XFx0XFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXFxuMTcyNjpcXHRcXHRcXHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXFxuMTcyNzpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3Mjg6XFx0XFxuMTcyOTpcXHRcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJ1ZHAgY29yayBhcHAgYnVnIDJcXFxcblxcXCIpO1xcbjE3MzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNzMxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRcXHRXUklURV9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nLCBBRl9JTkVUNik7XFxuMTczNTpcXHRcXG4xNzM2OlxcdGRvX2FwcGVuZF9kYXRhOlxcbjE3Mzc6XFx0XFx0dXAtXFx1MDAzZWxlbiArPSB1bGVuO1xcbjE3Mzg6XFx0XFx0ZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBpcF9nZW5lcmljX2dldGZyYWcsIG1zZywgdWxlbixcXG4xNzM5OlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgXFx1MDAyNmlwYzYsIGZsNixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6NDcuMzM2OTM4NjU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MjUxODM0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gdHJ5aW5nIHRvIGRlYnVnIG9yIHVuZGVyc3RhbmQgYHVkcHY2X3NlbmRtc2dgOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHVkcHY2X3NlbmRtc2dgIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gd2l0aGluIGB1ZHB2Nl9zZW5kbXNnYC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHBvdGVudGlhbCBpc3N1ZXMsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGxpbmVzICpiZWZvcmUqIGFuZCAqYWZ0ZXIqIHRoZSBzZWN0aW9uIEknbSBmb2N1c2luZyBvbi4gSXQncyBhbG1vc3QgbmV2ZXIgaXNvbGF0ZWQuIEknbGwgcmVhZCB0aHJvdWdoIGxpbmVzIDE1MDAgdG8gMTY4MC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIGZvciBhbmFseXNpcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgcGFyYW1ldGVycyBhcmUgc2V0LCBlcnJvciBoYW5kbGluZyBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgd29ya2Zsb3cuIExldCdzIHN0YXJ0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDo1Ni4xNjIxMjQ2NjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTAwOlxcdFxcdFxcdFxcdGdvdG8gZG9fdWRwX3NlbmRtc2c7XFxuMTUwMTpcXHRcXHRcXHRjYXNlIEFGX1VOU1BFQzpcXG4xNTAyOlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWUgPSBzaW42ID0gTlVMTDtcXG4xNTAzOlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gPSBhZGRyX2xlbiA9IDA7XFxuMTUwNDpcXHRcXHRcXHRcXHRkYWRkciA9IE5VTEw7XFxuMTUwNTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTA2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTUwNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTA4OlxcdFxcdFxcdH1cXG4xNTA5OlxcdFxcdH0gZWxzZSBpZiAoIVJFQURfT05DRSh1cC1cXHUwMDNlcGVuZGluZykpIHtcXG4xNTEwOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbjE1MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XFxuMTUxMjpcXHRcXHRcXHRkYWRkciA9IFxcdTAwMjZzay1cXHUwMDNlc2tfdjZfZGFkZHI7XFxuMTUxMzpcXHRcXHR9IGVsc2VcXG4xNTE0OlxcdFxcdFxcdGRhZGRyID0gTlVMTDtcXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0aWYgKGRhZGRyKSB7XFxuMTUxNzpcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKGRhZGRyKSkge1xcbjE1MTg6XFx0XFx0XFx0XFx0c3RydWN0IHNvY2thZGRyX2luIHNpbjtcXG4xNTE5OlxcdFxcdFxcdFxcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4xNTIwOlxcdFxcdFxcdFxcdHNpbi5zaW5fcG9ydCA9IHNpbjYgPyBzaW42LVxcdTAwM2VzaW42X3BvcnQgOiBpbmV0LVxcdTAwM2VpbmV0X2Rwb3J0O1xcbjE1MjE6XFx0XFx0XFx0XFx0c2luLnNpbl9hZGRyLnNfYWRkciA9IGRhZGRyLVxcdTAwM2VzNl9hZGRyMzJbM107XFxuMTUyMjpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lID0gXFx1MDAyNnNpbjtcXG4xNTIzOlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gPSBzaXplb2Yoc2luKTtcXG4xNTI0OlxcdGRvX3VkcF9zZW5kbXNnOlxcbjE1MjU6XFx0XFx0XFx0XFx0ZXJyID0gaXB2Nl9vbmx5X3NvY2soc2spID9cXG4xNTI2OlxcdFxcdFxcdFxcdFxcdC1FTkVUVU5SRUFDSCA6IHVkcF9zZW5kbXNnKHNrLCBtc2csIGxlbik7XFxuMTUyNzpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lID0gc2luNjtcXG4xNTI4OlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gPSBhZGRyX2xlbjtcXG4xNTI5OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMDpcXHRcXHRcXHR9XFxuMTUzMTpcXHRcXHR9XFxuMTUzMjpcXHRcXG4xNTMzOlxcdFxcdC8qIFJvdWdoIGNoZWNrIG9uIGFyaXRobWV0aWMgb3ZlcmZsb3csXFxuMTUzNDpcXHRcXHQgICBiZXR0ZXIgY2hlY2sgaXMgbWFkZSBpbiBpcDZfYXBwZW5kX2RhdGEoKS5cXG4xNTM1OlxcdFxcdCAgICovXFxuMTUzNjpcXHRcXHRpZiAobGVuIFxcdTAwM2UgSU5UX01BWCAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSlcXG4xNTM3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdGlmIChSRUFEX09OQ0UodXAtXFx1MDAzZXBlbmRpbmcpKSB7XFxuMTU0MDpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nKSA9PSBBRl9JTkVUKVxcbjE1NDE6XFx0XFx0XFx0XFx0cmV0dXJuIHVkcF9zZW5kbXNnKHNrLCBtc2csIGxlbik7XFxuMTU0MjpcXHRcXHRcXHQvKlxcbjE1NDM6XFx0XFx0XFx0ICogVGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzLlxcbjE1NDQ6XFx0XFx0XFx0ICogVGhlIHNvY2tldCBsb2NrIG11c3QgYmUgaGVsZCB3aGlsZSBpdCdzIGNvcmtlZC5cXG4xNTQ1OlxcdFxcdFxcdCAqL1xcbjE1NDY6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xNTQ3OlxcdFxcdFxcdGlmIChsaWtlbHkodXAtXFx1MDAzZXBlbmRpbmcpKSB7XFxuMTU0ODpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkodXAtXFx1MDAzZXBlbmRpbmcgIT0gQUZfSU5FVDYpKSB7XFxuMTU0OTpcXHRcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE1NTA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuMTU1MTpcXHRcXHRcXHRcXHR9XFxuMTU1MjpcXHRcXHRcXHRcXHRkc3QgPSBOVUxMO1xcbjE1NTM6XFx0XFx0XFx0XFx0Z290byBkb19hcHBlbmRfZGF0YTtcXG4xNTU0OlxcdFxcdFxcdH1cXG4xNTU1OlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTU1NjpcXHRcXHR9XFxuMTU1NzpcXHRcXHR1bGVuICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4xNTU4OlxcdFxcbjE1NTk6XFx0XFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcXG4xNTYwOlxcdFxcbjE1NjE6XFx0XFx0aWYgKHNpbjYpIHtcXG4xNTYyOlxcdFxcdFxcdGlmIChzaW42LVxcdTAwM2VzaW42X3BvcnQgPT0gMClcXG4xNTYzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1NjQ6XFx0XFxuMTU2NTpcXHRcXHRcXHRmbDYtXFx1MDAzZWZsNl9kcG9ydCA9IHNpbjYtXFx1MDAzZXNpbjZfcG9ydDtcXG4xNTY2OlxcdFxcdFxcdGRhZGRyID0gXFx1MDAyNnNpbjYtXFx1MDAzZXNpbjZfYWRkcjtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0XFx0XFx0aWYgKGluZXQ2X3Rlc3RfYml0KFNOREZMT1csIHNrKSkge1xcbjE1Njk6XFx0XFx0XFx0XFx0Zmw2LVxcdTAwM2VmbG93bGFiZWwgPSBzaW42LVxcdTAwM2VzaW42X2Zsb3dpbmZvXFx1MDAyNklQVjZfRkxPV0lORk9fTUFTSztcXG4xNTcwOlxcdFxcdFxcdFxcdGlmIChmbDYtXFx1MDAzZWZsb3dsYWJlbCBcXHUwMDI2IElQVjZfRkxPV0xBQkVMX01BU0spIHtcXG4xNTcxOlxcdFxcdFxcdFxcdFxcdGZsb3dsYWJlbCA9IGZsNl9zb2NrX2xvb2t1cChzaywgZmw2LVxcdTAwM2VmbG93bGFiZWwpO1xcbjE1NzI6XFx0XFx0XFx0XFx0XFx0aWYgKElTX0VSUihmbG93bGFiZWwpKVxcbjE1NzM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU3NDpcXHRcXHRcXHRcXHR9XFxuMTU3NTpcXHRcXHRcXHR9XFxuMTU3NjpcXHRcXG4xNTc3OlxcdFxcdFxcdC8qXFxuMTU3ODpcXHRcXHRcXHQgKiBPdGhlcndpc2UgaXQgd2lsbCBiZSBkaWZmaWN1bHQgdG8gbWFpbnRhaW5cXG4xNTc5OlxcdFxcdFxcdCAqIHNrLVxcdTAwM2Vza19kc3RfY2FjaGUuXFxuMTU4MDpcXHRcXHRcXHQgKi9cXG4xNTgxOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2XFxuMTU4MjpcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKGRhZGRyLCBcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSlcXG4xNTgzOlxcdFxcdFxcdFxcdGRhZGRyID0gXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcjtcXG4xNTg0OlxcdFxcbjE1ODU6XFx0XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSBcXHUwMDI2XFx1MDAyNlxcbjE1ODY6XFx0XFx0XFx0ICAgIHNpbjYtXFx1MDAzZXNpbjZfc2NvcGVfaWQgXFx1MDAyNlxcdTAwMjZcXG4xNTg3OlxcdFxcdFxcdCAgICBfX2lwdjZfYWRkcl9uZWVkc19zY29wZV9pZChfX2lwdjZfYWRkcl90eXBlKGRhZGRyKSkpXFxuMTU4ODpcXHRcXHRcXHRcXHRmbDYtXFx1MDAzZWZsb3dpNl9vaWYgPSBzaW42LVxcdTAwM2VzaW42X3Njb3BlX2lkO1xcbjE1ODk6XFx0XFx0fSBlbHNlIHtcXG4xNTkwOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbjE1OTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XFxuMTU5MjpcXHRcXG4xNTkzOlxcdFxcdFxcdGZsNi1cXHUwMDNlZmw2X2Rwb3J0ID0gaW5ldC1cXHUwMDNlaW5ldF9kcG9ydDtcXG4xNTk0OlxcdFxcdFxcdGRhZGRyID0gXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcjtcXG4xNTk1OlxcdFxcdFxcdGZsNi1cXHUwMDNlZmxvd2xhYmVsID0gbnAtXFx1MDAzZWZsb3dfbGFiZWw7XFxuMTU5NjpcXHRcXHRcXHRjb25uZWN0ZWQgPSB0cnVlO1xcbjE1OTc6XFx0XFx0fVxcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHRpZiAoIWZsNi1cXHUwMDNlZmxvd2k2X29pZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6NTYuMTYyMjU5MDgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODE5NTM0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJUHY2IFNvY2tldCBBbm9tYWx5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25kaXRpb246IGBzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDZgIHdpdGhpbiBgdWRwdjZfc2VuZG1zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgZXZlbiBoZXJlPyBXaGF0IGNpcmN1bXN0YW5jZXMgd291bGQgY2F1c2UgYSBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSB0byAqbm90KiBiZSBJUHY2IHdpdGhpbiBhbiBJUHY2LXNwZWNpZmljIGZ1bmN0aW9uPyBUaGF0J3MganVzdCBiaXphcnJlLiBcblxuV2FpdCBhIG1pbnV0ZSwgaXMgaXQgcG9zc2libGUgdGhlIGFkZHJlc3MgZmFtaWx5IGNoYW5nZXMgKmFmdGVyKiB0aGUgc29ja2V0IGlzIGNyZWF0ZWQ/IFBlcmhhcHMgYSBjb25uZWN0ZWQgQUZfSU5FVCBzb2NrZXQgaXMgc29tZWhvdyBiZWluZyBwYXNzZWQgdG8gYHVkcHY2X3NlbmRtc2dgPyBPciBtYXliZSBpdCdzIGJlZW4gZGlzY29ubmVjdGVkPyBXaGF0IGlmIGFuIEFGX0lORVQgc29ja2V0IGlzIG1pc3Rha2VubHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBPciBjb3VsZCB0aGVyZSBiZSBzb21lIGtpbmQgb2YgYWRkcmVzcyBmYW1pbHkgY29udmVyc2lvbiBoYXBwZW5pbmcsIGxpa2UgYW4gQUZfSU5FVDYgc29ja2V0IGJlaW5nIGRvd25ncmFkZWQgc29tZWhvdz8gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBhIHJlYWxseSBzdWJ0bGUgYnVnLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gTGV0IG1lIGNoZWNrIGBpbmV0X3NlbmRtc2dgLCBgaW5ldDZfc2VuZG1zZ2AsIGFuZCBgdWRwX3NlbmRtc2dgIHRvIHNlZSBob3cgdGhlIHNvY2tldCdzIGZhbWlseSBpcyBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgcnVuIGEgcXVpY2sgYGdpdCBncmVwYCB3aXRoaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgc2tfZmFtaWx5ICE9IEFGX0lORVQ2YCBvciBzaW1pbGFyIGNoZWNrcy4gSG9wZWZ1bGx5LCBJIGNhbiBzZWUgaG93IHRoaXMgY2hlY2sgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MTowMC41NDQyMTg4MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzQ5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2ZhbWlseSAhPSBBRl9JTkVUNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTE2MTU9aW50IHNrX3JldXNlcG9ydF9hdHRhY2hfYnBmKHUzMiB1ZmQsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE2MzktXFx0XFx0ICAgIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjQwOlxcdFxcdCAgICAgc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xNjQxLVxcdFxcdFxcdGVyciA9IC1FTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU3NTA9c3RhdGljIGludCBzb2xfaXB2Nl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01NzUzLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo1NzU0OlxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03ODQwPUJQRl9DQUxMXzUoYnBmX3RjcF9jaGVja19zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3ODgxOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc4ODItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03OTEzPUJQRl9DQUxMXzUoYnBmX3RjcF9nZW5fc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6Nzk1MTpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNilcXG5uZXQvY29yZS9maWx0ZXIuYy03OTUyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTItXFx0ICovXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU1MzpcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU1NC1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE0NTk9aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xNzE4LVxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjYvdWRwLmM6MTcxOTpcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcXG5uZXQvaXB2Ni91ZHAuYy0xNzIwLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYz0xMjQwPXN0YXRpYyBpbnQga2NtX2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpjc29jayxcXG4tLVxcbm5ldC9rY20va2Ntc29jay5jLTEyNjItXFx0LyogT25seSBhbGxvdyBUQ1Agc29ja2V0cyB0byBiZSBhdHRhY2hlZCBmb3Igbm93ICovXFxubmV0L2tjbS9rY21zb2NrLmM6MTI2MzpcXHRpZiAoKGNzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgY3NrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpIHx8XFxubmV0L2tjbS9rY21zb2NrLmMtMTI2NC1cXHQgICAgY3NrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkge1xcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYz0xMTI5PWludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2Ny1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmM6MTE2ODpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikge1xcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2OS1cXHRcXHRcXHRyZXRfdmFsID0gLUVBRk5PU1VQUE9SVDtcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYz0xOT1zc2l6ZV90IGRvX3VkcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2tldCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jLTI1LVxcdFxcdGlmIChzYS1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxubmV0L3J4cnBjL291dHB1dC5jOjI2OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxubmV0L3J4cnBjL291dHB1dC5jLTI3LVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIkFGX0lORVQ2IGFkZHJlc3Mgb24gQUZfSU5FVCBzb2NrZXRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MTowMC42MDg1NzQwNDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MTk0MzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmdW5jdGlvbiBhbmQgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgaGFwcGVuaW5nIGF0IGxpbmUgNTUyLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBwcm9iYWJseSBpbiB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZSwgbmVhciB0aGF0IGxpbmUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvZiB0aGUgSVB2NiBzb2NrZXQgb3B0aW9ucyBiZWluZyBzZXQsIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBhbmQgaG93IHRob3NlIHNldHRpbmdzIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSB2YXJpb3VzIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBjb3VsZCBiZSBpbnZvbHZlZCwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlbSBhdCB0aGlzIGxldmVsLiBHb3R0YSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNvY2tldCBvcHRpb25zIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIFRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MTowMy41ODA1MTk4OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdFxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXFxuIDU0MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcXG4gNTQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1NDU6XFx0XFx0fVxcbiA1NDY6XFx0XFx0fVxcbiA1NDc6XFx0XFxuIDU0ODpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdC8qIEFub3RoZXIgdGhyZWFkIGhhcyBjb252ZXJ0ZWQgdGhlIHNvY2tldCBpbnRvIElQdjQgd2l0aFxcbiA1NTE6XFx0XFx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXFxuIDU1MjpcXHRcXHQgKi9cXG4gNTUzOlxcdFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlcXG4gNTU0OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA1NTU6XFx0XFxuIDU1NjpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxcbiA1NTk6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA1NjA6XFx0XFx0XFx0XFx0Z290byBlX2ludmFsO1xcbiA1NjE6XFx0XFx0XFx0aWYgKHZhbCA9PSBQRl9JTkVUKSB7XFxuIDU2MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19SQVcpXFxuIDU2MzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTY0OlxcdFxcbiA1NjU6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xcbiA1NjY6XFx0XFx0XFx0XFx0XFx0aWYgKHVkcF9zayhzayktXFx1MDAzZXBlbmRpbmcgPT0gQUZfSU5FVDYpIHtcXG4gNTY3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHYgPSAtRUJVU1k7XFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDE6MDMuNTgwNjE2OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkxMjg3NjU2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgU29ja2V0IFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYHVkcHY2X3NlbmRtc2dgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3MgY2xpY2tlZC4gSXQgbG9va3MgbGlrZSBgSVBWNl9BRERSRk9STWAgbWlnaHQgYmUgYWJsZSB0byBjb25jdXJyZW50bHkgY2hhbmdlIGEgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHksIHNwZWNpZmljYWxseSBmcm9tIElQdjYgdG8gSVB2NC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuXG5cbkkgc2VlIHRoYXQgYmVmb3JlIHRoZSBgbG9ja19zb2NrKHNrKWAgY2FsbCwgaXQncyBwb3NzaWJsZSB0byB1c2UgYHNldHNvY2tvcHQoSVBWNl9BRERSRk9STSlgIHRvIHN3aXRjaCB0aGUgc29ja2V0IGZyb20gQUZfSU5FVDYgdG8gQUZfSU5FVC4gVGhlbiwgYHVkcHY2X3NlbmRtc2dgIGxvY2tzIHRoZSBzb2NrZXQsIHNldHMgYFdSSVRFX09OQ0UodXAtXHUwMDNlcGVuZGluZywgQUZfSU5FVDYpO2AsIGFuZCBnb2VzIG9uIHRvIGNhbGwgYGlwNl9hcHBlbmRfZGF0YSguLi4pYCBhbmQgdGhlIHJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGhhcHBlbnMgKmFmdGVyKiB0aGUgc29ja2V0IGlzIGxvY2tlZCBpZiB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgbm8gbG9uZ2VyIEFGX0lORVQ2PyBUaGF04oCZcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBtaWdodCBiZS5cblxuVGhlIHBhdGNoIHByb3ZpZGVzIHNvbWUgbmV3IGNvZGUgdGhhdCBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBpc3N1ZS4gSXQgY2hlY2tzIGlmIGBzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDZgICphZnRlciogYGxvY2tfc29jayhzaylgLiBJZiBpdCdzIG5vdCBJUHY2LCBpdCByZWxlYXNlcyB0aGUgc29ja2V0LCByZXR1cm5zIGAtRUFGTk9TVVBQT1JUYCwgYW5kIGdvZXMgdG8gYG91dGAuIFNlZW1zIGxpa2UgaXQncyB0cnlpbmcgdG8gbWl0aWdhdGUgdGhpcyBleGFjdCByYWNlIGNvbmRpdGlvbiwgd2hpY2ggaXMgZ29vZC5cblxuTm93LCBJIG5lZWQgdG8gdHJhY2Ugd2hhdCBoYXBwZW5zIHdoZW4gd2UgYGdvdG8gb3V0O2AgaW4gYHVkcHY2X3NlbmRtc2dgLiBLbm93aW5nIHRoZSBcIm91dFwiIHBhdGggd2lsbCB0ZWxsIG1lIGlmIHRoZSBzb2NrZXQgaXMgcHJvcGVybHkgY2xlYW5lZCB1cCBvciB3aGV0aGVyIGFuIGluY29tcGxldGUgc3RhdGUgaXMgbGVmdCBiZWhpbmQuIFRoaXMgd2lsbCBkaWN0YXRlIGlmIHRoZSBmaXggaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjQxOjMyLjcwOTM4NTIxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc1MDpcXHRcXHRcXHRlcnIgPSBpbmV0Nl90ZXN0X2JpdChSRUNWRVJSNiwgc2spID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7XFxuMTc1MTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3NTI6XFx0XFxuMTc1MzpcXHRvdXQ6XFxuMTc1NDpcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcbjE3NTU6XFx0b3V0X25vX2RzdDpcXG4xNzU2OlxcdFxcdGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTtcXG4xNzU3OlxcdFxcdHR4b3B0X3B1dChvcHRfdG9fZnJlZSk7XFxuMTc1ODpcXHRcXHRpZiAoIWVycilcXG4xNzU5OlxcdFxcdFxcdHJldHVybiBsZW47XFxuMTc2MDpcXHRcXHQvKlxcbjE3NjE6XFx0XFx0ICogRU5PQlVGUyA9IG5vIGtlcm5lbCBtZW0sIFNPQ0tfTk9TUEFDRSA9IG5vIHNuZGJ1ZiBzcGFjZS4gIFJlcG9ydGluZ1xcbjE3NjI6XFx0XFx0ICogRU5PQlVGUyBtaWdodCBub3QgYmUgZ29vZCAoaXQncyBub3QgdHVuYWJsZSBwZXIgc2UpLCBidXQgb3RoZXJ3aXNlXFxuMTc2MzpcXHRcXHQgKiB3ZSBkb24ndCBoYXZlIGEgZ29vZCBzdGF0aXN0aWMgKElwT3V0RGlzY2FyZHMgYnV0IGl0IGNhbiBiZSB0b28gbWFueVxcbjE3NjQ6XFx0XFx0ICogdGhpbmdzKS4gIFdlIGNvdWxkIGFkZCBhbm90aGVyIG5ldyBzdGF0IGJ1dCBhdCBsZWFzdCBmb3Igbm93IHRoYXRcXG4xNzY1OlxcdFxcdCAqIHNlZW1zIGxpa2Ugb3ZlcmtpbGwuXFxuMTc2NjpcXHRcXHQgKi9cXG4xNzY3OlxcdFxcdGlmIChlcnIgPT0gLUVOT0JVRlMgfHwgdGVzdF9iaXQoU09DS19OT1NQQUNFLCBcXHUwMDI2c2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpKVxcbjE3Njg6XFx0XFx0XFx0VURQNl9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBVRFBfTUlCX1NOREJVRkVSUk9SUyk7XFxuMTc2OTpcXHRcXG4xNzcwOlxcdFxcdHJldHVybiBlcnI7XFxuMTc3MTpcXHRcXG4xNzcyOlxcdGRvX2NvbmZpcm06XFxuMTc3MzpcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfUFJPQkUpXFxuMTc3NDpcXHRcXHRcXHRkc3RfY29uZmlybV9uZWlnaChkc3QsIFxcdTAwMjZmbDYtXFx1MDAzZWRhZGRyKTtcXG4xNzc1OlxcdFxcdGlmICghKG1zZy1cXHUwMDNlbXNnX2ZsYWdzXFx1MDAyNk1TR19QUk9CRSkgfHwgbGVuKVxcbjE3NzY6XFx0XFx0XFx0Z290byBiYWNrX2Zyb21fY29uZmlybTtcXG4xNzc3OlxcdFxcdGVyciA9IDA7XFxuMTc3ODpcXHRcXHRnb3RvIG91dDtcXG4xNzc5OlxcdH1cXG4xNzgwOlxcdEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZyk7XFxuMTc4MTpcXHRcXG4xNzgyOlxcdHN0YXRpYyB2b2lkIHVkcHY2X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4xNzgzOlxcdHtcXG4xNzg0OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbjE3ODU6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuMTc4NjpcXHRcXG4xNzg3OlxcdFxcdGlmICghUkVBRF9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nKSB8fCB1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxcbjE3ODg6XFx0XFx0XFx0cmV0dXJuO1xcbjE3ODk6XFx0XFxuMTc5MDpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjE3OTE6XFx0XFx0aWYgKHVwLVxcdTAwM2VwZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICF1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxcbjE3OTI6XFx0XFx0XFx0dWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMoc2spO1xcbjE3OTM6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xNzk0OlxcdH1cXG4xNzk1OlxcdFxcbjE3OTY6XFx0c3RhdGljIHZvaWQgdWRwdjZfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4xNzk3OlxcdHtcXG4xNzk4OlxcdFxcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xcbjE3OTk6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDE6MzIuNzA5NTQzNDAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5Mzc5NjQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdDogS0FTQU4gdnMuIEtNU0FOKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24ndCwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmc6IGl0J3MgYWRkaW5nIGEgZGVmZW5zaXZlIGNoZWNrIHdpdGhpbiBgdWRwdjZfc2VuZG1zZygpYCAqYWZ0ZXIqIGBsb2NrX3NvY2soc2spYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgYHNrLVx1MDAzZXNrX2ZhbWlseWAgaXMgYEFGX0lORVQ2YCwgYW5kIGlmIG5vdCwgcmVsZWFzZXMgdGhlIHNvY2tldCBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEFuZCBiZWZvcmUgSSBnZXQgYW55IGZ1cnRoZXIsIHRoZSBjbGVhbnVwIGlzIGdvaW5nIHRvIHJldHVybiBgLUVBRk5PU1VQUE9SVGAgd2hpY2ggd2lsbCBjYWxsIHRoZXNlIGltcG9ydGFudCBjbGVhbnVwIGFjdGlvbnM6IGBkc3RfcmVsZWFzZShkc3QpYCwgYGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKWAsIGFuZCBgdHhvcHRfcHV0KG9wdF90b19mcmVlKWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHRoYXQgS01TQU4gaXMgdW5pcXVlbHkgcG9zaXRpb25lZCB0byBjYXRjaCwgYmV5b25kIHdoYXQgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBmaW5kPyBMZXQgbWUgZ28gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyoqIE5vcGUuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCB0b3VjaCBhbnkgZGF0YSB0aGF0IGlzIHBhc3NlZCBiYWNrIHRvIHVzZXItc3BhY2UgdmlhIG1ldGhvZHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBTS0IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMgb3IgQlBGIGJ1ZmZlcnMuIEl0J3MgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIHByb2Nlc3NpbmcuXG5cbjIuICAqKkRvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC4gYHNrLVx1MDAzZXNrX2ZhbWlseWAgaXMgcGFydCBvZiB0aGUgYHN0cnVjdCBzb2NrYCBzdHJ1Y3R1cmUsIGFuZCBpdCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSBzb2NrZXQgaXMgY3JlYXRlZC4gVGhhdCBmaWVsZCBpcyBub3QgdGhlIHNvdXJjZSBvZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhLCBpbiB0aGlzIGNvZGUgcGF0aC5cblxuMy4gICoqRG9lcyBpdCBjcmVhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8qKiBObywgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBjb21wbGljYXRlZCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBkb3duIHRoZSBsaW5lLlxuXG40LiAgKipEb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLCBpdCBkb2Vzbid0IHRvdWNoIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgb2YgYnVmZmVycy5cblxuVGhlIGJ1ZyB0aGlzIHBhdGNoIGZpeGVzIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudDogaXQgcHJldmVudHMgYHVkcHY2X3NlbmRtc2dgIGZyb20gcHJvY2VlZGluZyB3aXRoIElQdjYtc3BlY2lmaWMgb3BlcmF0aW9ucyBpZiB0aGUgc29ja2V0J3MgZmFtaWx5IGhhcyBiZWVuIGNvbmN1cnJlbnRseSBjaGFuZ2VkIHRvIGBBRl9JTkVUYCB2aWEgYElQVjZfQUREUkZPUk1gLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgcG90ZW50aWFsbHkgaGF2ZSBhIHR5cGUgY29uZnVzaW9uL3N0YXRlIG1pc21hdGNoL3VzZS1hZnRlci1mcmVlL2JhZCBjYXN0IGJldHdlZW4gYEFGX0lORVRgIGFuZCBgQUZfSU5FVDZgLiBUaG9zZSBraW5kcyBvZiBtZW1vcnkgYWNjZXNzIGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgc2FuaXRpemVycy5cblxuVGhpcyBwYXRjaCwgaW4gb3RoZXIgd29yZHMsIGRvZXNuJ3QgKmV4cG9zZSogb3IgKmludHJvZHVjZSogYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkLCBjcmVhdGVkLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gSXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBpc3N1ZSB0aGF0IGlzIGFscmVhZHkgbGlrZWx5IGRldGVjdGFibGUgYnkgc3RhbmRhcmQgdG9vbHMuIFRoZXJlZm9yZSwgdGhlIGNvbmNsdXNpb24gaGVyZSBpcyBwcmV0dHkgY2xlYXIuXG5cbkdpdmVuIHRoZSBjcml0ZXJpYSB0aGF0IEkgaGF2ZSwgYW5kIHdpdGggdGhlIFwiQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU5cIiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQsIHRoZSBydWxlIEkgbmVlZCB0byB0aGluayBhYm91dCBpcyBcIlRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sIExPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXCIgR2l2ZW4gdGhlIHBhdGNoIGFuZCBteSBhbmFseXNpcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgdGhhdCB3b3VsZCBiZSBmbGFnZ2VkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGF0IHJpc2ssIHNvIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDAsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDE6NDAuNjQ3NTEwMDE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgdWRwdjZfc2VuZG1zZ2AgdW5kZXIgYGxvY2tfc29jayhzaylgIHRvIGVuc3VyZSBgc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cXG5cXG5UaGUgY2hlY2sgcmVhZHMgdGhlIHdlbGwtaW5pdGlhbGl6ZWQgYHNrLVxcdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDZgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBhbm90aGVyIHRocmVhZCBjb252ZXJ0cyB0aGUgc29ja2V0IHRvIGBBRl9JTkVUYCB2aWEgYElQVjZfQUREUkZPUk1gIHNldHNvY2tvcHQsIGF2b2lkaW5nIHN1YnNlcXVlbnQgcHJvdG9jb2wgbWlzbWF0Y2ggYW5kIHR5cGUgY29uZnVzaW9uIC8gY29ycnVwdGlvbiBpc3N1ZXMgaW4gYGlwNl9hcHBlbmRfZGF0YWAuXFxuXFxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cXHUwMDNlc2tfZmFtaWx5YCBmaWVsZCBvZiBgc3RydWN0IHNvY2tgIGFuZCBleGl0cyBlYXJseSB3aXRoIGAtRUFGTk9TVVBQT1JUYC4gTm8gbmV3IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciB0eXBlLWNvbmZ1c2lvbiBidWdzIHJlc3VsdGluZyBmcm9tIG1pc3NpbmcgdGhpcyBjaGVjayBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 13:37:13 +0000 UTC FinishedAt: 2026-08-29 13:41:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "e4f20a7e-1bc8-4076-b731-a3d654e51906" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udpv6_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHB2Nl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cblxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTk5NTJmNjcwMDg1ZTI3OTFmN2YyOGM0NTc1YjA2YzdiOGZjMDk0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEzOjM5OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IGZkODc1OTA4YWMwYzYuLjU2NmM2MzRhNWE1OTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmNcbkBAIC0xNzE2LDYgJiM0MzsxNzE2LDExIEBAIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0fVxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRpZiAodW5saWtlbHkodXAtXHUwMDNlcGVuZGluZykpIHtcbiBcdFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXG4gXHRcdC8qIC4uLiB3aGljaCBpcyBhbiBldmlkZW50IGFwcGxpY2F0aW9uIGJ1Zy4gLS1BTksgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwdjZfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB1ZHB2Nl9zZW5kbXNnKCkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBzb2NrZXQgbG9jayB0byBlbnN1cmUgdGhlIHNvY2tldCBmYW1pbHkgaXMgc3RpbGwgQUZfSU5FVDYsIGhhbmRsaW5nIHBvdGVudGlhbCBjb25jdXJyZW50IGZhbWlseSBjaGFuZ2VzIChlLmcuIElQVjZfQUREUkZPUk0pLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIElQdjYgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5OTUyZjY3MDA4NWUyNzkxZjdmMjhjNDU3NWIwNmM3YjhmYzA5NGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzozOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggZmQ4NzU5MDhhYzBjNi4uNTY2YzYzNGE1YTU5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTE3MTYsNiAmIzQzOzE3MTYsMTEgQEAgaW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJfQogCiAJbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJaWYgKHVubGlrZWx5KHVwLSZndDtwZW5kaW5nKSkgewogCQkvKiBUaGUgc29ja2V0IGlzIGFscmVhZHkgY29ya2VkIHdoaWxlIHByZXBhcmluZyBpdC4gKi8KIAkJLyogLi4uIHdoaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnLiAtLUFOSyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJc3N1ZSBpbiBVRFB2NiBUcmFuc21pc3Npb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGdvZXMgc3RyYWlnaHQgdG8gYG5ldC9pcHY2L3VkcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgaW4gdGhpcyBjYXNlLCB3aGVyZSB0aGluZ3MgbWlnaHQgYnJlYWsuIFRoZSBjb21taXQgbW9kaWZpZXMgdGhlIGB1ZHB2Nl9zZW5kbXNnYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3Igc2VuZGluZyBVRFAgcGFja2V0cyBvdmVyIElQdjYuIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAodW5saWtlbHkoc2stJmd0O3NrX2ZhbWlseSAhPSBBRl9JTkVUNikpYC4gSG1tbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBrbm93IGBzay0mZ3Q7c2tfZmFtaWx5YCByZXByZXNlbnRzIHRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgc29ja2V0IGFuZCBgQUZfSU5FVDZgIGlzIElQdjYuIFRoZSBjaGVjayBzZWVtcyB0byBiZSBzYXlpbmcsICYjMzQ7aWYgdGhlIHNvY2tldCBpc24mIzM5O3QgSVB2NiwgcmVqZWN0IHRoZSBzZW5kLiYjMzQ7CgpOb3csIHRoaXMgZmVlbHMgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBXaHkgaXMgdGhpcyBjaGVjayAqbm93KiBiZWluZyBpbnRyb2R1Y2VkPyBJcyB0aGlzIGFkZHJlc3NpbmcgYSBrbm93biB2dWxuZXJhYmlsaXR5IG9yIGJ1Zz8gT3IgcGVyaGFwcyBhIG5ldyBmZWF0dXJlIG9yIG9wdGltaXphdGlvbiBpcyBlbmFibGVkPyBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnM6IElmIHRoaXMgKndhc24mIzM5O3QqIGNoZWNrZWQgYmVmb3JlLCB3aGF0IHdhcyB0aGUgYmVoYXZpb3IgaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcz8gV2FzIHRoZXJlIGEgc3VidGxlIGJ1ZyBiZWluZyBleHBsb2l0ZWQsIG9yIGFuIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3Q/CgpUbyB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY2L3VkcC5jYCB0byBzZWUgd2hlcmUgdGhpcyBjaGVjayBpcyBwbGFjZWQgd2l0aGluIHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkLiBUaGlzIGNvdWxkIHVuY292ZXIgYW55IHNwZWNpZmljIGVycm9yIHNjZW5hcmlvcy4gV2FzIHRoZXJlIHByaW9yIGNvZGUgd2hpY2ggdGhpcyBoYXMgcmVwbGFjZWQ/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29ja2V0IGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBkZWNpZGUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmVwZXJjdXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzAwOlx0XHRcdGdvdG8gZG9fY29uZmlybTtcbjE3MDE6XHRiYWNrX2Zyb21fY29uZmlybTpcbjE3MDI6XHRcbjE3MDM6XHRcdC8qIExvY2tsZXNzIGZhc3QgcGF0aCBmb3IgdGhlIG5vbi1jb3JraW5nIGNhc2UgKi9cbjE3MDQ6XHRcdGlmICghY29ya3JlcSkge1xuMTcwNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTcwNjpcdFxuMTcwNzpcdFx0XHRza2IgPSBpcDZfbWFrZV9za2Ioc2ssIGlwX2dlbmVyaWNfZ2V0ZnJhZywgbXNnLCB1bGVuLFxuMTcwODpcdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LFxuMTcwOTpcdFx0XHRcdFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXG4xNzEwOlx0XHRcdFx0XHQgICBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBcdTAwMjZjb3JrKTtcbjE3MTE6XHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuMTcxMjpcdFx0XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpXG4xNzEzOlx0XHRcdFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcdTAwMjZjb3JrLmJhc2UpO1xuMTcxNDpcdFx0XHQvKiBpcDZfbWFrZV9za2Igc3RlYWxzIGRzdCByZWZlcmVuY2UgKi9cbjE3MTU6XHRcdFx0Z290byBvdXRfbm9fZHN0O1xuMTcxNjpcdFx0fVxuMTcxNzpcdFxuMTcxODpcdFx0bG9ja19zb2NrKHNrKTtcbjE3MTk6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4xNzIwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzIxOlx0XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4xNzIyOlx0XHRcdGdvdG8gb3V0O1xuMTcyMzpcdFx0fVxuMTcyNDpcdFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4xNzI1Olx0XHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuMTcyNjpcdFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4xNzI3Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzI4Olx0XG4xNzI5Olx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7dWRwIGNvcmsgYXBwIGJ1ZyAyXFxuXCYjMzQ7KTtcbjE3MzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE3MzE6XHRcdFx0Z290byBvdXQ7XG4xNzMyOlx0XHR9XG4xNzMzOlx0XG4xNzM0Olx0XHRXUklURV9PTkNFKHVwLVx1MDAzZXBlbmRpbmcsIEFGX0lORVQ2KTtcbjE3MzU6XHRcbjE3MzY6XHRkb19hcHBlbmRfZGF0YTpcbjE3Mzc6XHRcdHVwLVx1MDAzZWxlbiAmIzQzOz0gdWxlbjtcbjE3Mzg6XHRcdGVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXG4xNzM5Olx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LCBmbDYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gYWRkcmVzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgaG93IHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gaXMgYmVoYXZpbmcuIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWV0aGluZyBhbWlzcyB3aXRoIElQdjQgc29ja2V0cyBiZWluZyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBwcmltYXJpbHkgZGVzaWduZWQgZm9yIElQdjYsIHdoaWNoIGlzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYSBzb2NrZXQgb3JpZ2luYWxseSBjcmVhdGVkIGFzIElQdjYgaXMgc29tZWhvdyB0cmFuc2l0aW9uaW5nIHRvIElQdjQuIGBJUFY2X0FERFJGT1JNYCBpcyBpbW1lZGlhdGVseSBzdXNwZWN0LiBQZXJoYXBzIGEgY29ubmVjdGVkIFVEUCBzb2NrZXQgaXMgaW52b2x2ZWQsIG9yIGV2ZW4gYSByYWNlIGNvbmRpdGlvbiBhcm91bmQgYHNldHNvY2tvcHRgIGFuZCBgY29ubmVjdGAgbWlnaHQgYmUgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBmYW1pbHkgc3dpdGNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYElQVjZfQUREUkZPUk1gIGFjdHVhbGx5IGZvcmNlcyBhIGZhbWlseSBzd2l0Y2ggb2YgdGhlIHNvY2tldC4gQWx0ZXJuYXRpdmVseSwgY291bGQgYSBjaGFuZ2UgdG8gYEFGX0lORVRgIGhhcHBlbiBlbHNld2hlcmU/IFRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxpbmcgYFdSSVRFX09OQ0UodXAtJmd0O3BlbmRpbmcsIEFGX0lORVQ2KTtgIHdoaWNoIHNlZW1zIG9kZC4gRnVydGhlcm1vcmUsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGlwNl9hcHBlbmRfZGF0YShzaywgLi4uKWAgYXNzdW1lcyBgaW5ldDZfc2soc2spYCBpcyB2YWxpZC4gU28gdGhpcyBtZWFucyB0aGUgY29ya2luZyBwcm9jZXNzIGFuZCBzb2NrZXQgZmFtaWx5IGhhdmUgdG8gYmUgYWxpZ25lZCwgb3IgdGhlIGNvZGUgaXMgZXhwZWN0aW5nIGEgc3dpdGNoICpkdXJpbmcqIGNvcmtpbmcsIHdoaWNoIHNlZW1zIGluaGVyZW50bHkgcmlza3kuIEkgbmVlZCB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgcG90ZW50aWFsIGZvciBkaXNjcmVwYW5jaWVzIGJldHdlZW4gdGhlIGludGVuZGVkIHNvY2tldCBmYW1pbHkgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHMsIGVzcGVjaWFsbHkgd2hlbiBjb3JraW5nIGlzIGludm9sdmVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgc3Vycm91bmRpbmcgYElQVjZfQUREUkZPUk1gIGFuZCBvdGhlciBjb2RlIHRoYXQgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIGNoYW5naW5nIHRoZSBzb2NrZXQmIzM5O3MgZmFtaWx5LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgbmV0L2lwdjYgZGlyZWN0b3J5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBWNl9BRERSRk9STSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FmX2luZXQ2LmM9NDI2PWludCBpbmV0Nl9iaW5kX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy00MzEtXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjQzMjpcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xubmV0L2lwdjYvYWZfaW5ldDYuYy00MzMtXHRwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9NTQ3PWludCBpbmV0Nl9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU2OS1cdGRlZmF1bHQ6XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjU3MDpcdFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU3MS1cdFx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTYzMT1pbnQgaW5ldDZfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjM4LVxubmV0L2lwdjYvYWZfaW5ldDYuYzo2Mzk6XHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0NT1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTQ6XHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjU1LVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTAtXHQvKiBBbm90aGVyIHRocmVhZCBoYXMgY29udmVydGVkIHRoZSBzb2NrZXQgaW50byBJUHY0IHdpdGhcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1NTE6XHQgKiBJUFY2X0FERFJGT1JNIGNvbmN1cnJlbnRseS5cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTItXHQgKi9cbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTU3LVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU1ODpcdGNhc2UgSVBWNl9BRERSRk9STTpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTktXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMDc4PWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDkwLVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTA5MTpcdGNhc2UgSVBWNl9BRERSRk9STTpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDkyLVx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGB1ZHBfc2VuZG1zZ2AgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYHVkcF9zZW5kbXNnYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHNlbmRpbmcgVURQIGRhdGFncmFtcywgc28gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3JpdGljYWwgdG8uLi4gd2VsbCwgZXZlcnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24sIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIG9idmlvdXM6IHdoYXQgYXJlIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHM/IFdoYXQmIzM5O3MgdGhlIGNvbnRyb2wgZmxvdz8gV2hhdCBsb2NraW5nIGlzIGludm9sdmVkLCBpZiBhbnk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3M/IEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc29ja2V0IG9wdGlvbnMsIGVzcGVjaWFsbHkgdGhpbmdzIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiBvciBjb25nZXN0aW9uIGNvbnRyb2wuIERvZXMgaXQgdXNlIHRoZSBnZW5lcmljIG5ldHdvcmsgc3RhY2sgZnVuY3Rpb25zIGVmZmVjdGl2ZWx5LCBvciBkb2VzIGl0IGhhdmUgY3VzdG9tIGNvZGU/IEkgYWxzbyB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyczsgYXJlIHRoZXJlIGFueSBkcml2ZXItc3BlY2lmaWMgcXVpcmtzIHRoYXQgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHJlbGlhYmlsaXR5PyBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja19zb2NrXFwoc2tcXCk7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmM9MTIzNT1pbnQgdWRwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvdWRwLmMtMTI3MC1cdFx0ICovXG5uZXQvaXB2NC91ZHAuYzoxMjcxOlx0XHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMTI3Mi1cdFx0aWYgKGxpa2VseSh1cC1cdTAwM2VwZW5kaW5nKSkge1xuLS1cbm5ldC9pcHY0L3VkcC5jLTE0NDgtXG5uZXQvaXB2NC91ZHAuYzoxNDQ5Olx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3VkcC5jLTE0NTAtXHRpZiAodW5saWtlbHkodXAtXHUwMDNlcGVuZGluZykpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYz0xNTExPXZvaWQgdWRwX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvaXB2NC91ZHAuYy0xNTE4LVxubmV0L2lwdjQvdWRwLmM6MTUxOTpcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0xNTIwLVx0aWYgKHVwLVx1MDAzZXBlbmRpbmcgXHUwMDI2XHUwMDI2ICF1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxuLS1cbm5ldC9pcHY0L3VkcC5jPTIxNDg9c3RhdGljIGludCB1ZHBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvaXB2NC91ZHAuYy0yMTUyLVxubmV0L2lwdjQvdWRwLmM6MjE1MzpcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0yMTU0LVx0cmVzID0gX19pcDRfZGF0YWdyYW1fY29ubmVjdChzaywgdWFkZHIsIGFkZHJfbGVuKTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yMTg5PWludCB1ZHBfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC9pcHY0L3VkcC5jLTIxOTAte1xubmV0L2lwdjQvdWRwLmM6MjE5MTpcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0yMTkyLVx0X191ZHBfZGlzY29ubmVjdChzaywgZmxhZ3MpO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTI4OTA9aW50IHVkcF9saWJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdWRwLmMtMjkwMS1cdFx0aWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGIHx8IG9wdG5hbWUgPT0gU09fUkNWQlVGRk9SQ0UpIHtcbm5ldC9pcHY0L3VkcC5jOjI5MDI6XHRcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMjkwMy1cdFx0XHQvKiBwYWlyZWQgd2l0aCBSRUFEX09OQ0UgaW4gdWRwX3JtZW1fcmVsZWFzZSgpICovXG4tLVxubmV0L2lwdjQvdWRwLmMtMjkyMy1cdFx0XHR1ZHBfY2xlYXJfYml0KENPUkssIHNrKTtcbm5ldC9pcHY0L3VkcC5jOjI5MjQ6XHRcdFx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3VkcC5jLTI5MjUtXHRcdFx0cHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7XG4tLVxubmV0L2lwdjQvdWRwLmMtMjkzMC1cdGNhc2UgVURQX0VOQ0FQOlxubmV0L2lwdjQvdWRwLmM6MjkzMTpcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMjkzMi1cdFx0c3dpdGNoICh2YWwpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0yOTcyLVx0Y2FzZSBVRFBfR1JPOlxubmV0L2lwdjQvdWRwLmM6Mjk3MzpcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMjk3NC1cdFx0Lyogd2hlbiBlbmFibGluZyBHUk8sIGFjY2VwdCB0aGUgcmVsYXRlZCBHU08gcGFja2V0IHR5cGUgKi9cbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTEwPWludCB1ZHBfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTMxMTItXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbm5ldC9pcHY0L3VkcC5jOjMxMTM6XHRcdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC91ZHAuYy0zMTE0LVxuLS1cbm5ldC9pcHY0L3VkcC5jPTM1MTU9c3RhdGljIGludCBicGZfaXRlcl91ZHBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjQvdWRwLmMtMzUyNi1cbm5ldC9pcHY0L3VkcC5jOjM1Mjc6XHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdWRwLmMtMzUyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgYHVkcHY2X3NlbmRtc2dgOiBBIFF1aWNrIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGB1ZHB2Nl9zZW5kbXNnYC4gSXQmIzM5O3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIElQdjYgVURQJiMzOTtzIHNlbmRtc2cgZnVuY3Rpb25hbGl0eS4gTXkgZ3V0IHNheXMgaXQmIzM5O3Mgd29ydGggYSBjbG9zZXIgaW5zcGVjdGlvbiwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBGaXJzdCwgaXMgaXQganVzdCBkZWNvcmF0aXZlIGNvZGUsIG9yIGRvZXMgaXQgYWN0dWFsbHkgKmRvKiBzb21ldGhpbmc/IFdlbGwsIHRoYXQgYGlmICh1bmxpa2VseShzay0mZ3Q7c2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlgIGNoZWNrIGluZGljYXRlcyBmdW5jdGlvbmFsIGxvZ2ljIHdpdGggYW4gYC1FQUZOT1NVUFBPUlRgIGVycm9yIHJldHVybi4gU28sIG5vLCBpdCYjMzk7cyBub3QganVzdCBmbHVmZi4gR29vZC4gTmV4dCwgaXMgdGhpcyBjb2RlIGV2ZW4gaGl0IGluIHR5cGljYWwgZGVwbG95bWVudHM/IElQdjYgVURQIGlzIGV2ZXJ5d2hlcmUsIGFuZCB0aGlzIGlzIHdoZXJlIHRoYXQgc2VuZG1zZyBvcGVyYXRpb24gbGl2ZXMsIHNvIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmluYWxseSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gWWVzISBDb3JlIG5ldHdvcmsgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBpdCBoYW5kbGVzIElQdjYsIGlzIGFic29sdXRlbHkgYSBwcmltZSB0YXJnZXQuIEFueSBzdWJ0bGUgYnVnIGNhbiBoYXZlIGZhci1yZWFjaGluZyBlZmZlY3RzLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgZm9yIGBuZXQvaXB2Ni91ZHAuY2AgYW5kIHNwZWNpZmljYWxseSBgdWRwdjZfc2VuZG1zZ2AuIFRpbWUgdG8gcG9rZSBhcm91bmQgaW4gYG5ldC9pcHY2L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxubmV0L2lwdjYvTWFrZWZpbGU6MTA6XHRcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cdFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaXB2Ni15YCB0aGluZyBpcyBnZXR0aW5nIGNvbXBpbGVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIEl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCBwcm9jZWR1cmU7IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIElQdjYgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbCBpcyBnb2luZyB0byBiZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBvYmplY3QgZmlsZSBsaXN0cywgYW5kIGhvcGVmdWxseSBzb21lIGNsZXZlciB1c2Ugb2YgbWFrZSB2YXJpYWJsZXMuIEhvcGVmdWxseSBpdCB3aWxsIGJlIGVhc2lseSByZWFkYWJsZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBJUHY2IHN1YnN5c3RlbSwgc28gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBsZXZlbCBvZiBjb21wbGV4aXR5LCBidXQgbm90aGluZyBJIGNhbiYjMzk7dCBoYW5kbGUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgaW5zaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUNikgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG4gICA3Olx0XG4gICA4Olx0aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxuICAgOTpcdFx0XHRhZGRybGFiZWwubyBcXFxuICAxMDpcdFx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxuICAxMTpcdFx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiAgMTI6XHRcdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4gIDEzOlx0XHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4gIDE0Olx0XG4gIDE1Olx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xuICAxNjpcdGlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG4gIDE3Olx0XG4gIDE4Olx0aXB2Ni0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXG4gIDE5Olx0XHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXG4gIDIwOlx0aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuICAyMTpcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWI2X3J1bGVzLm9cbiAgMjI6XHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMjM6XHRpcHY2LSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDI0Olx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xuICAyNTpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xuICAyNjpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuICAyNzpcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuICAyODpcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgJiM0Mzs9IGlvYW02X2lwdHVubmVsLm9cbiAgMjk6XHRcbiAgMzA6XHRvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xuICAzMTpcdG9iai0kKENPTkZJR19JTkVUNl9FU1ApICYjNDM7PSBlc3A2Lm9cbiAgMzI6XHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuICAzMzpcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICYjNDM7PSBpcGNvbXA2Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwpICYjNDM7PSB4ZnJtNl90dW5uZWwub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICYjNDM7PSB0dW5uZWw2Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSAmIzQzOz0gbWlwNi5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xuICAzODpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAzOTpcdFxuICA0MDpcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzUxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYENPTkZJR19JUFY2YC4gV2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQ/IE15IGluaXRpYWwgaHVuY2ggaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBuZXR3b3JraW5nIG9uZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBuZXQvaXB2Ni9LY29uZmlnYCBkaXJlY3RseSwgb3IgbWF5YmUgZXZlbiB0aGUgbW9yZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AgZmlsZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZlYXR1cmVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgYENPTkZJR19JUFY2YC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNlxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBJUHY2IGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbCBsaW5lcywgYXBwcm94aW1hdGVseSB0aGUgZmlyc3QgdHdlbnR5IG9yIHNvLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUsIHRvcC1sZXZlbCBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBvdmVyYWxsIGVuYWJsZS9kaXNhYmxlIHN3aXRjaCBmb3IgSVB2NiwgcHJvYmFibHkgc29tZSBrZXkgZGVmYXVsdCBiZWhhdmlvcnMsIG1heWJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JrIG9yIHBsYXRmb3JtIGZlYXR1cmVzLi4uIEl04oCZcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gdHJlZSwgc28gYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgb2ZmZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBJUHY2IGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUFY2XG4gICA3Olx0XHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU3VwcG9ydCBmb3IgSVAgdmVyc2lvbiA2IChJUHY2KS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgSVB2Niwgc2VlXG4gIDE0Olx0XHQgIFx1MDAzY2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjZcdTAwM2UuXG4gIDE1Olx0XHQgIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBJUHY2IHVuZGVyIExpbnV4LCBzZWVcbiAgMTY6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYucnN0IGFuZCByZWFkIHRoZSBIT1dUTyBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9IT1dUTy9MaW51eCYjNDM7SVB2Ni1IT1dUTy9cdTAwM2VcbiAgMTg6XHRcbiAgMTk6XHRpZiBJUFY2XG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiAgMjI6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFJvdXRlciBQcmVmZXJlbmNlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byB0aGUgUm91dGVyXG4gIDI1Olx0XHQgIEFkdmVydGlzZW1lbnQgbWVzc2FnZSB3aGljaCBpbXByb3ZlcyB0aGUgYWJpbGl0eSBvZiBob3N0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBJUHY2IFVEUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gYW5kIEkgc2VlIGBtZW51Y29uZmlnIElQVjZgIGhhcyBhIGJvb2xlYW4gZW50cnksICYjMzQ7VGhlIElQdjYgcHJvdG9jb2wmIzM0Oy4gU3RhbmRhcmQgc3R1ZmYuIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFB2NiBzZW5kIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGVyZSBnaXZlcyBtZSBjb25maWRlbmNlIHRvIGxvb2sgZm9yIHRoZSByZWxldmFudCBjb2RlLCBzbyBJJiMzOTtsbCBkcmlsbCBkb3duIHRvIGBuZXQvaXB2Ni91ZHAuY2AuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgdGhlIGxvdy1kb3duIG9uIGB1ZHB2Nl9zZW5kbXNnYC4gSSBuZWVkIHRvIHNlZSB0aGUgZGVjbGFyYXRpb24gYW5kLCBpbXBvcnRhbnRseSwgd2hhdCB0aGUgc3ltYm9sIG5hbWUgaXMuIFRoaXMgaXMgYWxsIGFib3V0IGNvbmZpcm1pbmcgdGhlIGNvZGUmIzM5O3MgdGhlcmUsIHVuZGVyc3RhbmRpbmcgaG93IGl0JiMzOTtzIGVuYWJsZWQgdmlhIHRoZSBjb25maWcsIGFuZCBnZXR0aW5nIHJlYWR5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZl9pbmV0Ni5jPTYzMT1pbnQgaW5ldDZfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjQxOlx0cmV0dXJuIElORElSRUNUX0NBTExfMihwcm90LVx1MDAzZXNlbmRtc2csIHRjcF9zZW5kbXNnLCB1ZHB2Nl9zZW5kbXNnLFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NDItXHRcdFx0ICAgICAgIHNrLCBtc2csIHNpemUpO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTYxNy1cdFx0XHQgKiBidXQgdGhlcmUgaXMgc3RpbGwgYSByYWNlLiAgU2VlIHRoZSBsb2NrbGVzcyBwYXRoXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjE4Olx0XHRcdCAqIGluIHVkcHY2X3NlbmRtc2coKSBhbmQgaXB2Nl9sb2NhbF9yeHBtdHUoKS5cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTktXHRcdFx0ICovXG4tLVxubmV0L2lwdjYvdWRwLmM9MTM1Nj1zdGF0aWMgaW50IHVkcF92Nl9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXG4tLVxubmV0L2lwdjYvdWRwLmMtMTM3My1cdHVoLVx1MDAzZWRlc3QgPSBmbDYtXHUwMDNlZmw2X2Rwb3J0O1xubmV0L2lwdjYvdWRwLmM6MTM3NDpcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcHY2X3NlbmRtc2cuICovXG5uZXQvaXB2Ni91ZHAuYy0xMzc1LVx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XG4tLVxubmV0L2lwdjYvdWRwLmM9MTQzOD1zdGF0aWMgaW50IHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xNDU4LVxubmV0L2lwdjYvdWRwLmM6MTQ1OTppbnQgdWRwdjZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9pcHY2L3VkcC5jLTE0NjAte1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE3NzktfVxubmV0L2lwdjYvdWRwLmM6MTc4MDpFWFBPUlRfU1lNQk9MKHVkcHY2X3NlbmRtc2cpO1xubmV0L2lwdjYvdWRwLmMtMTc4MS1cbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTAwPXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE5MTEtXHQuZ2V0c29ja29wdFx0XHQ9IHVkcHY2X2dldHNvY2tvcHQsXG5uZXQvaXB2Ni91ZHAuYzoxOTEyOlx0LnNlbmRtc2dcdFx0PSB1ZHB2Nl9zZW5kbXNnLFxubmV0L2lwdjYvdWRwLmMtMTkxMy1cdC5yZWN2bXNnXHRcdD0gdWRwdjZfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzNQoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAzODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFB2NiBTZW5kIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBkaWZmIG9ubHkgdG91Y2hlcyBgdWRwdjZfc2VuZG1zZ2AgaW4gYG5ldC9pcHY2L3VkcC5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBzaWduaWZpY2FudGx5LiBJJiMzOTttIG5vdyB2ZXJpZnlpbmcgdGhhdCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgdGhpcyBpcyB0aGUgb25seSByZWxldmFudCBvbmUuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgYHVkcHY2X3NlbmRtc2dgIGEgc3RhdGljIGZ1bmN0aW9uPyBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzaW5jZSBpdCYjMzk7cyBleHBvcnRlZCB2aWEgYEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZylgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgZmlsZS4KCk5vdywgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0JiMzOTtzIGEgaG90IHBhdGguIFNpbmNlIGl0JiMzOTtzIGFuIEFQSSBlbnRyeXBvaW50IChgc2VuZG1zZ2ApLCBJIGRvbiYjMzk7dCBiZWxpZXZlIHRoaXMgdG8gYmUgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBUaGlzIGlzIHZhbHVhYmxlIGNvbnRleHQgZm9yIGFueSBmdXp6aW5nIGVmZm9ydHMuCgpGaW5hbGx5LCBJIG5vdGUgdGhlIGBJUFY2YCBjb25maWd1cmF0aW9uIG9wdGlvbi4gT2J2aW91c2x5IHJlbGV2YW50IGdpdmVuIHRoZSBmaWxlIHBhdGguIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhY2NvdW50ZWQgZm9yLgoKSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdWRwdjZfc2VuZG1zZygpIGFmdGVyIGFjcXVpcmluZyB0aGUgc29ja2V0IGxvY2sgdG8gZW5zdXJlIHRoZSBzb2NrZXQgZmFtaWx5IGlzIHN0aWxsIEFGX0lORVQ2LCBoYW5kbGluZyBwb3RlbnRpYWwgY29uY3VycmVudCBmYW1pbHkgY2hhbmdlcyAoZS5nLiBJUFY2X0FERFJGT1JNKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBJUHY2IG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHB2Nl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cblxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5OTUyZjY3MDA4NWUyNzkxZjdmMjhjNDU3NWIwNmM3YjhmYzA5NGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzozOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggZmQ4NzU5MDhhYzBjNi4uNTY2YzYzNGE1YTU5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTE3MTYsNiAmIzQzOzE3MTYsMTEgQEAgaW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJfQogCiAJbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJZXJyID0gLUVBRk5PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJaWYgKHVubGlrZWx5KHVwLSZndDtwZW5kaW5nKSkgewogCQkvKiBUaGUgc29ja2V0IGlzIGFscmVhZHkgY29ya2VkIHdoaWxlIHByZXBhcmluZyBpdC4gKi8KIAkJLyogLi4uIHdoaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnLiAtLUFOSyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVRFB2NiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCBwcm9ibGVtIGl0JiMzOTtzIGFkZHJlc3NpbmcuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlOiBhIG5ldyBjaGVjayB3aXRoaW4gYHVkcHY2X3NlbmRtc2dgLiBJdCYjMzk7cyBhIHF1aWNrIGNvbmRpdGlvbmFsIHN0YXRlbWVudDogYGlmICh1bmxpa2VseShzay0mZ3Q7c2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlgLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBhcmUgd2UgY2hlY2tpbmcgdGhlIGFkZHJlc3MgZmFtaWx5IHdpdGhpbiBhIGZ1bmN0aW9uIG5hbWVkIGB1ZHB2Nl9zZW5kbXNnYD8gU2hvdWxkbiYjMzk7dCB0aGlzICpvbmx5KiBiZSBkZWFsaW5nIHdpdGggSVB2NiBzb2NrZXRzPwoKVGhlIGFkZGl0aW9uIG9mIHRoaXMgY2hlY2sgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnIG9yIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IGZhbWlseSB1c2FnZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbm93IGd1YXJkaW5nIGFnYWluc3QgYSBjb25kaXRpb24gd2hlcmUgYSBub24tSVB2NiBzb2NrZXQgbWlnaHQgYmUgcGFzc2VkIHRvIHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2Ygd2hlcmUgeW91IGNhbiBnZXQgYSBuYXN0eSBidWcuCgpUaGUgY29tbWVudCAmIzM0O3doaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnJiMzNDsgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IHRoZSBjb2RlICp3YXNuJiMzOTt0KiBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24sIGFuZCB0aGUgcHJlc2VuY2Ugb2Ygc3VjaCBhIGNvbmRpdGlvbiBpcyBsaWtlbHkgZHVlIHRvIGFuIGVycm9yIHVwc3RyZWFtLCBtYXliZSBpbiB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhpcyBzb2NrZXQuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBhdHRlbXB0aW5nIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGNyYXNoaW5nLCBvciByZXR1cm5pbmcgYW4gaW5jb3JyZWN0IGVycm9yLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGVjayB1c2VzIGB1bmxpa2VseSgpYCBoaW50cyB0aGlzIGNvbmRpdGlvbiBpcyBleHBlY3RlZCB0byBiZSByYXJlLCBwcm9iYWJseSB0cmlnZ2VyZWQgYnkgYSBwcm9ncmFtbWluZyBtaXN0YWtlLiBUaGUgJiMzNDtsb2NrX3NvY2soc2spJiMzNDsgYW5kICYjMzQ7cmVsZWFzZV9zb2NrKHNrKSYjMzQ7IGNhbGxzIHN1Z2dlc3QgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGxvY2tlZCwgc28gdGhpcyBpcyBhbm90aGVyIGRhdGEgc2FmZXR5IGNoZWNrIHRoYXQgd2Ugc2hvdWxkIGJlIHRha2luZyBub3RpY2Ugb2YuCgpJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgcmV2aWV3IHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lIDE3MTYgdG8gc2VlIGhvdyBgdXAtJmd0O3BlbmRpbmdgIGlzIHVzZWQgYW5kIGhvdyB0aGlzIG5ldyBgQUZfSU5FVDZgIGNoZWNrIGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBsb2dpYy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhpcyBwYXRjaCBtaXRpZ2F0ZXMgdGhlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGlmIHRoaXMgYEVBRk5PU1VQUE9SVGAgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIsIGFuZCBpZiB0aGlzIGNvdWxkIGJlIGFuIGV4cGxvaXQgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjgwOlx0XHRcdGZsNi1cdTAwM2VmbG93aTZfb2lmID0gUkVBRF9PTkNFKG5wLVx1MDAzZW1jYXN0X29pZik7XG4xNjgxOlx0XHRcdGNvbm5lY3RlZCA9IGZhbHNlO1xuMTY4MjpcdFx0fSBlbHNlIGlmICghZmw2LVx1MDAzZWZsb3dpNl9vaWYpXG4xNjgzOlx0XHRcdGZsNi1cdTAwM2VmbG93aTZfb2lmID0gUkVBRF9PTkNFKG5wLVx1MDAzZXVjYXN0X29pZik7XG4xNjg0Olx0XG4xNjg1Olx0XHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTZfdG9fZmxvd2lfY29tbW9uKGZsNikpO1xuMTY4NjpcdFxuMTY4NzpcdFx0Zmw2LVx1MDAzZWZsb3dsYWJlbCA9IGlwNl9tYWtlX2Zsb3dpbmZvKGlwYzYudGNsYXNzLCBmbDYtXHUwMDNlZmxvd2xhYmVsKTtcbjE2ODg6XHRcbjE2ODk6XHRcdGRzdCA9IGlwNl9za19kc3RfbG9va3VwX2Zsb3coc2ssIGZsNiwgZmluYWxfcCwgY29ubmVjdGVkKTtcbjE2OTA6XHRcdGlmIChJU19FUlIoZHN0KSkge1xuMTY5MTpcdFx0XHRlcnIgPSBQVFJfRVJSKGRzdCk7XG4xNjkyOlx0XHRcdGRzdCA9IE5VTEw7XG4xNjkzOlx0XHRcdGdvdG8gb3V0O1xuMTY5NDpcdFx0fVxuMTY5NTpcdFxuMTY5NjpcdFx0aWYgKGlwYzYuaGxpbWl0IFx1MDAzYyAwKVxuMTY5NzpcdFx0XHRpcGM2LmhsaW1pdCA9IGlwNl9za19kc3RfaG9wbGltaXQobnAsIGZsNiwgZHN0KTtcbjE2OTg6XHRcbjE2OTk6XHRcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzXHUwMDI2TVNHX0NPTkZJUk0pXG4xNzAwOlx0XHRcdGdvdG8gZG9fY29uZmlybTtcbjE3MDE6XHRiYWNrX2Zyb21fY29uZmlybTpcbjE3MDI6XHRcbjE3MDM6XHRcdC8qIExvY2tsZXNzIGZhc3QgcGF0aCBmb3IgdGhlIG5vbi1jb3JraW5nIGNhc2UgKi9cbjE3MDQ6XHRcdGlmICghY29ya3JlcSkge1xuMTcwNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTcwNjpcdFxuMTcwNzpcdFx0XHRza2IgPSBpcDZfbWFrZV9za2Ioc2ssIGlwX2dlbmVyaWNfZ2V0ZnJhZywgbXNnLCB1bGVuLFxuMTcwODpcdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LFxuMTcwOTpcdFx0XHRcdFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXG4xNzEwOlx0XHRcdFx0XHQgICBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBcdTAwMjZjb3JrKTtcbjE3MTE6XHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuMTcxMjpcdFx0XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpXG4xNzEzOlx0XHRcdFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcdTAwMjZjb3JrLmJhc2UpO1xuMTcxNDpcdFx0XHQvKiBpcDZfbWFrZV9za2Igc3RlYWxzIGRzdCByZWZlcmVuY2UgKi9cbjE3MTU6XHRcdFx0Z290byBvdXRfbm9fZHN0O1xuMTcxNjpcdFx0fVxuMTcxNzpcdFxuMTcxODpcdFx0bG9ja19zb2NrKHNrKTtcbjE3MTk6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4xNzIwOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzIxOlx0XHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4xNzIyOlx0XHRcdGdvdG8gb3V0O1xuMTcyMzpcdFx0fVxuMTcyNDpcdFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4xNzI1Olx0XHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuMTcyNjpcdFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4xNzI3Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzI4Olx0XG4xNzI5Olx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7dWRwIGNvcmsgYXBwIGJ1ZyAyXFxuXCYjMzQ7KTtcbjE3MzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE3MzE6XHRcdFx0Z290byBvdXQ7XG4xNzMyOlx0XHR9XG4xNzMzOlx0XG4xNzM0Olx0XHRXUklURV9PTkNFKHVwLVx1MDAzZXBlbmRpbmcsIEFGX0lORVQ2KTtcbjE3MzU6XHRcbjE3MzY6XHRkb19hcHBlbmRfZGF0YTpcbjE3Mzc6XHRcdHVwLVx1MDAzZWxlbiAmIzQzOz0gdWxlbjtcbjE3Mzg6XHRcdGVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXG4xNzM5Olx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBcdTAwMjZpcGM2LCBmbDYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIHRyeWluZyB0byBkZWJ1ZyBvciB1bmRlcnN0YW5kIGB1ZHB2Nl9zZW5kbXNnYDoKCioqRGl2aW5nIERlZXAgaW50byBgdWRwdjZfc2VuZG1zZ2AgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIHdpdGhpbiBgdWRwdjZfc2VuZG1zZ2AuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgaXNzdWVzLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lcyAqYmVmb3JlKiBhbmQgKmFmdGVyKiB0aGUgc2VjdGlvbiBJJiMzOTttIGZvY3VzaW5nIG9uLiBJdCYjMzk7cyBhbG1vc3QgbmV2ZXIgaXNvbGF0ZWQuIEkmIzM5O2xsIHJlYWQgdGhyb3VnaCBsaW5lcyAxNTAwIHRvIDE2ODAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCBmb3IgYW5hbHlzaXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBwYXJhbWV0ZXJzIGFyZSBzZXQsIGVycm9yIGhhbmRsaW5nIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy4gTGV0JiMzOTtzIHN0YXJ0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUwMDpcdFx0XHRcdGdvdG8gZG9fdWRwX3NlbmRtc2c7XG4xNTAxOlx0XHRcdGNhc2UgQUZfVU5TUEVDOlxuMTUwMjpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZSA9IHNpbjYgPSBOVUxMO1xuMTUwMzpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZWxlbiA9IGFkZHJfbGVuID0gMDtcbjE1MDQ6XHRcdFx0XHRkYWRkciA9IE5VTEw7XG4xNTA1Olx0XHRcdFx0YnJlYWs7XG4xNTA2Olx0XHRcdGRlZmF1bHQ6XG4xNTA3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTA4Olx0XHRcdH1cbjE1MDk6XHRcdH0gZWxzZSBpZiAoIVJFQURfT05DRSh1cC1cdTAwM2VwZW5kaW5nKSkge1xuMTUxMDpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuMTUxMTpcdFx0XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuMTUxMjpcdFx0XHRkYWRkciA9IFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuMTUxMzpcdFx0fSBlbHNlXG4xNTE0Olx0XHRcdGRhZGRyID0gTlVMTDtcbjE1MTU6XHRcbjE1MTY6XHRcdGlmIChkYWRkcikge1xuMTUxNzpcdFx0XHRpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKGRhZGRyKSkge1xuMTUxODpcdFx0XHRcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XG4xNTE5Olx0XHRcdFx0c2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuMTUyMDpcdFx0XHRcdHNpbi5zaW5fcG9ydCA9IHNpbjYgPyBzaW42LVx1MDAzZXNpbjZfcG9ydCA6IGluZXQtXHUwMDNlaW5ldF9kcG9ydDtcbjE1MjE6XHRcdFx0XHRzaW4uc2luX2FkZHIuc19hZGRyID0gZGFkZHItXHUwMDNlczZfYWRkcjMyWzNdO1xuMTUyMjpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZSA9IFx1MDAyNnNpbjtcbjE1MjM6XHRcdFx0XHRtc2ctXHUwMDNlbXNnX25hbWVsZW4gPSBzaXplb2Yoc2luKTtcbjE1MjQ6XHRkb191ZHBfc2VuZG1zZzpcbjE1MjU6XHRcdFx0XHRlcnIgPSBpcHY2X29ubHlfc29jayhzaykgP1xuMTUyNjpcdFx0XHRcdFx0LUVORVRVTlJFQUNIIDogdWRwX3NlbmRtc2coc2ssIG1zZywgbGVuKTtcbjE1Mjc6XHRcdFx0XHRtc2ctXHUwMDNlbXNnX25hbWUgPSBzaW42O1xuMTUyODpcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfbmFtZWxlbiA9IGFkZHJfbGVuO1xuMTUyOTpcdFx0XHRcdHJldHVybiBlcnI7XG4xNTMwOlx0XHRcdH1cbjE1MzE6XHRcdH1cbjE1MzI6XHRcbjE1MzM6XHRcdC8qIFJvdWdoIGNoZWNrIG9uIGFyaXRobWV0aWMgb3ZlcmZsb3csXG4xNTM0Olx0XHQgICBiZXR0ZXIgY2hlY2sgaXMgbWFkZSBpbiBpcDZfYXBwZW5kX2RhdGEoKS5cbjE1MzU6XHRcdCAgICovXG4xNTM2Olx0XHRpZiAobGVuIFx1MDAzZSBJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKVxuMTUzNzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMTUzODpcdFxuMTUzOTpcdFx0aWYgKFJFQURfT05DRSh1cC1cdTAwM2VwZW5kaW5nKSkge1xuMTU0MDpcdFx0XHRpZiAoUkVBRF9PTkNFKHVwLVx1MDAzZXBlbmRpbmcpID09IEFGX0lORVQpXG4xNTQxOlx0XHRcdFx0cmV0dXJuIHVkcF9zZW5kbXNnKHNrLCBtc2csIGxlbik7XG4xNTQyOlx0XHRcdC8qXG4xNTQzOlx0XHRcdCAqIFRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcy5cbjE1NDQ6XHRcdFx0ICogVGhlIHNvY2tldCBsb2NrIG11c3QgYmUgaGVsZCB3aGlsZSBpdCYjMzk7cyBjb3JrZWQuXG4xNTQ1Olx0XHRcdCAqL1xuMTU0NjpcdFx0XHRsb2NrX3NvY2soc2spO1xuMTU0NzpcdFx0XHRpZiAobGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4xNTQ4Olx0XHRcdFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcgIT0gQUZfSU5FVDYpKSB7XG4xNTQ5Olx0XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTU1MDpcdFx0XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4xNTUxOlx0XHRcdFx0fVxuMTU1MjpcdFx0XHRcdGRzdCA9IE5VTEw7XG4xNTUzOlx0XHRcdFx0Z290byBkb19hcHBlbmRfZGF0YTtcbjE1NTQ6XHRcdFx0fVxuMTU1NTpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTU1NjpcdFx0fVxuMTU1NzpcdFx0dWxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuMTU1ODpcdFxuMTU1OTpcdFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcbjE1NjA6XHRcbjE1NjE6XHRcdGlmIChzaW42KSB7XG4xNTYyOlx0XHRcdGlmIChzaW42LVx1MDAzZXNpbjZfcG9ydCA9PSAwKVxuMTU2MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTU2NDpcdFxuMTU2NTpcdFx0XHRmbDYtXHUwMDNlZmw2X2Rwb3J0ID0gc2luNi1cdTAwM2VzaW42X3BvcnQ7XG4xNTY2Olx0XHRcdGRhZGRyID0gXHUwMDI2c2luNi1cdTAwM2VzaW42X2FkZHI7XG4xNTY3Olx0XG4xNTY4Olx0XHRcdGlmIChpbmV0Nl90ZXN0X2JpdChTTkRGTE9XLCBzaykpIHtcbjE1Njk6XHRcdFx0XHRmbDYtXHUwMDNlZmxvd2xhYmVsID0gc2luNi1cdTAwM2VzaW42X2Zsb3dpbmZvXHUwMDI2SVBWNl9GTE9XSU5GT19NQVNLO1xuMTU3MDpcdFx0XHRcdGlmIChmbDYtXHUwMDNlZmxvd2xhYmVsIFx1MDAyNiBJUFY2X0ZMT1dMQUJFTF9NQVNLKSB7XG4xNTcxOlx0XHRcdFx0XHRmbG93bGFiZWwgPSBmbDZfc29ja19sb29rdXAoc2ssIGZsNi1cdTAwM2VmbG93bGFiZWwpO1xuMTU3MjpcdFx0XHRcdFx0aWYgKElTX0VSUihmbG93bGFiZWwpKVxuMTU3MzpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NzQ6XHRcdFx0XHR9XG4xNTc1Olx0XHRcdH1cbjE1NzY6XHRcbjE1Nzc6XHRcdFx0LypcbjE1Nzg6XHRcdFx0ICogT3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlmZmljdWx0IHRvIG1haW50YWluXG4xNTc5Olx0XHRcdCAqIHNrLVx1MDAzZXNrX2RzdF9jYWNoZS5cbjE1ODA6XHRcdFx0ICovXG4xNTgxOlx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgXHUwMDI2XHUwMDI2XG4xNTgyOlx0XHRcdCAgICBpcHY2X2FkZHJfZXF1YWwoZGFkZHIsIFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSlcbjE1ODM6XHRcdFx0XHRkYWRkciA9IFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuMTU4NDpcdFxuMTU4NTpcdFx0XHRpZiAoYWRkcl9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgXHUwMDI2XHUwMDI2XG4xNTg2Olx0XHRcdCAgICBzaW42LVx1MDAzZXNpbjZfc2NvcGVfaWQgXHUwMDI2XHUwMDI2XG4xNTg3Olx0XHRcdCAgICBfX2lwdjZfYWRkcl9uZWVkc19zY29wZV9pZChfX2lwdjZfYWRkcl90eXBlKGRhZGRyKSkpXG4xNTg4Olx0XHRcdFx0Zmw2LVx1MDAzZWZsb3dpNl9vaWYgPSBzaW42LVx1MDAzZXNpbjZfc2NvcGVfaWQ7XG4xNTg5Olx0XHR9IGVsc2Uge1xuMTU5MDpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuMTU5MTpcdFx0XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuMTU5MjpcdFxuMTU5MzpcdFx0XHRmbDYtXHUwMDNlZmw2X2Rwb3J0ID0gaW5ldC1cdTAwM2VpbmV0X2Rwb3J0O1xuMTU5NDpcdFx0XHRkYWRkciA9IFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyO1xuMTU5NTpcdFx0XHRmbDYtXHUwMDNlZmxvd2xhYmVsID0gbnAtXHUwMDNlZmxvd19sYWJlbDtcbjE1OTY6XHRcdFx0Y29ubmVjdGVkID0gdHJ1ZTtcbjE1OTc6XHRcdH1cbjE1OTg6XHRcbjE1OTk6XHRcdGlmICghZmw2LVx1MDAzZWZsb3dpNl9vaWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJUHY2IFNvY2tldCBBbm9tYWx5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmRpdGlvbjogYHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDZgIHdpdGhpbiBgdWRwdjZfc2VuZG1zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgZXZlbiBoZXJlPyBXaGF0IGNpcmN1bXN0YW5jZXMgd291bGQgY2F1c2UgYSBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHkgdG8gKm5vdCogYmUgSVB2NiB3aXRoaW4gYW4gSVB2Ni1zcGVjaWZpYyBmdW5jdGlvbj8gVGhhdCYjMzk7cyBqdXN0IGJpemFycmUuIAoKV2FpdCBhIG1pbnV0ZSwgaXMgaXQgcG9zc2libGUgdGhlIGFkZHJlc3MgZmFtaWx5IGNoYW5nZXMgKmFmdGVyKiB0aGUgc29ja2V0IGlzIGNyZWF0ZWQ/IFBlcmhhcHMgYSBjb25uZWN0ZWQgQUZfSU5FVCBzb2NrZXQgaXMgc29tZWhvdyBiZWluZyBwYXNzZWQgdG8gYHVkcHY2X3NlbmRtc2dgPyBPciBtYXliZSBpdCYjMzk7cyBiZWVuIGRpc2Nvbm5lY3RlZD8gV2hhdCBpZiBhbiBBRl9JTkVUIHNvY2tldCBpcyBtaXN0YWtlbmx5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gT3IgY291bGQgdGhlcmUgYmUgc29tZSBraW5kIG9mIGFkZHJlc3MgZmFtaWx5IGNvbnZlcnNpb24gaGFwcGVuaW5nLCBsaWtlIGFuIEFGX0lORVQ2IHNvY2tldCBiZWluZyBkb3duZ3JhZGVkIHNvbWVob3c/IFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgYSByZWFsbHkgc3VidGxlIGJ1ZywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgoKUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBMZXQgbWUgY2hlY2sgYGluZXRfc2VuZG1zZ2AsIGBpbmV0Nl9zZW5kbXNnYCwgYW5kIGB1ZHBfc2VuZG1zZ2AgdG8gc2VlIGhvdyB0aGUgc29ja2V0JiMzOTtzIGZhbWlseSBpcyBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgcnVuIGEgcXVpY2sgYGdpdCBncmVwYCB3aXRoaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgc2tfZmFtaWx5ICE9IEFGX0lORVQ2YCBvciBzaW1pbGFyIGNoZWNrcy4gSG9wZWZ1bGx5LCBJIGNhbiBzZWUgaG93IHRoaXMgY2hlY2sgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2ZhbWlseSAhPSBBRl9JTkVUNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTYxNT1pbnQgc2tfcmV1c2Vwb3J0X2F0dGFjaF9icGYodTMyIHVmZCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE2MzktXHRcdCAgICAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9maWx0ZXIuYzoxNjQwOlx0XHQgICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTE2NDEtXHRcdFx0ZXJyID0gLUVOT1RTVVBQO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU3NTA9c3RhdGljIGludCBzb2xfaXB2Nl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc1My17XG5uZXQvY29yZS9maWx0ZXIuYzo1NzU0Olx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNilcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc4NDA9QlBGX0NBTExfNShicGZfdGNwX2NoZWNrX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzg4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjc4ODE6XHRcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpXG5uZXQvY29yZS9maWx0ZXIuYy03ODgyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc5MTM9QlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NTAtXG5uZXQvY29yZS9maWx0ZXIuYzo3OTUxOlx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzk1Mi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTItXHQgKi9cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1NTM6XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTQtXHRcdGdvdG8gdW5sb2NrO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE0NTk9aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjYvdWRwLmMtMTcxOC1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2Ni91ZHAuYzoxNzE5Olx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcbm5ldC9pcHY2L3VkcC5jLTE3MjAtXHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2tjbS9rY21zb2NrLmM9MTI0MD1zdGF0aWMgaW50IGtjbV9hdHRhY2goc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqY3NvY2ssXG4tLVxubmV0L2tjbS9rY21zb2NrLmMtMTI2Mi1cdC8qIE9ubHkgYWxsb3cgVENQIHNvY2tldHMgdG8gYmUgYXR0YWNoZWQgZm9yIG5vdyAqL1xubmV0L2tjbS9rY21zb2NrLmM6MTI2MzpcdGlmICgoY3NrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSB8fFxubmV0L2tjbS9rY21zb2NrLmMtMTI2NC1cdCAgICBjc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApIHtcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jPTExMjk9aW50IG5ldGxibF9jb25uX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2Ny1cdGNhc2UgQUZfSU5FVDY6XG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jOjExNjg6XHRcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2OS1cdFx0XHRyZXRfdmFsID0gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9MTk9c3NpemVfdCBkb191ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmMtMjUtXHRcdGlmIChzYS1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbm5ldC9yeHJwYy9vdXRwdXQuYzoyNjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG5uZXQvcnhycGMvb3V0cHV0LmMtMjctXHRcdFx0XHRwcl93YXJuKFwmIzM0O0FGX0lORVQ2IGFkZHJlc3Mgb24gQUZfSU5FVCBzb2NrZXRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBkb19pcHY2X3NldHNvY2tvcHRgIGZ1bmN0aW9uIGFuZCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IGxpbmUgNTUyLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHByb2JhYmx5IGluIHRoZSBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBmaWxlLCBuZWFyIHRoYXQgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvZiB0aGUgSVB2NiBzb2NrZXQgb3B0aW9ucyBiZWluZyBzZXQsIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBhbmQgaG93IHRob3NlIHNldHRpbmdzIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUgdmFyaW91cyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgY291bGQgYmUgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZW0gYXQgdGhpcyBsZXZlbC4gR290dGEgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzb2NrZXQgb3B0aW9ucyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXG4gNTQxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTQyOlx0XG4gNTQzOlx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcbiA1NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNTQ1Olx0XHR9XG4gNTQ2Olx0XHR9XG4gNTQ3Olx0XG4gNTQ4Olx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4gNTQ5Olx0XG4gNTUwOlx0XHQvKiBBbm90aGVyIHRocmVhZCBoYXMgY29udmVydGVkIHRoZSBzb2NrZXQgaW50byBJUHY0IHdpdGhcbiA1NTE6XHRcdCAqIElQVjZfQUREUkZPUk0gY29uY3VycmVudGx5LlxuIDU1MjpcdFx0ICovXG4gNTUzOlx0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlcbiA1NTQ6XHRcdFx0Z290byB1bmxvY2s7XG4gNTU1Olx0XG4gNTU2Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA1NTc6XHRcbiA1NTg6XHRcdGNhc2UgSVBWNl9BRERSRk9STTpcbiA1NTk6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNTYwOlx0XHRcdFx0Z290byBlX2ludmFsO1xuIDU2MTpcdFx0XHRpZiAodmFsID09IFBGX0lORVQpIHtcbiA1NjI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1JBVylcbiA1NjM6XHRcdFx0XHRcdGJyZWFrO1xuIDU2NDpcdFxuIDU2NTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuIDU2NjpcdFx0XHRcdFx0aWYgKHVkcF9zayhzayktXHUwMDNlcGVuZGluZyA9PSBBRl9JTkVUNikge1xuIDU2NzpcdFx0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuIDU2ODpcdFx0XHRcdFx0XHRicmVhaztcbiA1Njk6XHRcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVB2NiBTb2NrZXQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGB1ZHB2Nl9zZW5kbXNnYCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBjbGlja2VkLiBJdCBsb29rcyBsaWtlIGBJUFY2X0FERFJGT1JNYCBtaWdodCBiZSBhYmxlIHRvIGNvbmN1cnJlbnRseSBjaGFuZ2UgYSBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHksIHNwZWNpZmljYWxseSBmcm9tIElQdjYgdG8gSVB2NC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLgoKSSBzZWUgdGhhdCBiZWZvcmUgdGhlIGBsb2NrX3NvY2soc2spYCBjYWxsLCBpdCYjMzk7cyBwb3NzaWJsZSB0byB1c2UgYHNldHNvY2tvcHQoSVBWNl9BRERSRk9STSlgIHRvIHN3aXRjaCB0aGUgc29ja2V0IGZyb20gQUZfSU5FVDYgdG8gQUZfSU5FVC4gVGhlbiwgYHVkcHY2X3NlbmRtc2dgIGxvY2tzIHRoZSBzb2NrZXQsIHNldHMgYFdSSVRFX09OQ0UodXAtJmd0O3BlbmRpbmcsIEFGX0lORVQ2KTtgLCBhbmQgZ29lcyBvbiB0byBjYWxsIGBpcDZfYXBwZW5kX2RhdGEoLi4uKWAgYW5kIHRoZSByZXN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zICphZnRlciogdGhlIHNvY2tldCBpcyBsb2NrZWQgaWYgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIG5vIGxvbmdlciBBRl9JTkVUNj8gVGhhdOKAmXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbWlnaHQgYmUuCgpUaGUgcGF0Y2ggcHJvdmlkZXMgc29tZSBuZXcgY29kZSB0aGF0IGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIGlzc3VlLiBJdCBjaGVja3MgaWYgYHNrLSZndDtza19mYW1pbHkgIT0gQUZfSU5FVDZgICphZnRlciogYGxvY2tfc29jayhzaylgLiBJZiBpdCYjMzk7cyBub3QgSVB2NiwgaXQgcmVsZWFzZXMgdGhlIHNvY2tldCwgcmV0dXJucyBgLUVBRk5PU1VQUE9SVGAsIGFuZCBnb2VzIHRvIGBvdXRgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBtaXRpZ2F0ZSB0aGlzIGV4YWN0IHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBnb29kLgoKTm93LCBJIG5lZWQgdG8gdHJhY2Ugd2hhdCBoYXBwZW5zIHdoZW4gd2UgYGdvdG8gb3V0O2AgaW4gYHVkcHY2X3NlbmRtc2dgLiBLbm93aW5nIHRoZSAmIzM0O291dCYjMzQ7IHBhdGggd2lsbCB0ZWxsIG1lIGlmIHRoZSBzb2NrZXQgaXMgcHJvcGVybHkgY2xlYW5lZCB1cCBvciB3aGV0aGVyIGFuIGluY29tcGxldGUgc3RhdGUgaXMgbGVmdCBiZWhpbmQuIFRoaXMgd2lsbCBkaWN0YXRlIGlmIHRoZSBmaXggaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc1MDpcdFx0XHRlcnIgPSBpbmV0Nl90ZXN0X2JpdChSRUNWRVJSNiwgc2spID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7XG4xNzUxOlx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTc1MjpcdFxuMTc1MzpcdG91dDpcbjE3NTQ6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4xNzU1Olx0b3V0X25vX2RzdDpcbjE3NTY6XHRcdGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTtcbjE3NTc6XHRcdHR4b3B0X3B1dChvcHRfdG9fZnJlZSk7XG4xNzU4Olx0XHRpZiAoIWVycilcbjE3NTk6XHRcdFx0cmV0dXJuIGxlbjtcbjE3NjA6XHRcdC8qXG4xNzYxOlx0XHQgKiBFTk9CVUZTID0gbm8ga2VybmVsIG1lbSwgU09DS19OT1NQQUNFID0gbm8gc25kYnVmIHNwYWNlLiAgUmVwb3J0aW5nXG4xNzYyOlx0XHQgKiBFTk9CVUZTIG1pZ2h0IG5vdCBiZSBnb29kIChpdCYjMzk7cyBub3QgdHVuYWJsZSBwZXIgc2UpLCBidXQgb3RoZXJ3aXNlXG4xNzYzOlx0XHQgKiB3ZSBkb24mIzM5O3QgaGF2ZSBhIGdvb2Qgc3RhdGlzdGljIChJcE91dERpc2NhcmRzIGJ1dCBpdCBjYW4gYmUgdG9vIG1hbnlcbjE3NjQ6XHRcdCAqIHRoaW5ncykuICBXZSBjb3VsZCBhZGQgYW5vdGhlciBuZXcgc3RhdCBidXQgYXQgbGVhc3QgZm9yIG5vdyB0aGF0XG4xNzY1Olx0XHQgKiBzZWVtcyBsaWtlIG92ZXJraWxsLlxuMTc2NjpcdFx0ICovXG4xNzY3Olx0XHRpZiAoZXJyID09IC1FTk9CVUZTIHx8IHRlc3RfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKSlcbjE3Njg6XHRcdFx0VURQNl9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBVRFBfTUlCX1NOREJVRkVSUk9SUyk7XG4xNzY5Olx0XG4xNzcwOlx0XHRyZXR1cm4gZXJyO1xuMTc3MTpcdFxuMTc3MjpcdGRvX2NvbmZpcm06XG4xNzczOlx0XHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1BST0JFKVxuMTc3NDpcdFx0XHRkc3RfY29uZmlybV9uZWlnaChkc3QsIFx1MDAyNmZsNi1cdTAwM2VkYWRkcik7XG4xNzc1Olx0XHRpZiAoIShtc2ctXHUwMDNlbXNnX2ZsYWdzXHUwMDI2TVNHX1BST0JFKSB8fCBsZW4pXG4xNzc2Olx0XHRcdGdvdG8gYmFja19mcm9tX2NvbmZpcm07XG4xNzc3Olx0XHRlcnIgPSAwO1xuMTc3ODpcdFx0Z290byBvdXQ7XG4xNzc5Olx0fVxuMTc4MDpcdEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZyk7XG4xNzgxOlx0XG4xNzgyOlx0c3RhdGljIHZvaWQgdWRwdjZfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuMTc4MzpcdHtcbjE3ODQ6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4xNzg1Olx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbjE3ODY6XHRcbjE3ODc6XHRcdGlmICghUkVBRF9PTkNFKHVwLVx1MDAzZXBlbmRpbmcpIHx8IHVkcF90ZXN0X2JpdChDT1JLLCBzaykpXG4xNzg4Olx0XHRcdHJldHVybjtcbjE3ODk6XHRcbjE3OTA6XHRcdGxvY2tfc29jayhzayk7XG4xNzkxOlx0XHRpZiAodXAtXHUwMDNlcGVuZGluZyBcdTAwMjZcdTAwMjYgIXVkcF90ZXN0X2JpdChDT1JLLCBzaykpXG4xNzkyOlx0XHRcdHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTtcbjE3OTM6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xNzk0Olx0fVxuMTc5NTpcdFxuMTc5NjpcdHN0YXRpYyB2b2lkIHVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4xNzk3Olx0e1xuMTc5ODpcdFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4xNzk5Olx0XHRsb2NrX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQwCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDY5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdDogS0FTQU4gdnMuIEtNU0FOKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nOiBpdCYjMzk7cyBhZGRpbmcgYSBkZWZlbnNpdmUgY2hlY2sgd2l0aGluIGB1ZHB2Nl9zZW5kbXNnKClgICphZnRlciogYGxvY2tfc29jayhzaylgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiBgc2stJmd0O3NrX2ZhbWlseWAgaXMgYEFGX0lORVQ2YCwgYW5kIGlmIG5vdCwgcmVsZWFzZXMgdGhlIHNvY2tldCBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEFuZCBiZWZvcmUgSSBnZXQgYW55IGZ1cnRoZXIsIHRoZSBjbGVhbnVwIGlzIGdvaW5nIHRvIHJldHVybiBgLUVBRk5PU1VQUE9SVGAgd2hpY2ggd2lsbCBjYWxsIHRoZXNlIGltcG9ydGFudCBjbGVhbnVwIGFjdGlvbnM6IGBkc3RfcmVsZWFzZShkc3QpYCwgYGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKWAsIGFuZCBgdHhvcHRfcHV0KG9wdF90b19mcmVlKWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IEtNU0FOIGlzIHVuaXF1ZWx5IHBvc2l0aW9uZWQgdG8gY2F0Y2gsIGJleW9uZCB3aGF0IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgZmluZD8gTGV0IG1lIGdvIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDoKCjEuICAqKkRvZXMgaXQgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgZGF0YSB0aGF0IGlzIHBhc3NlZCBiYWNrIHRvIHVzZXItc3BhY2UgdmlhIG1ldGhvZHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBTS0IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMgb3IgQlBGIGJ1ZmZlcnMuIEl0JiMzOTtzIGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgcHJvY2Vzc2luZy4KCjIuICAqKkRvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC4gYHNrLSZndDtza19mYW1pbHlgIGlzIHBhcnQgb2YgdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLCBhbmQgaXQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgc29ja2V0IGlzIGNyZWF0ZWQuIFRoYXQgZmllbGQgaXMgbm90IHRoZSBzb3VyY2Ugb2YgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgaW4gdGhpcyBjb2RlIHBhdGguCgozLiAgKipEb2VzIGl0IGNyZWF0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyoqIE5vLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBjb21wbGljYXRlZCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBkb3duIHRoZSBsaW5lLgoKNC4gICoqRG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObywgaXQgZG9lc24mIzM5O3QgdG91Y2ggYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBvZiBidWZmZXJzLgoKVGhlIGJ1ZyB0aGlzIHBhdGNoIGZpeGVzIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudDogaXQgcHJldmVudHMgYHVkcHY2X3NlbmRtc2dgIGZyb20gcHJvY2VlZGluZyB3aXRoIElQdjYtc3BlY2lmaWMgb3BlcmF0aW9ucyBpZiB0aGUgc29ja2V0JiMzOTtzIGZhbWlseSBoYXMgYmVlbiBjb25jdXJyZW50bHkgY2hhbmdlZCB0byBgQUZfSU5FVGAgdmlhIGBJUFY2X0FERFJGT1JNYC4gV2l0aG91dCB0aGlzIGNoZWNrLCB3ZSYjMzk7ZCBwb3RlbnRpYWxseSBoYXZlIGEgdHlwZSBjb25mdXNpb24vc3RhdGUgbWlzbWF0Y2gvdXNlLWFmdGVyLWZyZWUvYmFkIGNhc3QgYmV0d2VlbiBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAuIFRob3NlIGtpbmRzIG9mIG1lbW9yeSBhY2Nlc3MgZXJyb3JzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBzYW5pdGl6ZXJzLgoKVGhpcyBwYXRjaCwgaW4gb3RoZXIgd29yZHMsIGRvZXNuJiMzOTt0ICpleHBvc2UqIG9yICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCwgY3JlYXRlZCwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIEl0IHByZXZlbnRzIGEgcG90ZW50aWFsIG1lbW9yeSBhY2Nlc3MgaXNzdWUgdGhhdCBpcyBhbHJlYWR5IGxpa2VseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIHRvb2xzLiBUaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGhlcmUgaXMgcHJldHR5IGNsZWFyLgoKR2l2ZW4gdGhlIGNyaXRlcmlhIHRoYXQgSSBoYXZlLCBhbmQgd2l0aCB0aGUgJiMzNDtDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTiYjMzQ7IGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgbWluZCwgdGhlIHJ1bGUgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGlzICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBHaXZlbiB0aGUgcGF0Y2ggYW5kIG15IGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB0aGF0IHdvdWxkIGJlIGZsYWdnZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcmlzaywgc28gSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cblxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgdWRwdjZfc2VuZG1zZ2AgdW5kZXIgYGxvY2tfc29jayhzaylgIHRvIGVuc3VyZSBgc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2YC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgd2hlcmUgYW5vdGhlciB0aHJlYWQgY29udmVydHMgdGhlIHNvY2tldCB0byBgQUZfSU5FVGAgdmlhIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0LCBhdm9pZGluZyBzdWJzZXF1ZW50IHByb3RvY29sIG1pc21hdGNoIGFuZCB0eXBlIGNvbmZ1c2lvbiAvIGNvcnJ1cHRpb24gaXNzdWVzIGluIGBpcDZfYXBwZW5kX2RhdGFgLlxuXG5UaGUgY2hlY2sgcmVhZHMgdGhlIHdlbGwtaW5pdGlhbGl6ZWQgYHNrLVx1MDAzZXNrX2ZhbWlseWAgZmllbGQgb2YgYHN0cnVjdCBzb2NrYCBhbmQgZXhpdHMgZWFybHkgd2l0aCBgLUVBRk5PU1VQUE9SVGAuIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdHlwZS1jb25mdXNpb24gYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6MDYuMTUwODAxNzQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDk2NzQxMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHB2Nl9zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgdWRwdjZfc2VuZG1zZ2AgdW5kZXIgYGxvY2tfc29jayhzaylgIHRvIGVuc3VyZSBgc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cXG5cXG5UaGUgY2hlY2sgcmVhZHMgdGhlIHdlbGwtaW5pdGlhbGl6ZWQgYHNrLVxcdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdWRwdjZfc2VuZG1zZygpIGFmdGVyIGFjcXVpcmluZyB0aGUgc29ja2V0IGxvY2sgdG8gZW5zdXJlIHRoZSBzb2NrZXQgZmFtaWx5IGlzIHN0aWxsIEFGX0lORVQ2LCBoYW5kbGluZyBwb3RlbnRpYWwgY29uY3VycmVudCBmYW1pbHkgY2hhbmdlcyAoZS5nLiBJUFY2X0FERFJGT1JNKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBJUHY2IG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjA2LjE1MDgyMjk2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2NjE1ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTk5NTJmNjcwMDg1ZTI3OTFmN2YyOGM0NTc1YjA2YzdiOGZjMDk0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzozOTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXFxuaW5kZXggZmQ4NzU5MDhhYzBjNi4uNTY2YzYzNGE1YTU5NCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xcbisrKyBiL25ldC9pcHY2L3VkcC5jXFxuQEAgLTE3MTYsNiArMTcxNiwxMSBAQCBpbnQgdWRwdjZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0fVxcbiBcXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxuK1xcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGlmICh1bmxpa2VseSh1cC1cXHUwMDNlcGVuZGluZykpIHtcXG4gXFx0XFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXFxuIFxcdFxcdC8qIC4uLiB3aGljaCBpcyBhbiBldmlkZW50IGFwcGxpY2F0aW9uIGJ1Zy4gLS1BTksgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6MDYuNTE4MTQ3NjA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mzc3MDI3NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTk1MmY2NzAwODVlMjc5MWY3ZjI4YzQ1NzViMDZjN2I4ZmMwOTRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6Mzk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXG5pbmRleCBmZDg3NTkwOGFjMGM2Li41NjZjNjM0YTVhNTk0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbisrKyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtMTcxNiw2ICsxNzE2LDExIEBAIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0fVxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuIFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTowNi41MTgxNDkxODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQ0ODA5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJc3N1ZSBpbiBVRFB2NiBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHN0cmFpZ2h0IHRvIGBuZXQvaXB2Ni91ZHAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGluIHRoaXMgY2FzZSwgd2hlcmUgdGhpbmdzIG1pZ2h0IGJyZWFrLiBUaGUgY29tbWl0IG1vZGlmaWVzIHRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24g4oCTIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3Igc2VuZGluZyBVRFAgcGFja2V0cyBvdmVyIElQdjYuIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlgLiBIbW1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkga25vdyBgc2stXHUwMDNlc2tfZmFtaWx5YCByZXByZXNlbnRzIHRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgc29ja2V0IGFuZCBgQUZfSU5FVDZgIGlzIElQdjYuIFRoZSBjaGVjayBzZWVtcyB0byBiZSBzYXlpbmcsIFwiaWYgdGhlIHNvY2tldCBpc24ndCBJUHY2LCByZWplY3QgdGhlIHNlbmQuXCJcblxuTm93LCB0aGlzIGZlZWxzIHBvdGVudGlhbGx5IGltcG9ydGFudC4gV2h5IGlzIHRoaXMgY2hlY2sgKm5vdyogYmVpbmcgaW50cm9kdWNlZD8gSXMgdGhpcyBhZGRyZXNzaW5nIGEga25vd24gdnVsbmVyYWJpbGl0eSBvciBidWc/IE9yIHBlcmhhcHMgYSBuZXcgZmVhdHVyZSBvciBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZD8gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zOiBJZiB0aGlzICp3YXNuJ3QqIGNoZWNrZWQgYmVmb3JlLCB3aGF0IHdhcyB0aGUgYmVoYXZpb3IgaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcz8gV2FzIHRoZXJlIGEgc3VidGxlIGJ1ZyBiZWluZyBleHBsb2l0ZWQsIG9yIGFuIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3Q/XG5cblRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLCBJIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2Ni91ZHAuY2AgdG8gc2VlIHdoZXJlIHRoaXMgY2hlY2sgaXMgcGxhY2VkIHdpdGhpbiB0aGUgYHVkcHY2X3NlbmRtc2dgIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgdHJpZ2dlcmVkLiBUaGlzIGNvdWxkIHVuY292ZXIgYW55IHNwZWNpZmljIGVycm9yIHNjZW5hcmlvcy4gV2FzIHRoZXJlIHByaW9yIGNvZGUgd2hpY2ggdGhpcyBoYXMgcmVwbGFjZWQ/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29ja2V0IGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBkZWNpZGUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmVwZXJjdXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjEyLjI2Mjk2MDY1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzAwOlxcdFxcdFxcdGdvdG8gZG9fY29uZmlybTtcXG4xNzAxOlxcdGJhY2tfZnJvbV9jb25maXJtOlxcbjE3MDI6XFx0XFxuMTcwMzpcXHRcXHQvKiBMb2NrbGVzcyBmYXN0IHBhdGggZm9yIHRoZSBub24tY29ya2luZyBjYXNlICovXFxuMTcwNDpcXHRcXHRpZiAoIWNvcmtyZXEpIHtcXG4xNzA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdFxcdHNrYiA9IGlwNl9tYWtlX3NrYihzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXFxuMTcwODpcXHRcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHVkcGhkciksIFxcdTAwMjZpcGM2LFxcbjE3MDk6XFx0XFx0XFx0XFx0XFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXFxuMTcxMDpcXHRcXHRcXHRcXHRcXHQgICBtc2ctXFx1MDAzZW1zZ19mbGFncywgXFx1MDAyNmNvcmspO1xcbjE3MTE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbjE3MTI6XFx0XFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxcbjE3MTM6XFx0XFx0XFx0XFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcXHUwMDI2Y29yay5iYXNlKTtcXG4xNzE0OlxcdFxcdFxcdC8qIGlwNl9tYWtlX3NrYiBzdGVhbHMgZHN0IHJlZmVyZW5jZSAqL1xcbjE3MTU6XFx0XFx0XFx0Z290byBvdXRfbm9fZHN0O1xcbjE3MTY6XFx0XFx0fVxcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjE3MTk6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxuMTcyMDpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3MjE6XFx0XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNzIyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MjM6XFx0XFx0fVxcbjE3MjQ6XFx0XFx0aWYgKHVubGlrZWx5KHVwLVxcdTAwM2VwZW5kaW5nKSkge1xcbjE3MjU6XFx0XFx0XFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXFxuMTcyNjpcXHRcXHRcXHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXFxuMTcyNzpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3Mjg6XFx0XFxuMTcyOTpcXHRcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJ1ZHAgY29yayBhcHAgYnVnIDJcXFxcblxcXCIpO1xcbjE3MzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNzMxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRcXHRXUklURV9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nLCBBRl9JTkVUNik7XFxuMTczNTpcXHRcXG4xNzM2OlxcdGRvX2FwcGVuZF9kYXRhOlxcbjE3Mzc6XFx0XFx0dXAtXFx1MDAzZWxlbiArPSB1bGVuO1xcbjE3Mzg6XFx0XFx0ZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBpcF9nZW5lcmljX2dldGZyYWcsIG1zZywgdWxlbixcXG4xNzM5OlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgXFx1MDAyNmlwYzYsIGZsNixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6MTIuMjYzMDc0NjA3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMTE3OTEwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFkZHJlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyB0aGUgYHVkcHY2X3NlbmRtc2dgIGZ1bmN0aW9uIGlzIGJlaGF2aW5nLiBUaGVyZSBzZWVtcyB0byBiZSBzb21ldGhpbmcgYW1pc3Mgd2l0aCBJUHY0IHNvY2tldHMgYmVpbmcgcGFzc2VkIHRvIGEgZnVuY3Rpb24gcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBJUHY2LCB3aGljaCBpcyBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGEgc29ja2V0IG9yaWdpbmFsbHkgY3JlYXRlZCBhcyBJUHY2IGlzIHNvbWVob3cgdHJhbnNpdGlvbmluZyB0byBJUHY0LiBgSVBWNl9BRERSRk9STWAgaXMgaW1tZWRpYXRlbHkgc3VzcGVjdC4gUGVyaGFwcyBhIGNvbm5lY3RlZCBVRFAgc29ja2V0IGlzIGludm9sdmVkLCBvciBldmVuIGEgcmFjZSBjb25kaXRpb24gYXJvdW5kIGBzZXRzb2Nrb3B0YCBhbmQgYGNvbm5lY3RgIG1pZ2h0IGJlIHRoZSByb290IGNhdXNlIG9mIHRoaXMgZmFtaWx5IHN3aXRjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYElQVjZfQUREUkZPUk1gIGFjdHVhbGx5IGZvcmNlcyBhIGZhbWlseSBzd2l0Y2ggb2YgdGhlIHNvY2tldC4gQWx0ZXJuYXRpdmVseSwgY291bGQgYSBjaGFuZ2UgdG8gYEFGX0lORVRgIGhhcHBlbiBlbHNld2hlcmU/IFRoZSBgdWRwdjZfc2VuZG1zZ2AgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxpbmcgYFdSSVRFX09OQ0UodXAtXHUwMDNlcGVuZGluZywgQUZfSU5FVDYpO2Agd2hpY2ggc2VlbXMgb2RkLiBGdXJ0aGVybW9yZSwgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaXA2X2FwcGVuZF9kYXRhKHNrLCAuLi4pYCBhc3N1bWVzIGBpbmV0Nl9zayhzaylgIGlzIHZhbGlkLiBTbyB0aGlzIG1lYW5zIHRoZSBjb3JraW5nIHByb2Nlc3MgYW5kIHNvY2tldCBmYW1pbHkgaGF2ZSB0byBiZSBhbGlnbmVkLCBvciB0aGUgY29kZSBpcyBleHBlY3RpbmcgYSBzd2l0Y2ggKmR1cmluZyogY29ya2luZywgd2hpY2ggc2VlbXMgaW5oZXJlbnRseSByaXNreS4gSSBuZWVkIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZSBwb3RlbnRpYWwgZm9yIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiB0aGUgaW50ZW5kZWQgc29ja2V0IGZhbWlseSBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cywgZXNwZWNpYWxseSB3aGVuIGNvcmtpbmcgaXMgaW52b2x2ZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIHN1cnJvdW5kaW5nIGBJUFY2X0FERFJGT1JNYCBhbmQgb3RoZXIgY29kZSB0aGF0IG1pZ2h0IGJlIHJlc3BvbnNpYmxlIGZvciBjaGFuZ2luZyB0aGUgc29ja2V0J3MgZmFtaWx5LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgbmV0L2lwdjYgZGlyZWN0b3J5LiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMwLjU3NDg2Nzg4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxODcxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9BRERSRk9STVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jPTQyNj1pbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy00MzEtXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo0MzI6XFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVxcdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDMzLVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz01NDc9aW50IGluZXQ2X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy01NjktXFx0ZGVmYXVsdDpcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjU3MDpcXHRcXHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXFx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXFxubmV0L2lwdjYvYWZfaW5ldDYuYy01NzEtXFx0XFx0cHJvdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCk7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTYzMT1pbnQgaW5ldDZfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02MzgtXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2Mzk6XFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVxcdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz02NDU9aW50IGluZXQ2X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjU0OlxcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NS1cXHRwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTUwLVxcdC8qIEFub3RoZXIgdGhyZWFkIGhhcyBjb252ZXJ0ZWQgdGhlIHNvY2tldCBpbnRvIElQdjQgd2l0aFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1NTE6XFx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU1Mi1cXHQgKi9cXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTctXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU1ODpcXHRjYXNlIElQVjZfQUREUkZPUk06XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU1OS1cXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTA3OD1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDkwLVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDkxOlxcdGNhc2UgSVBWNl9BRERSRk9STTpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTA5Mi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMwLjgwMzA1OTkwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTY1NjI4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGB1ZHBfc2VuZG1zZ2AgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGB1ZHBfc2VuZG1zZ2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UgaXQncyB0aGUgY29yZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBVRFAgZGF0YWdyYW1zLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCB0by4uLiB3ZWxsLCBldmVyeXRoaW5nLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBvYnZpb3VzOiB3aGF0IGFyZSB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHM/IFdoYXQncyB0aGUgY29udHJvbCBmbG93PyBXaGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQsIGlmIGFueT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzb2NrZXQgb3B0aW9ucywgZXNwZWNpYWxseSB0aGluZ3MgcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uIG9yIGNvbmdlc3Rpb24gY29udHJvbC4gRG9lcyBpdCB1c2UgdGhlIGdlbmVyaWMgbmV0d29yayBzdGFjayBmdW5jdGlvbnMgZWZmZWN0aXZlbHksIG9yIGRvZXMgaXQgaGF2ZSBjdXN0b20gY29kZT8gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXJzOyBhcmUgdGhlcmUgYW55IGRyaXZlci1zcGVjaWZpYyBxdWlya3MgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcmVsaWFiaWxpdHk/IFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMzLjA5OTYyNTA5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDczNTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NrX3NvY2tcXFxcKHNrXFxcXCk7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3VkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTEyMzU9aW50IHVkcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTI3MC1cXHRcXHQgKi9cXG5uZXQvaXB2NC91ZHAuYzoxMjcxOlxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdWRwLmMtMTI3Mi1cXHRcXHRpZiAobGlrZWx5KHVwLVxcdTAwM2VwZW5kaW5nKSkge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTQ0OC1cXG5uZXQvaXB2NC91ZHAuYzoxNDQ5OlxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdWRwLmMtMTQ1MC1cXHRpZiAodW5saWtlbHkodXAtXFx1MDAzZXBlbmRpbmcpKSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xNTExPXZvaWQgdWRwX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTE1MTgtXFxubmV0L2lwdjQvdWRwLmM6MTUxOTpcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTE1MjAtXFx0aWYgKHVwLVxcdTAwM2VwZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICF1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjE0OD1zdGF0aWMgaW50IHVkcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjE1Mi1cXG5uZXQvaXB2NC91ZHAuYzoyMTUzOlxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdWRwLmMtMjE1NC1cXHRyZXMgPSBfX2lwNF9kYXRhZ3JhbV9jb25uZWN0KHNrLCB1YWRkciwgYWRkcl9sZW4pO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjE4OT1pbnQgdWRwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxubmV0L2lwdjQvdWRwLmMtMjE5MC17XFxubmV0L2lwdjQvdWRwLmM6MjE5MTpcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTIxOTItXFx0X191ZHBfZGlzY29ubmVjdChzaywgZmxhZ3MpO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjg5MD1pbnQgdWRwX2xpYl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI5MDEtXFx0XFx0aWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGIHx8IG9wdG5hbWUgPT0gU09fUkNWQlVGRk9SQ0UpIHtcXG5uZXQvaXB2NC91ZHAuYzoyOTAyOlxcdFxcdFxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC91ZHAuYy0yOTAzLVxcdFxcdFxcdC8qIHBhaXJlZCB3aXRoIFJFQURfT05DRSBpbiB1ZHBfcm1lbV9yZWxlYXNlKCkgKi9cXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI5MjMtXFx0XFx0XFx0dWRwX2NsZWFyX2JpdChDT1JLLCBzayk7XFxubmV0L2lwdjQvdWRwLmM6MjkyNDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTI5MjUtXFx0XFx0XFx0cHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yOTMwLVxcdGNhc2UgVURQX0VOQ0FQOlxcbm5ldC9pcHY0L3VkcC5jOjI5MzE6XFx0XFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTI5MzItXFx0XFx0c3dpdGNoICh2YWwpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI5NzItXFx0Y2FzZSBVRFBfR1JPOlxcbm5ldC9pcHY0L3VkcC5jOjI5NzM6XFx0XFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTI5NzQtXFx0XFx0Lyogd2hlbiBlbmFibGluZyBHUk8sIGFjY2VwdCB0aGUgcmVsYXRlZCBHU08gcGFja2V0IHR5cGUgKi9cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMxMTA9aW50IHVkcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTEyLVxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbm5ldC9pcHY0L3VkcC5jOjMxMTM6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC91ZHAuYy0zMTE0LVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzUxNT1zdGF0aWMgaW50IGJwZl9pdGVyX3VkcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM1MjYtXFxubmV0L2lwdjQvdWRwLmM6MzUyNzpcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3VkcC5jLTM1MjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjMzLjE5NDM2NDMwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NDc1MjM1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBgdWRwdjZfc2VuZG1zZ2A6IEEgUXVpY2sgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGB1ZHB2Nl9zZW5kbXNnYC4gSXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgSVB2NiBVRFAncyBzZW5kbXNnIGZ1bmN0aW9uYWxpdHkuIE15IGd1dCBzYXlzIGl0J3Mgd29ydGggYSBjbG9zZXIgaW5zcGVjdGlvbiwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIEZpcnN0LCBpcyBpdCBqdXN0IGRlY29yYXRpdmUgY29kZSwgb3IgZG9lcyBpdCBhY3R1YWxseSAqZG8qIHNvbWV0aGluZz8gV2VsbCwgdGhhdCBgaWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpYCBjaGVjayBpbmRpY2F0ZXMgZnVuY3Rpb25hbCBsb2dpYyB3aXRoIGFuIGAtRUFGTk9TVVBQT1JUYCBlcnJvciByZXR1cm4uIFNvLCBubywgaXQncyBub3QganVzdCBmbHVmZi4gR29vZC4gTmV4dCwgaXMgdGhpcyBjb2RlIGV2ZW4gaGl0IGluIHR5cGljYWwgZGVwbG95bWVudHM/IElQdjYgVURQIGlzIGV2ZXJ5d2hlcmUsIGFuZCB0aGlzIGlzIHdoZXJlIHRoYXQgc2VuZG1zZyBvcGVyYXRpb24gbGl2ZXMsIHNvIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmluYWxseSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gWWVzISBDb3JlIG5ldHdvcmsgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBpdCBoYW5kbGVzIElQdjYsIGlzIGFic29sdXRlbHkgYSBwcmltZSB0YXJnZXQuIEFueSBzdWJ0bGUgYnVnIGNhbiBoYXZlIGZhci1yZWFjaGluZyBlZmZlY3RzLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIGZvciBgbmV0L2lwdjYvdWRwLmNgIGFuZCBzcGVjaWZpY2FsbHkgYHVkcHY2X3NlbmRtc2dgLiBUaW1lIHRvIHBva2UgYXJvdW5kIGluIGBuZXQvaXB2Ni9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTo0MC4wNDE4OTAyMzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjI4MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcXHRcXHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXFx0XFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDAuMDkyNTIzMjE3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTAyMDMxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaXB2Ni15YCB0aGluZyBpcyBnZXR0aW5nIGNvbXBpbGVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIEl0J3MgcHJldHR5IHN0YW5kYXJkIHByb2NlZHVyZTsgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NiBzdXBwb3J0IHdpdGhpbiB0aGUga2VybmVsIGlzIGdvaW5nIHRvIGJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcywgb2JqZWN0IGZpbGUgbGlzdHMsIGFuZCBob3BlZnVsbHkgc29tZSBjbGV2ZXIgdXNlIG9mIG1ha2UgdmFyaWFibGVzLiBIb3BlZnVsbHkgaXQgd2lsbCBiZSBlYXNpbHkgcmVhZGFibGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBJUHY2IHN1YnN5c3RlbSwgc28gSSdtIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIGNvbXBsZXhpdHksIGJ1dCBub3RoaW5nIEkgY2FuJ3QgaGFuZGxlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgaW5zaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDIuMjAyNzI5MDM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVDYpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxuICAxNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlwdjYtJChDT05GSUdfWEZSTSkgKz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXFxcXG4gIDE5OlxcdFxcdHhmcm02X291dHB1dC5vIHhmcm02X3Byb3RvY29sLm9cXG4gIDIwOlxcdGlwdjYtJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIub1xcbiAgMjE6XFx0aXB2Ni0kKENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUykgKz0gZmliNl9ydWxlcy5vXFxuICAyMjpcXHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjM6XFx0aXB2Ni0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAyNDpcXHRpcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG4gIDI1OlxcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxuICAyNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSArPSBzZWc2X2htYWMub1xcbiAgMjc6XFx0aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4gIDI4OlxcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgKz0gaW9hbTZfaXB0dW5uZWwub1xcbiAgMjk6XFx0XFxuICAzMDpcXHRvYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxuICAzMTpcXHRvYmotJChDT05GSUdfSU5FVDZfRVNQKSArPSBlc3A2Lm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRCkgKz0gZXNwNl9vZmZsb2FkLm9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICs9IGlwY29tcDYub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMKSArPSB4ZnJtNl90dW5uZWwub1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgKz0gdHVubmVsNi5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSArPSBtaXA2Lm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhL1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIvXFxuICAzOTpcXHRcXG4gIDQwOlxcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgKz0gaXA2X3Z0aS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjM5OjQyLjIwMjgwODkzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc3Njc4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggYENPTkZJR19JUFY2YC4gV2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydD8gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgbmV0d29ya2luZyBvbmVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBuZXQvaXB2Ni9LY29uZmlnYCBkaXJlY3RseSwgb3IgbWF5YmUgZXZlbiB0aGUgbW9yZSBnZW5lcmFsIGBuZXQvS2NvbmZpZ2AgZmlsZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmVhdHVyZXMuIEknbSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGBDT05GSUdfSVBWNmAuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDUuNzgwNDg5NzI4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc3MjM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NDUuODQ4MjY3MzY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjg2NDUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgSVB2NiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIElQdjYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGluaXRpYWwgbGluZXMsIGFwcHJveGltYXRlbHkgdGhlIGZpcnN0IHR3ZW50eSBvciBzby4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgY29yZSwgdG9wLWxldmVsIHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgb3ZlcmFsbCBlbmFibGUvZGlzYWJsZSBzd2l0Y2ggZm9yIElQdjYsIHByb2JhYmx5IHNvbWUga2V5IGRlZmF1bHQgYmVoYXZpb3JzLCBtYXliZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29yayBvciBwbGF0Zm9ybSBmZWF0dXJlcy4uLiBJdOKAmXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCB0byB0aGUgSVB2NiBjb25maWd1cmF0aW9uIHRyZWUsIHNvIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgb2ZmZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NTAuOTE2OTE1NzgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVB2NiBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBWNlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IHlcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU3VwcG9ydCBmb3IgSVAgdmVyc2lvbiA2IChJUHY2KS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBJUHY2LCBzZWVcXG4gIDE0OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjZcXHUwMDNlLlxcbiAgMTU6XFx0XFx0ICBGb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgSVB2NiB1bmRlciBMaW51eCwgc2VlXFxuICAxNjpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcHY2LnJzdCBhbmQgcmVhZCB0aGUgSE9XVE8gYXRcXG4gIDE3OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL0hPV1RPL0xpbnV4K0lQdjYtSE9XVE8vXFx1MDAzZVxcbiAgMTg6XFx0XFxuICAxOTpcXHRpZiBJUFY2XFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxuICAyMjpcXHRcXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFJvdXRlciBQcmVmZXJlbmNlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byB0aGUgUm91dGVyXFxuICAyNTpcXHRcXHQgIEFkdmVydGlzZW1lbnQgbWVzc2FnZSB3aGljaCBpbXByb3ZlcyB0aGUgYWJpbGl0eSBvZiBob3N0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTo1MC45MTY5OTEwMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MTEzNzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgVURQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gYW5kIEkgc2VlIGBtZW51Y29uZmlnIElQVjZgIGhhcyBhIGJvb2xlYW4gZW50cnksIFwiVGhlIElQdjYgcHJvdG9jb2xcIi4gU3RhbmRhcmQgc3R1ZmYuIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFB2NiBzZW5kIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGVyZSBnaXZlcyBtZSBjb25maWRlbmNlIHRvIGxvb2sgZm9yIHRoZSByZWxldmFudCBjb2RlLCBzbyBJJ2xsIGRyaWxsIGRvd24gdG8gYG5ldC9pcHY2L3VkcC5jYC4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCB0aGUgbG93LWRvd24gb24gYHVkcHY2X3NlbmRtc2dgLiBJIG5lZWQgdG8gc2VlIHRoZSBkZWNsYXJhdGlvbiBhbmQsIGltcG9ydGFudGx5LCB3aGF0IHRoZSBzeW1ib2wgbmFtZSBpcy4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgY29kZSdzIHRoZXJlLCB1bmRlcnN0YW5kaW5nIGhvdyBpdCdzIGVuYWJsZWQgdmlhIHRoZSBjb25maWcsIGFuZCBnZXR0aW5nIHJlYWR5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzozOTo1My40MDgxMzE3NjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDQ3MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcHY2X3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuYz02MzE9aW50IGluZXQ2X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQwLVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjQxOlxcdHJldHVybiBJTkRJUkVDVF9DQUxMXzIocHJvdC1cXHUwMDNlc2VuZG1zZywgdGNwX3NlbmRtc2csIHVkcHY2X3NlbmRtc2csXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NDItXFx0XFx0XFx0ICAgICAgIHNrLCBtc2csIHNpemUpO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTctXFx0XFx0XFx0ICogYnV0IHRoZXJlIGlzIHN0aWxsIGEgcmFjZS4gIFNlZSB0aGUgbG9ja2xlc3MgcGF0aFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo2MTg6XFx0XFx0XFx0ICogaW4gdWRwdjZfc2VuZG1zZygpIGFuZCBpcHY2X2xvY2FsX3J4cG10dSgpLlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTktXFx0XFx0XFx0ICovXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xMzU2PXN0YXRpYyBpbnQgdWRwX3Y2X3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTYgKmZsNixcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTEzNzMtXFx0dWgtXFx1MDAzZWRlc3QgPSBmbDYtXFx1MDAzZWZsNl9kcG9ydDtcXG5uZXQvaXB2Ni91ZHAuYzoxMzc0OlxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcHY2X3NlbmRtc2cuICovXFxubmV0L2lwdjYvdWRwLmMtMTM3NS1cXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE0Mzg9c3RhdGljIGludCB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xNDU4LVxcbm5ldC9pcHY2L3VkcC5jOjE0NTk6aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L2lwdjYvdWRwLmMtMTQ2MC17XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xNzc5LX1cXG5uZXQvaXB2Ni91ZHAuYzoxNzgwOkVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZyk7XFxubmV0L2lwdjYvdWRwLmMtMTc4MS1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5MDA9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTExLVxcdC5nZXRzb2Nrb3B0XFx0XFx0PSB1ZHB2Nl9nZXRzb2Nrb3B0LFxcbm5ldC9pcHY2L3VkcC5jOjE5MTI6XFx0LnNlbmRtc2dcXHRcXHQ9IHVkcHY2X3NlbmRtc2csXFxubmV0L2lwdjYvdWRwLmMtMTkxMy1cXHQucmVjdm1zZ1xcdFxcdD0gdWRwdjZfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6Mzk6NTMuNTA0MTg0OTIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NzAwNDU5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURQdjYgU2VuZCBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGRpZmYgb25seSB0b3VjaGVzIGB1ZHB2Nl9zZW5kbXNnYCBpbiBgbmV0L2lwdjYvdWRwLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIGZvY3VzIHNpZ25pZmljYW50bHkuIEknbSBub3cgdmVyaWZ5aW5nIHRoYXQgSSd2ZSBpZGVudGlmaWVkIGFsbCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgc2VlbXMgdGhpcyBpcyB0aGUgb25seSByZWxldmFudCBvbmUuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBgdWRwdjZfc2VuZG1zZ2AgYSBzdGF0aWMgZnVuY3Rpb24/IEEgcXVpY2sgY2hlY2sgcmV2ZWFscyBpdCdzICpub3QqIHN0YXRpYywgc2luY2UgaXQncyBleHBvcnRlZCB2aWEgYEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZylgLiBUaGF0J3MgaW1wb3J0YW50OyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IGZpbGUuXG5cbk5vdywgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3MgYSBob3QgcGF0aC4gU2luY2UgaXQncyBhbiBBUEkgZW50cnlwb2ludCAoYHNlbmRtc2dgKSwgSSBkb24ndCBiZWxpZXZlIHRoaXMgdG8gYmUgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBUaGlzIGlzIHZhbHVhYmxlIGNvbnRleHQgZm9yIGFueSBmdXp6aW5nIGVmZm9ydHMuXG5cbkZpbmFsbHksIEkgbm90ZSB0aGUgYElQVjZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBPYnZpb3VzbHkgcmVsZXZhbnQgZ2l2ZW4gdGhlIGZpbGUgcGF0aC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBhY2NvdW50ZWQgZm9yLlxuXG5JJ20gcmVhZHkgdG8gbW92ZSBvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTM1LCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDoyMC4yMDQ2NDcxODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzc3NDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcHY2X3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB1ZHB2Nl9zZW5kbXNnKCkgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBzb2NrZXQgbG9jayB0byBlbnN1cmUgdGhlIHNvY2tldCBmYW1pbHkgaXMgc3RpbGwgQUZfSU5FVDYsIGhhbmRsaW5nIHBvdGVudGlhbCBjb25jdXJyZW50IGZhbWlseSBjaGFuZ2VzIChlLmcuIElQVjZfQUREUkZPUk0pLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIElQdjYgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHVkcHY2X3NlbmRtc2coKSBhZnRlciBhY3F1aXJpbmcgdGhlIHNvY2tldCBsb2NrIHRvIGVuc3VyZSB0aGUgc29ja2V0IGZhbWlseSBpcyBzdGlsbCBBRl9JTkVUNiwgaGFuZGxpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgZmFtaWx5IGNoYW5nZXMgKGUuZy4gSVBWNl9BRERSRk9STSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgSVB2NiBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDoyMC4yODg0Mjc2MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzU5MTA1MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6MjAuMjg4ODk4NTg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODAzNTg2Mjg3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGB1ZHB2Nl9zZW5kbXNnYCB1bmRlciBgbG9ja19zb2NrKHNrKWAgdG8gZW5zdXJlIGBzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2YC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgd2hlcmUgYW5vdGhlciB0aHJlYWQgY29udmVydHMgdGhlIHNvY2tldCB0byBgQUZfSU5FVGAgdmlhIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0LCBhdm9pZGluZyBzdWJzZXF1ZW50IHByb3RvY29sIG1pc21hdGNoIGFuZCB0eXBlIGNvbmZ1c2lvbiAvIGNvcnJ1cHRpb24gaXNzdWVzIGluIGBpcDZfYXBwZW5kX2RhdGFgLlxcblxcblRoZSBjaGVjayByZWFkcyB0aGUgd2VsbC1pbml0aWFsaXplZCBgc2stXFx1MDAzZXNrX2ZhbWlseWAgZmllbGQgb2YgYHN0cnVjdCBzb2NrYCBhbmQgZXhpdHMgZWFybHkgd2l0aCBgLUVBRk5PU1VQUE9SVGAuIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdHlwZS1jb25mdXNpb24gYnVncyByZXN1bHRpbmcgZnJvbSBtaXNzaW5nIHRoaXMgY2hlY2sgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTk1MmY2NzAwODVlMjc5MWY3ZjI4YzQ1NzViMDZjN2I4ZmMwOTRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6Mzk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXG5pbmRleCBmZDg3NTkwOGFjMGM2Li41NjZjNjM0YTVhNTk0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbisrKyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtMTcxNiw2ICsxNzE2LDExIEBAIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0fVxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFx0aWYgKHVubGlrZWx5KHVwLVx1MDAzZXBlbmRpbmcpKSB7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqL1xuIFx0XHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDoyMC4yODg4OTk3NDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwNDc5MjIzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVURQdjYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5IGFuZCB3aGF0IHByb2JsZW0gaXQncyBhZGRyZXNzaW5nLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZTogYSBuZXcgY2hlY2sgd2l0aGluIGB1ZHB2Nl9zZW5kbXNnYC4gSXQncyBhIHF1aWNrIGNvbmRpdGlvbmFsIHN0YXRlbWVudDogYGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKWAuIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2h5IGFyZSB3ZSBjaGVja2luZyB0aGUgYWRkcmVzcyBmYW1pbHkgd2l0aGluIGEgZnVuY3Rpb24gbmFtZWQgYHVkcHY2X3NlbmRtc2dgPyBTaG91bGRuJ3QgdGhpcyAqb25seSogYmUgZGVhbGluZyB3aXRoIElQdjYgc29ja2V0cz9cblxuVGhlIGFkZGl0aW9uIG9mIHRoaXMgY2hlY2sgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnIG9yIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBpbmNvcnJlY3Qgc29ja2V0IGZhbWlseSB1c2FnZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBub3cgZ3VhcmRpbmcgYWdhaW5zdCBhIGNvbmRpdGlvbiB3aGVyZSBhIG5vbi1JUHY2IHNvY2tldCBtaWdodCBiZSBwYXNzZWQgdG8gdGhlIGB1ZHB2Nl9zZW5kbXNnYCBmdW5jdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHdoZXJlIHlvdSBjYW4gZ2V0IGEgbmFzdHkgYnVnLlxuXG5UaGUgY29tbWVudCBcIndoaWNoIGlzIGFuIGV2aWRlbnQgYXBwbGljYXRpb24gYnVnXCIgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IHRoZSBjb2RlICp3YXNuJ3QqIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiwgYW5kIHRoZSBwcmVzZW5jZSBvZiBzdWNoIGEgY29uZGl0aW9uIGlzIGxpa2VseSBkdWUgdG8gYW4gZXJyb3IgdXBzdHJlYW0sIG1heWJlIGluIHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGlzIHNvY2tldC4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IGEgZGVmZW5zaXZlIG1lYXN1cmUsIGF0dGVtcHRpbmcgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gY3Jhc2hpbmcsIG9yIHJldHVybmluZyBhbiBpbmNvcnJlY3QgZXJyb3IuIFRoZSBmYWN0IHRoYXQgdGhlIGNoZWNrIHVzZXMgYHVubGlrZWx5KClgIGhpbnRzIHRoaXMgY29uZGl0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHJhcmUsIHByb2JhYmx5IHRyaWdnZXJlZCBieSBhIHByb2dyYW1taW5nIG1pc3Rha2UuIFRoZSBcImxvY2tfc29jayhzaylcIiBhbmQgXCJyZWxlYXNlX3NvY2soc2spXCIgY2FsbHMgc3VnZ2VzdCB0aGUgc29ja2V0IGlzIGFscmVhZHkgbG9ja2VkLCBzbyB0aGlzIGlzIGFub3RoZXIgZGF0YSBzYWZldHkgY2hlY2sgdGhhdCB3ZSBzaG91bGQgYmUgdGFraW5nIG5vdGljZSBvZi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgcmV2aWV3IHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lIDE3MTYgdG8gc2VlIGhvdyBgdXAtXHUwMDNlcGVuZGluZ2AgaXMgdXNlZCBhbmQgaG93IHRoaXMgbmV3IGBBRl9JTkVUNmAgY2hlY2sgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIGxvZ2ljLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgaG93IHRoaXMgcGF0Y2ggbWl0aWdhdGVzIHRoZW0uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGlmIHRoaXMgYEVBRk5PU1VQUE9SVGAgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIsIGFuZCBpZiB0aGlzIGNvdWxkIGJlIGFuIGV4cGxvaXQgdmVjdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6NDcuMzM2ODI0ODI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjgwOlxcdFxcdFxcdGZsNi1cXHUwMDNlZmxvd2k2X29pZiA9IFJFQURfT05DRShucC1cXHUwMDNlbWNhc3Rfb2lmKTtcXG4xNjgxOlxcdFxcdFxcdGNvbm5lY3RlZCA9IGZhbHNlO1xcbjE2ODI6XFx0XFx0fSBlbHNlIGlmICghZmw2LVxcdTAwM2VmbG93aTZfb2lmKVxcbjE2ODM6XFx0XFx0XFx0Zmw2LVxcdTAwM2VmbG93aTZfb2lmID0gUkVBRF9PTkNFKG5wLVxcdTAwM2V1Y2FzdF9vaWYpO1xcbjE2ODQ6XFx0XFxuMTY4NTpcXHRcXHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTZfdG9fZmxvd2lfY29tbW9uKGZsNikpO1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRmbDYtXFx1MDAzZWZsb3dsYWJlbCA9IGlwNl9tYWtlX2Zsb3dpbmZvKGlwYzYudGNsYXNzLCBmbDYtXFx1MDAzZWZsb3dsYWJlbCk7XFxuMTY4ODpcXHRcXG4xNjg5OlxcdFxcdGRzdCA9IGlwNl9za19kc3RfbG9va3VwX2Zsb3coc2ssIGZsNiwgZmluYWxfcCwgY29ubmVjdGVkKTtcXG4xNjkwOlxcdFxcdGlmIChJU19FUlIoZHN0KSkge1xcbjE2OTE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkc3QpO1xcbjE2OTI6XFx0XFx0XFx0ZHN0ID0gTlVMTDtcXG4xNjkzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE2OTQ6XFx0XFx0fVxcbjE2OTU6XFx0XFxuMTY5NjpcXHRcXHRpZiAoaXBjNi5obGltaXQgXFx1MDAzYyAwKVxcbjE2OTc6XFx0XFx0XFx0aXBjNi5obGltaXQgPSBpcDZfc2tfZHN0X2hvcGxpbWl0KG5wLCBmbDYsIGRzdCk7XFxuMTY5ODpcXHRcXG4xNjk5OlxcdFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFnc1xcdTAwMjZNU0dfQ09ORklSTSlcXG4xNzAwOlxcdFxcdFxcdGdvdG8gZG9fY29uZmlybTtcXG4xNzAxOlxcdGJhY2tfZnJvbV9jb25maXJtOlxcbjE3MDI6XFx0XFxuMTcwMzpcXHRcXHQvKiBMb2NrbGVzcyBmYXN0IHBhdGggZm9yIHRoZSBub24tY29ya2luZyBjYXNlICovXFxuMTcwNDpcXHRcXHRpZiAoIWNvcmtyZXEpIHtcXG4xNzA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdFxcdHNrYiA9IGlwNl9tYWtlX3NrYihzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2csIHVsZW4sXFxuMTcwODpcXHRcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHVkcGhkciksIFxcdTAwMjZpcGM2LFxcbjE3MDk6XFx0XFx0XFx0XFx0XFx0ICAgZHN0X3J0Nl9pbmZvKGRzdCksXFxuMTcxMDpcXHRcXHRcXHRcXHRcXHQgICBtc2ctXFx1MDAzZW1zZ19mbGFncywgXFx1MDAyNmNvcmspO1xcbjE3MTE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbjE3MTI6XFx0XFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxcbjE3MTM6XFx0XFx0XFx0XFx0ZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgZmw2LCBcXHUwMDI2Y29yay5iYXNlKTtcXG4xNzE0OlxcdFxcdFxcdC8qIGlwNl9tYWtlX3NrYiBzdGVhbHMgZHN0IHJlZmVyZW5jZSAqL1xcbjE3MTU6XFx0XFx0XFx0Z290byBvdXRfbm9fZHN0O1xcbjE3MTY6XFx0XFx0fVxcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjE3MTk6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxuMTcyMDpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3MjE6XFx0XFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4xNzIyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MjM6XFx0XFx0fVxcbjE3MjQ6XFx0XFx0aWYgKHVubGlrZWx5KHVwLVxcdTAwM2VwZW5kaW5nKSkge1xcbjE3MjU6XFx0XFx0XFx0LyogVGhlIHNvY2tldCBpcyBhbHJlYWR5IGNvcmtlZCB3aGlsZSBwcmVwYXJpbmcgaXQuICovXFxuMTcyNjpcXHRcXHRcXHQvKiAuLi4gd2hpY2ggaXMgYW4gZXZpZGVudCBhcHBsaWNhdGlvbiBidWcuIC0tQU5LICovXFxuMTcyNzpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3Mjg6XFx0XFxuMTcyOTpcXHRcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJ1ZHAgY29yayBhcHAgYnVnIDJcXFxcblxcXCIpO1xcbjE3MzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNzMxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRcXHRXUklURV9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nLCBBRl9JTkVUNik7XFxuMTczNTpcXHRcXG4xNzM2OlxcdGRvX2FwcGVuZF9kYXRhOlxcbjE3Mzc6XFx0XFx0dXAtXFx1MDAzZWxlbiArPSB1bGVuO1xcbjE3Mzg6XFx0XFx0ZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBpcF9nZW5lcmljX2dldGZyYWcsIG1zZywgdWxlbixcXG4xNzM5OlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgXFx1MDAyNmlwYzYsIGZsNixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6NDcuMzM2OTM4NjU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MjUxODM0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gdHJ5aW5nIHRvIGRlYnVnIG9yIHVuZGVyc3RhbmQgYHVkcHY2X3NlbmRtc2dgOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHVkcHY2X3NlbmRtc2dgIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gd2l0aGluIGB1ZHB2Nl9zZW5kbXNnYC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHBvdGVudGlhbCBpc3N1ZXMsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGxpbmVzICpiZWZvcmUqIGFuZCAqYWZ0ZXIqIHRoZSBzZWN0aW9uIEknbSBmb2N1c2luZyBvbi4gSXQncyBhbG1vc3QgbmV2ZXIgaXNvbGF0ZWQuIEknbGwgcmVhZCB0aHJvdWdoIGxpbmVzIDE1MDAgdG8gMTY4MC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIGZvciBhbmFseXNpcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgcGFyYW1ldGVycyBhcmUgc2V0LCBlcnJvciBoYW5kbGluZyBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgd29ya2Zsb3cuIExldCdzIHN0YXJ0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MDo1Ni4xNjIxMjQ2NjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTAwOlxcdFxcdFxcdFxcdGdvdG8gZG9fdWRwX3NlbmRtc2c7XFxuMTUwMTpcXHRcXHRcXHRjYXNlIEFGX1VOU1BFQzpcXG4xNTAyOlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWUgPSBzaW42ID0gTlVMTDtcXG4xNTAzOlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gPSBhZGRyX2xlbiA9IDA7XFxuMTUwNDpcXHRcXHRcXHRcXHRkYWRkciA9IE5VTEw7XFxuMTUwNTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTA2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTUwNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTA4OlxcdFxcdFxcdH1cXG4xNTA5OlxcdFxcdH0gZWxzZSBpZiAoIVJFQURfT05DRSh1cC1cXHUwMDNlcGVuZGluZykpIHtcXG4xNTEwOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbjE1MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XFxuMTUxMjpcXHRcXHRcXHRkYWRkciA9IFxcdTAwMjZzay1cXHUwMDNlc2tfdjZfZGFkZHI7XFxuMTUxMzpcXHRcXHR9IGVsc2VcXG4xNTE0OlxcdFxcdFxcdGRhZGRyID0gTlVMTDtcXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0aWYgKGRhZGRyKSB7XFxuMTUxNzpcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKGRhZGRyKSkge1xcbjE1MTg6XFx0XFx0XFx0XFx0c3RydWN0IHNvY2thZGRyX2luIHNpbjtcXG4xNTE5OlxcdFxcdFxcdFxcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4xNTIwOlxcdFxcdFxcdFxcdHNpbi5zaW5fcG9ydCA9IHNpbjYgPyBzaW42LVxcdTAwM2VzaW42X3BvcnQgOiBpbmV0LVxcdTAwM2VpbmV0X2Rwb3J0O1xcbjE1MjE6XFx0XFx0XFx0XFx0c2luLnNpbl9hZGRyLnNfYWRkciA9IGRhZGRyLVxcdTAwM2VzNl9hZGRyMzJbM107XFxuMTUyMjpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lID0gXFx1MDAyNnNpbjtcXG4xNTIzOlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gPSBzaXplb2Yoc2luKTtcXG4xNTI0OlxcdGRvX3VkcF9zZW5kbXNnOlxcbjE1MjU6XFx0XFx0XFx0XFx0ZXJyID0gaXB2Nl9vbmx5X3NvY2soc2spID9cXG4xNTI2OlxcdFxcdFxcdFxcdFxcdC1FTkVUVU5SRUFDSCA6IHVkcF9zZW5kbXNnKHNrLCBtc2csIGxlbik7XFxuMTUyNzpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lID0gc2luNjtcXG4xNTI4OlxcdFxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX25hbWVsZW4gPSBhZGRyX2xlbjtcXG4xNTI5OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMDpcXHRcXHRcXHR9XFxuMTUzMTpcXHRcXHR9XFxuMTUzMjpcXHRcXG4xNTMzOlxcdFxcdC8qIFJvdWdoIGNoZWNrIG9uIGFyaXRobWV0aWMgb3ZlcmZsb3csXFxuMTUzNDpcXHRcXHQgICBiZXR0ZXIgY2hlY2sgaXMgbWFkZSBpbiBpcDZfYXBwZW5kX2RhdGEoKS5cXG4xNTM1OlxcdFxcdCAgICovXFxuMTUzNjpcXHRcXHRpZiAobGVuIFxcdTAwM2UgSU5UX01BWCAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSlcXG4xNTM3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdGlmIChSRUFEX09OQ0UodXAtXFx1MDAzZXBlbmRpbmcpKSB7XFxuMTU0MDpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nKSA9PSBBRl9JTkVUKVxcbjE1NDE6XFx0XFx0XFx0XFx0cmV0dXJuIHVkcF9zZW5kbXNnKHNrLCBtc2csIGxlbik7XFxuMTU0MjpcXHRcXHRcXHQvKlxcbjE1NDM6XFx0XFx0XFx0ICogVGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzLlxcbjE1NDQ6XFx0XFx0XFx0ICogVGhlIHNvY2tldCBsb2NrIG11c3QgYmUgaGVsZCB3aGlsZSBpdCdzIGNvcmtlZC5cXG4xNTQ1OlxcdFxcdFxcdCAqL1xcbjE1NDY6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xNTQ3OlxcdFxcdFxcdGlmIChsaWtlbHkodXAtXFx1MDAzZXBlbmRpbmcpKSB7XFxuMTU0ODpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkodXAtXFx1MDAzZXBlbmRpbmcgIT0gQUZfSU5FVDYpKSB7XFxuMTU0OTpcXHRcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE1NTA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuMTU1MTpcXHRcXHRcXHRcXHR9XFxuMTU1MjpcXHRcXHRcXHRcXHRkc3QgPSBOVUxMO1xcbjE1NTM6XFx0XFx0XFx0XFx0Z290byBkb19hcHBlbmRfZGF0YTtcXG4xNTU0OlxcdFxcdFxcdH1cXG4xNTU1OlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTU1NjpcXHRcXHR9XFxuMTU1NzpcXHRcXHR1bGVuICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4xNTU4OlxcdFxcbjE1NTk6XFx0XFx0bWVtc2V0KGZsNiwgMCwgc2l6ZW9mKCpmbDYpKTtcXG4xNTYwOlxcdFxcbjE1NjE6XFx0XFx0aWYgKHNpbjYpIHtcXG4xNTYyOlxcdFxcdFxcdGlmIChzaW42LVxcdTAwM2VzaW42X3BvcnQgPT0gMClcXG4xNTYzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1NjQ6XFx0XFxuMTU2NTpcXHRcXHRcXHRmbDYtXFx1MDAzZWZsNl9kcG9ydCA9IHNpbjYtXFx1MDAzZXNpbjZfcG9ydDtcXG4xNTY2OlxcdFxcdFxcdGRhZGRyID0gXFx1MDAyNnNpbjYtXFx1MDAzZXNpbjZfYWRkcjtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0XFx0XFx0aWYgKGluZXQ2X3Rlc3RfYml0KFNOREZMT1csIHNrKSkge1xcbjE1Njk6XFx0XFx0XFx0XFx0Zmw2LVxcdTAwM2VmbG93bGFiZWwgPSBzaW42LVxcdTAwM2VzaW42X2Zsb3dpbmZvXFx1MDAyNklQVjZfRkxPV0lORk9fTUFTSztcXG4xNTcwOlxcdFxcdFxcdFxcdGlmIChmbDYtXFx1MDAzZWZsb3dsYWJlbCBcXHUwMDI2IElQVjZfRkxPV0xBQkVMX01BU0spIHtcXG4xNTcxOlxcdFxcdFxcdFxcdFxcdGZsb3dsYWJlbCA9IGZsNl9zb2NrX2xvb2t1cChzaywgZmw2LVxcdTAwM2VmbG93bGFiZWwpO1xcbjE1NzI6XFx0XFx0XFx0XFx0XFx0aWYgKElTX0VSUihmbG93bGFiZWwpKVxcbjE1NzM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU3NDpcXHRcXHRcXHRcXHR9XFxuMTU3NTpcXHRcXHRcXHR9XFxuMTU3NjpcXHRcXG4xNTc3OlxcdFxcdFxcdC8qXFxuMTU3ODpcXHRcXHRcXHQgKiBPdGhlcndpc2UgaXQgd2lsbCBiZSBkaWZmaWN1bHQgdG8gbWFpbnRhaW5cXG4xNTc5OlxcdFxcdFxcdCAqIHNrLVxcdTAwM2Vza19kc3RfY2FjaGUuXFxuMTU4MDpcXHRcXHRcXHQgKi9cXG4xNTgxOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2XFxuMTU4MjpcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKGRhZGRyLCBcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSlcXG4xNTgzOlxcdFxcdFxcdFxcdGRhZGRyID0gXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcjtcXG4xNTg0OlxcdFxcbjE1ODU6XFx0XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSBcXHUwMDI2XFx1MDAyNlxcbjE1ODY6XFx0XFx0XFx0ICAgIHNpbjYtXFx1MDAzZXNpbjZfc2NvcGVfaWQgXFx1MDAyNlxcdTAwMjZcXG4xNTg3OlxcdFxcdFxcdCAgICBfX2lwdjZfYWRkcl9uZWVkc19zY29wZV9pZChfX2lwdjZfYWRkcl90eXBlKGRhZGRyKSkpXFxuMTU4ODpcXHRcXHRcXHRcXHRmbDYtXFx1MDAzZWZsb3dpNl9vaWYgPSBzaW42LVxcdTAwM2VzaW42X3Njb3BlX2lkO1xcbjE1ODk6XFx0XFx0fSBlbHNlIHtcXG4xNTkwOlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbjE1OTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XFxuMTU5MjpcXHRcXG4xNTkzOlxcdFxcdFxcdGZsNi1cXHUwMDNlZmw2X2Rwb3J0ID0gaW5ldC1cXHUwMDNlaW5ldF9kcG9ydDtcXG4xNTk0OlxcdFxcdFxcdGRhZGRyID0gXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcjtcXG4xNTk1OlxcdFxcdFxcdGZsNi1cXHUwMDNlZmxvd2xhYmVsID0gbnAtXFx1MDAzZWZsb3dfbGFiZWw7XFxuMTU5NjpcXHRcXHRcXHRjb25uZWN0ZWQgPSB0cnVlO1xcbjE1OTc6XFx0XFx0fVxcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHRpZiAoIWZsNi1cXHUwMDNlZmxvd2k2X29pZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDA6NTYuMTYyMjU5MDgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODE5NTM0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJUHY2IFNvY2tldCBBbm9tYWx5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25kaXRpb246IGBzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDZgIHdpdGhpbiBgdWRwdjZfc2VuZG1zZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgZXZlbiBoZXJlPyBXaGF0IGNpcmN1bXN0YW5jZXMgd291bGQgY2F1c2UgYSBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSB0byAqbm90KiBiZSBJUHY2IHdpdGhpbiBhbiBJUHY2LXNwZWNpZmljIGZ1bmN0aW9uPyBUaGF0J3MganVzdCBiaXphcnJlLiBcblxuV2FpdCBhIG1pbnV0ZSwgaXMgaXQgcG9zc2libGUgdGhlIGFkZHJlc3MgZmFtaWx5IGNoYW5nZXMgKmFmdGVyKiB0aGUgc29ja2V0IGlzIGNyZWF0ZWQ/IFBlcmhhcHMgYSBjb25uZWN0ZWQgQUZfSU5FVCBzb2NrZXQgaXMgc29tZWhvdyBiZWluZyBwYXNzZWQgdG8gYHVkcHY2X3NlbmRtc2dgPyBPciBtYXliZSBpdCdzIGJlZW4gZGlzY29ubmVjdGVkPyBXaGF0IGlmIGFuIEFGX0lORVQgc29ja2V0IGlzIG1pc3Rha2VubHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBPciBjb3VsZCB0aGVyZSBiZSBzb21lIGtpbmQgb2YgYWRkcmVzcyBmYW1pbHkgY29udmVyc2lvbiBoYXBwZW5pbmcsIGxpa2UgYW4gQUZfSU5FVDYgc29ja2V0IGJlaW5nIGRvd25ncmFkZWQgc29tZWhvdz8gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBhIHJlYWxseSBzdWJ0bGUgYnVnLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gTGV0IG1lIGNoZWNrIGBpbmV0X3NlbmRtc2dgLCBgaW5ldDZfc2VuZG1zZ2AsIGFuZCBgdWRwX3NlbmRtc2dgIHRvIHNlZSBob3cgdGhlIHNvY2tldCdzIGZhbWlseSBpcyBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgcnVuIGEgcXVpY2sgYGdpdCBncmVwYCB3aXRoaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgc2tfZmFtaWx5ICE9IEFGX0lORVQ2YCBvciBzaW1pbGFyIGNoZWNrcy4gSG9wZWZ1bGx5LCBJIGNhbiBzZWUgaG93IHRoaXMgY2hlY2sgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MTowMC41NDQyMTg4MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzQ5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2ZhbWlseSAhPSBBRl9JTkVUNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTE2MTU9aW50IHNrX3JldXNlcG9ydF9hdHRhY2hfYnBmKHUzMiB1ZmQsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE2MzktXFx0XFx0ICAgIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjQwOlxcdFxcdCAgICAgc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xNjQxLVxcdFxcdFxcdGVyciA9IC1FTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU3NTA9c3RhdGljIGludCBzb2xfaXB2Nl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01NzUzLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo1NzU0OlxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03ODQwPUJQRl9DQUxMXzUoYnBmX3RjcF9jaGVja19zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3ODgxOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc4ODItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03OTEzPUJQRl9DQUxMXzUoYnBmX3RjcF9nZW5fc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6Nzk1MTpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNilcXG5uZXQvY29yZS9maWx0ZXIuYy03OTUyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NTItXFx0ICovXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU1MzpcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU1NC1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE0NTk9aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xNzE4LVxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjYvdWRwLmM6MTcxOTpcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpIHtcXG5uZXQvaXB2Ni91ZHAuYy0xNzIwLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYz0xMjQwPXN0YXRpYyBpbnQga2NtX2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpjc29jayxcXG4tLVxcbm5ldC9rY20va2Ntc29jay5jLTEyNjItXFx0LyogT25seSBhbGxvdyBUQ1Agc29ja2V0cyB0byBiZSBhdHRhY2hlZCBmb3Igbm93ICovXFxubmV0L2tjbS9rY21zb2NrLmM6MTI2MzpcXHRpZiAoKGNzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgY3NrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpIHx8XFxubmV0L2tjbS9rY21zb2NrLmMtMTI2NC1cXHQgICAgY3NrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkge1xcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYz0xMTI5PWludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2Ny1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmM6MTE2ODpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikge1xcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMtMTE2OS1cXHRcXHRcXHRyZXRfdmFsID0gLUVBRk5PU1VQUE9SVDtcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYz0xOT1zc2l6ZV90IGRvX3VkcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2tldCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jLTI1LVxcdFxcdGlmIChzYS1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxubmV0L3J4cnBjL291dHB1dC5jOjI2OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxubmV0L3J4cnBjL291dHB1dC5jLTI3LVxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIkFGX0lORVQ2IGFkZHJlc3Mgb24gQUZfSU5FVCBzb2NrZXRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MTowMC42MDg1NzQwNDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MTk0MzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmdW5jdGlvbiBhbmQgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgaGFwcGVuaW5nIGF0IGxpbmUgNTUyLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBwcm9iYWJseSBpbiB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZSwgbmVhciB0aGF0IGxpbmUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvZiB0aGUgSVB2NiBzb2NrZXQgb3B0aW9ucyBiZWluZyBzZXQsIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBhbmQgaG93IHRob3NlIHNldHRpbmdzIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSB2YXJpb3VzIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBjb3VsZCBiZSBpbnZvbHZlZCwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlbSBhdCB0aGlzIGxldmVsLiBHb3R0YSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNvY2tldCBvcHRpb25zIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIFRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo0MTowMy41ODA1MTk4OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdFxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXFxuIDU0MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcXG4gNTQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1NDU6XFx0XFx0fVxcbiA1NDY6XFx0XFx0fVxcbiA1NDc6XFx0XFxuIDU0ODpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdC8qIEFub3RoZXIgdGhyZWFkIGhhcyBjb252ZXJ0ZWQgdGhlIHNvY2tldCBpbnRvIElQdjQgd2l0aFxcbiA1NTE6XFx0XFx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXFxuIDU1MjpcXHRcXHQgKi9cXG4gNTUzOlxcdFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KSlcXG4gNTU0OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA1NTU6XFx0XFxuIDU1NjpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxcbiA1NTk6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA1NjA6XFx0XFx0XFx0XFx0Z290byBlX2ludmFsO1xcbiA1NjE6XFx0XFx0XFx0aWYgKHZhbCA9PSBQRl9JTkVUKSB7XFxuIDU2MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19SQVcpXFxuIDU2MzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTY0OlxcdFxcbiA1NjU6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xcbiA1NjY6XFx0XFx0XFx0XFx0XFx0aWYgKHVkcF9zayhzayktXFx1MDAzZXBlbmRpbmcgPT0gQUZfSU5FVDYpIHtcXG4gNTY3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHYgPSAtRUJVU1k7XFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDE6MDMuNTgwNjE2OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkxMjg3NjU2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgU29ja2V0IFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYHVkcHY2X3NlbmRtc2dgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3MgY2xpY2tlZC4gSXQgbG9va3MgbGlrZSBgSVBWNl9BRERSRk9STWAgbWlnaHQgYmUgYWJsZSB0byBjb25jdXJyZW50bHkgY2hhbmdlIGEgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHksIHNwZWNpZmljYWxseSBmcm9tIElQdjYgdG8gSVB2NC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuXG5cbkkgc2VlIHRoYXQgYmVmb3JlIHRoZSBgbG9ja19zb2NrKHNrKWAgY2FsbCwgaXQncyBwb3NzaWJsZSB0byB1c2UgYHNldHNvY2tvcHQoSVBWNl9BRERSRk9STSlgIHRvIHN3aXRjaCB0aGUgc29ja2V0IGZyb20gQUZfSU5FVDYgdG8gQUZfSU5FVC4gVGhlbiwgYHVkcHY2X3NlbmRtc2dgIGxvY2tzIHRoZSBzb2NrZXQsIHNldHMgYFdSSVRFX09OQ0UodXAtXHUwMDNlcGVuZGluZywgQUZfSU5FVDYpO2AsIGFuZCBnb2VzIG9uIHRvIGNhbGwgYGlwNl9hcHBlbmRfZGF0YSguLi4pYCBhbmQgdGhlIHJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGhhcHBlbnMgKmFmdGVyKiB0aGUgc29ja2V0IGlzIGxvY2tlZCBpZiB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgbm8gbG9uZ2VyIEFGX0lORVQ2PyBUaGF04oCZcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBtaWdodCBiZS5cblxuVGhlIHBhdGNoIHByb3ZpZGVzIHNvbWUgbmV3IGNvZGUgdGhhdCBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBpc3N1ZS4gSXQgY2hlY2tzIGlmIGBzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDZgICphZnRlciogYGxvY2tfc29jayhzaylgLiBJZiBpdCdzIG5vdCBJUHY2LCBpdCByZWxlYXNlcyB0aGUgc29ja2V0LCByZXR1cm5zIGAtRUFGTk9TVVBQT1JUYCwgYW5kIGdvZXMgdG8gYG91dGAuIFNlZW1zIGxpa2UgaXQncyB0cnlpbmcgdG8gbWl0aWdhdGUgdGhpcyBleGFjdCByYWNlIGNvbmRpdGlvbiwgd2hpY2ggaXMgZ29vZC5cblxuTm93LCBJIG5lZWQgdG8gdHJhY2Ugd2hhdCBoYXBwZW5zIHdoZW4gd2UgYGdvdG8gb3V0O2AgaW4gYHVkcHY2X3NlbmRtc2dgLiBLbm93aW5nIHRoZSBcIm91dFwiIHBhdGggd2lsbCB0ZWxsIG1lIGlmIHRoZSBzb2NrZXQgaXMgcHJvcGVybHkgY2xlYW5lZCB1cCBvciB3aGV0aGVyIGFuIGluY29tcGxldGUgc3RhdGUgaXMgbGVmdCBiZWhpbmQuIFRoaXMgd2lsbCBkaWN0YXRlIGlmIHRoZSBmaXggaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjQxOjMyLjcwOTM4NTIxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc1MDpcXHRcXHRcXHRlcnIgPSBpbmV0Nl90ZXN0X2JpdChSRUNWRVJSNiwgc2spID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7XFxuMTc1MTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE3NTI6XFx0XFxuMTc1MzpcXHRvdXQ6XFxuMTc1NDpcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcbjE3NTU6XFx0b3V0X25vX2RzdDpcXG4xNzU2OlxcdFxcdGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTtcXG4xNzU3OlxcdFxcdHR4b3B0X3B1dChvcHRfdG9fZnJlZSk7XFxuMTc1ODpcXHRcXHRpZiAoIWVycilcXG4xNzU5OlxcdFxcdFxcdHJldHVybiBsZW47XFxuMTc2MDpcXHRcXHQvKlxcbjE3NjE6XFx0XFx0ICogRU5PQlVGUyA9IG5vIGtlcm5lbCBtZW0sIFNPQ0tfTk9TUEFDRSA9IG5vIHNuZGJ1ZiBzcGFjZS4gIFJlcG9ydGluZ1xcbjE3NjI6XFx0XFx0ICogRU5PQlVGUyBtaWdodCBub3QgYmUgZ29vZCAoaXQncyBub3QgdHVuYWJsZSBwZXIgc2UpLCBidXQgb3RoZXJ3aXNlXFxuMTc2MzpcXHRcXHQgKiB3ZSBkb24ndCBoYXZlIGEgZ29vZCBzdGF0aXN0aWMgKElwT3V0RGlzY2FyZHMgYnV0IGl0IGNhbiBiZSB0b28gbWFueVxcbjE3NjQ6XFx0XFx0ICogdGhpbmdzKS4gIFdlIGNvdWxkIGFkZCBhbm90aGVyIG5ldyBzdGF0IGJ1dCBhdCBsZWFzdCBmb3Igbm93IHRoYXRcXG4xNzY1OlxcdFxcdCAqIHNlZW1zIGxpa2Ugb3ZlcmtpbGwuXFxuMTc2NjpcXHRcXHQgKi9cXG4xNzY3OlxcdFxcdGlmIChlcnIgPT0gLUVOT0JVRlMgfHwgdGVzdF9iaXQoU09DS19OT1NQQUNFLCBcXHUwMDI2c2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpKVxcbjE3Njg6XFx0XFx0XFx0VURQNl9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBVRFBfTUlCX1NOREJVRkVSUk9SUyk7XFxuMTc2OTpcXHRcXG4xNzcwOlxcdFxcdHJldHVybiBlcnI7XFxuMTc3MTpcXHRcXG4xNzcyOlxcdGRvX2NvbmZpcm06XFxuMTc3MzpcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfUFJPQkUpXFxuMTc3NDpcXHRcXHRcXHRkc3RfY29uZmlybV9uZWlnaChkc3QsIFxcdTAwMjZmbDYtXFx1MDAzZWRhZGRyKTtcXG4xNzc1OlxcdFxcdGlmICghKG1zZy1cXHUwMDNlbXNnX2ZsYWdzXFx1MDAyNk1TR19QUk9CRSkgfHwgbGVuKVxcbjE3NzY6XFx0XFx0XFx0Z290byBiYWNrX2Zyb21fY29uZmlybTtcXG4xNzc3OlxcdFxcdGVyciA9IDA7XFxuMTc3ODpcXHRcXHRnb3RvIG91dDtcXG4xNzc5OlxcdH1cXG4xNzgwOlxcdEVYUE9SVF9TWU1CT0wodWRwdjZfc2VuZG1zZyk7XFxuMTc4MTpcXHRcXG4xNzgyOlxcdHN0YXRpYyB2b2lkIHVkcHY2X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4xNzgzOlxcdHtcXG4xNzg0OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbjE3ODU6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuMTc4NjpcXHRcXG4xNzg3OlxcdFxcdGlmICghUkVBRF9PTkNFKHVwLVxcdTAwM2VwZW5kaW5nKSB8fCB1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxcbjE3ODg6XFx0XFx0XFx0cmV0dXJuO1xcbjE3ODk6XFx0XFxuMTc5MDpcXHRcXHRsb2NrX3NvY2soc2spO1xcbjE3OTE6XFx0XFx0aWYgKHVwLVxcdTAwM2VwZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICF1ZHBfdGVzdF9iaXQoQ09SSywgc2spKVxcbjE3OTI6XFx0XFx0XFx0dWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMoc2spO1xcbjE3OTM6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xNzk0OlxcdH1cXG4xNzk1OlxcdFxcbjE3OTY6XFx0c3RhdGljIHZvaWQgdWRwdjZfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4xNzk3OlxcdHtcXG4xNzk4OlxcdFxcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xcbjE3OTk6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDE6MzIuNzA5NTQzNDAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5Mzc5NjQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdDogS0FTQU4gdnMuIEtNU0FOKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24ndCwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmc6IGl0J3MgYWRkaW5nIGEgZGVmZW5zaXZlIGNoZWNrIHdpdGhpbiBgdWRwdjZfc2VuZG1zZygpYCAqYWZ0ZXIqIGBsb2NrX3NvY2soc2spYC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgYHNrLVx1MDAzZXNrX2ZhbWlseWAgaXMgYEFGX0lORVQ2YCwgYW5kIGlmIG5vdCwgcmVsZWFzZXMgdGhlIHNvY2tldCBhbmQgcmV0dXJucyBhbiBlcnJvci4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEFuZCBiZWZvcmUgSSBnZXQgYW55IGZ1cnRoZXIsIHRoZSBjbGVhbnVwIGlzIGdvaW5nIHRvIHJldHVybiBgLUVBRk5PU1VQUE9SVGAgd2hpY2ggd2lsbCBjYWxsIHRoZXNlIGltcG9ydGFudCBjbGVhbnVwIGFjdGlvbnM6IGBkc3RfcmVsZWFzZShkc3QpYCwgYGZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKWAsIGFuZCBgdHhvcHRfcHV0KG9wdF90b19mcmVlKWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHRoYXQgS01TQU4gaXMgdW5pcXVlbHkgcG9zaXRpb25lZCB0byBjYXRjaCwgYmV5b25kIHdoYXQgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBmaW5kPyBMZXQgbWUgZ28gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyoqIE5vcGUuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCB0b3VjaCBhbnkgZGF0YSB0aGF0IGlzIHBhc3NlZCBiYWNrIHRvIHVzZXItc3BhY2UgdmlhIG1ldGhvZHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBTS0IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMgb3IgQlBGIGJ1ZmZlcnMuIEl0J3MgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIHByb2Nlc3NpbmcuXG5cbjIuICAqKkRvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC4gYHNrLVx1MDAzZXNrX2ZhbWlseWAgaXMgcGFydCBvZiB0aGUgYHN0cnVjdCBzb2NrYCBzdHJ1Y3R1cmUsIGFuZCBpdCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSBzb2NrZXQgaXMgY3JlYXRlZC4gVGhhdCBmaWVsZCBpcyBub3QgdGhlIHNvdXJjZSBvZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhLCBpbiB0aGlzIGNvZGUgcGF0aC5cblxuMy4gICoqRG9lcyBpdCBjcmVhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8qKiBObywgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBjb21wbGljYXRlZCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBkb3duIHRoZSBsaW5lLlxuXG40LiAgKipEb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLCBpdCBkb2Vzbid0IHRvdWNoIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgb2YgYnVmZmVycy5cblxuVGhlIGJ1ZyB0aGlzIHBhdGNoIGZpeGVzIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudDogaXQgcHJldmVudHMgYHVkcHY2X3NlbmRtc2dgIGZyb20gcHJvY2VlZGluZyB3aXRoIElQdjYtc3BlY2lmaWMgb3BlcmF0aW9ucyBpZiB0aGUgc29ja2V0J3MgZmFtaWx5IGhhcyBiZWVuIGNvbmN1cnJlbnRseSBjaGFuZ2VkIHRvIGBBRl9JTkVUYCB2aWEgYElQVjZfQUREUkZPUk1gLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgcG90ZW50aWFsbHkgaGF2ZSBhIHR5cGUgY29uZnVzaW9uL3N0YXRlIG1pc21hdGNoL3VzZS1hZnRlci1mcmVlL2JhZCBjYXN0IGJldHdlZW4gYEFGX0lORVRgIGFuZCBgQUZfSU5FVDZgLiBUaG9zZSBraW5kcyBvZiBtZW1vcnkgYWNjZXNzIGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgc2FuaXRpemVycy5cblxuVGhpcyBwYXRjaCwgaW4gb3RoZXIgd29yZHMsIGRvZXNuJ3QgKmV4cG9zZSogb3IgKmludHJvZHVjZSogYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkLCBjcmVhdGVkLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gSXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBpc3N1ZSB0aGF0IGlzIGFscmVhZHkgbGlrZWx5IGRldGVjdGFibGUgYnkgc3RhbmRhcmQgdG9vbHMuIFRoZXJlZm9yZSwgdGhlIGNvbmNsdXNpb24gaGVyZSBpcyBwcmV0dHkgY2xlYXIuXG5cbkdpdmVuIHRoZSBjcml0ZXJpYSB0aGF0IEkgaGF2ZSwgYW5kIHdpdGggdGhlIFwiQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU5cIiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQsIHRoZSBydWxlIEkgbmVlZCB0byB0aGluayBhYm91dCBpcyBcIlRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sIExPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXCIgR2l2ZW4gdGhlIHBhdGNoIGFuZCBteSBhbmFseXNpcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgdGhhdCB3b3VsZCBiZSBmbGFnZ2VkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGF0IHJpc2ssIHNvIEkgYW0gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDAsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NDE6NDAuNjQ3NTEwMDE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgdWRwdjZfc2VuZG1zZ2AgdW5kZXIgYGxvY2tfc29jayhzaylgIHRvIGVuc3VyZSBgc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGFub3RoZXIgdGhyZWFkIGNvbnZlcnRzIHRoZSBzb2NrZXQgdG8gYEFGX0lORVRgIHZpYSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdCwgYXZvaWRpbmcgc3Vic2VxdWVudCBwcm90b2NvbCBtaXNtYXRjaCBhbmQgdHlwZSBjb25mdXNpb24gLyBjb3JydXB0aW9uIGlzc3VlcyBpbiBgaXA2X2FwcGVuZF9kYXRhYC5cXG5cXG5UaGUgY2hlY2sgcmVhZHMgdGhlIHdlbGwtaW5pdGlhbGl6ZWQgYHNrLVxcdTAwM2Vza19mYW1pbHlgIGZpZWxkIG9mIGBzdHJ1Y3Qgc29ja2AgYW5kIGV4aXRzIGVhcmx5IHdpdGggYC1FQUZOT1NVUFBPUlRgLiBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHR5cGUtY29uZnVzaW9uIGJ1Z3MgcmVzdWx0aW5nIGZyb20gbWlzc2luZyB0aGlzIGNoZWNrIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHVkcHY2X3NlbmRtc2dgIHVuZGVyIGBsb2NrX3NvY2soc2spYCB0byBlbnN1cmUgYHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDZgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBhbm90aGVyIHRocmVhZCBjb252ZXJ0cyB0aGUgc29ja2V0IHRvIGBBRl9JTkVUYCB2aWEgYElQVjZfQUREUkZPUk1gIHNldHNvY2tvcHQsIGF2b2lkaW5nIHN1YnNlcXVlbnQgcHJvdG9jb2wgbWlzbWF0Y2ggYW5kIHR5cGUgY29uZnVzaW9uIC8gY29ycnVwdGlvbiBpc3N1ZXMgaW4gYGlwNl9hcHBlbmRfZGF0YWAuXFxuXFxuVGhlIGNoZWNrIHJlYWRzIHRoZSB3ZWxsLWluaXRpYWxpemVkIGBzay1cXHUwMDNlc2tfZmFtaWx5YCBmaWVsZCBvZiBgc3RydWN0IHNvY2tgIGFuZCBleGl0cyBlYXJseSB3aXRoIGAtRUFGTk9TVVBQT1JUYC4gTm8gbmV3IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciB0eXBlLWNvbmZ1c2lvbiBidWdzIHJlc3VsdGluZyBmcm9tIG1pc3NpbmcgdGhpcyBjaGVjayBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[1] Phase: Succeeded StartedAt: 2026-08-29 13:41:52 +0000 UTC FinishedAt: 2026-08-29 13:41:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 13:41:52 +0000 UTC FinishedAt: 2026-08-29 13:41:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2] Phase: Succeeded StartedAt: 2026-08-29 13:41:52 +0000 UTC FinishedAt: 2026-08-29 17:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 13:41:52 +0000 UTC FinishedAt: 2026-08-29 17:21:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 13:41:52 +0000 UTC FinishedAt: 2026-08-29 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 13:41:52 +0000 UTC FinishedAt: 2026-08-29 13:41:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7kcw/series-workflowm7kcw-convert-artifact-3699265438/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 13:42:02 +0000 UTC FinishedAt: 2026-08-29 13:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 13:42:02 +0000 UTC FinishedAt: 2026-08-29 13:58:20 +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:*95dc4ab6-54a7-4d3c-bf8f-0c9ea871cdff,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-workflowm7kcw/series-workflowm7kcw-convert-artifact-3699265438/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": "dc623d37-a6e9-4ee8-b7c8-10365e1748aa", "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-workflowm7kcw/series-workflowm7kcw-build-action-4207678596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 13:42:02 +0000 UTC FinishedAt: 2026-08-29 13:58:18 +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:*95dc4ab6-54a7-4d3c-bf8f-0c9ea871cdff,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-workflowm7kcw/series-workflowm7kcw-convert-artifact-3699265438/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": "dc623d37-a6e9-4ee8-b7c8-10365e1748aa", "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-workflowm7kcw/series-workflowm7kcw-build-action-4207678596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 13:58:20 +0000 UTC FinishedAt: 2026-08-29 13:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 13:58:20 +0000 UTC FinishedAt: 2026-08-29 13:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 13:58:20 +0000 UTC FinishedAt: 2026-08-29 13:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 13:58:20 +0000 UTC FinishedAt: 2026-08-29 13:58:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7kcw/series-workflowm7kcw-convert-artifact-1753583953/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 13:58:30 +0000 UTC FinishedAt: 2026-08-29 14:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 13:58:30 +0000 UTC FinishedAt: 2026-08-29 14:00:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc623d37-a6e9-4ee8-b7c8-10365e1748aa,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-workflowm7kcw/series-workflowm7kcw-build-action-4207678596/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-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 14:00:26 +0000 UTC FinishedAt: 2026-08-29 14:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 14:00:26 +0000 UTC FinishedAt: 2026-08-29 14:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 14:00:26 +0000 UTC FinishedAt: 2026-08-29 14:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 14:00:26 +0000 UTC FinishedAt: 2026-08-29 14:16:48 +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:*95dc4ab6-54a7-4d3c-bf8f-0c9ea871cdff,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-workflowm7kcw/series-workflowm7kcw-convert-artifact-1753583953/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": "aee7df9f-6376-4d9f-81dd-8b65398778c6", "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-workflowm7kcw/series-workflowm7kcw-build-action-2106554141/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 14:00:26 +0000 UTC FinishedAt: 2026-08-29 14:16:38 +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:*95dc4ab6-54a7-4d3c-bf8f-0c9ea871cdff,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-workflowm7kcw/series-workflowm7kcw-convert-artifact-1753583953/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": "aee7df9f-6376-4d9f-81dd-8b65398778c6", "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-workflowm7kcw/series-workflowm7kcw-build-action-2106554141/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 14:16:48 +0000 UTC FinishedAt: 2026-08-29 14:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 14:16:48 +0000 UTC FinishedAt: 2026-08-29 14:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 14:16:48 +0000 UTC FinishedAt: 2026-08-29 14:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 14:16:48 +0000 UTC FinishedAt: 2026-08-29 14:18:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aee7df9f-6376-4d9f-81dd-8b65398778c6,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-workflowm7kcw/series-workflowm7kcw-build-action-2106554141/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-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 17:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 17:21:59 +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":["udpv6_sendmsg"],"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:*dc623d37-a6e9-4ee8-b7c8-10365e1748aa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aee7df9f-6376-4d9f-81dd-8b65398778c6,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-workflowm7kcw/series-workflowm7kcw-build-action-4207678596/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-workflowm7kcw/series-workflowm7kcw-build-action-2106554141/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 14:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 14:18:47 +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":["udpv6_sendmsg"],"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-workflowm7kcw/series-workflowm7kcw-convert-artifact-3307862918/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 14:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 14:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 14:18:42 +0000 UTC FinishedAt: 2026-08-29 14:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 14:18:52 +0000 UTC FinishedAt: 2026-08-29 17:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7kcw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e4f20a7e-1bc8-4076-b731-a3d654e51906","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 14:18:52 +0000 UTC FinishedAt: 2026-08-29 17:21:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc623d37-a6e9-4ee8-b7c8-10365e1748aa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aee7df9f-6376-4d9f-81dd-8b65398778c6,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-workflowm7kcw/series-workflowm7kcw-build-action-4207678596/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-workflowm7kcw/series-workflowm7kcw-build-action-2106554141/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-workflowm7kcw/series-workflowm7kcw-convert-artifact-3307862918/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,}